# 调度：过程

![`smart`](SchedulingProcessOverview_en_002_20220509.png)

------------------------------------------------------------
作为一个分布式、高可用的数据库存储，我们必须满足以下要求：
- 固定副本数量。
- 复制品需要分布在不同的节点上。
- 添加新节点后，您可以将副本迁移到另一个节点。
- 如果节点离线，集群应该安排数据副本迁移到其中一个存活节点。

此外，我们需要满足以下性能要求：
- 保持集群中领导者的均匀分布。
- 保持每个节点的存储容量一致。
- 保持热点的均匀分布。
- 控制Balance的速度以避免影响在线服务。
- 管理节点状态，包括手动上线/下线节点，以及自动下线失败的节点。

为了满足这些要求，我们首先需要收集足够的信息，比如每个节点的状态、每个Raft组的信息、服务访问操作的统计等。其次，我们需要制定一些策略。基于这些信息和调度策略，PD将制定一个尽可能满足上述要求的调度计划；最后，需要一些基本操作来完成调度计划。

因为TiKV不负责分配Region，只有PD才有完整的视角，所以只有PD节点才能完成这项任务，因此整个过程如下：
1. 收集信息。
2. 生成日程表。
3. 执行调度。