# 调度: 总流程

__*调度总流程*__

![`smart`](./student-guide/diagram/SchedulingProcessOverview_zh_002_20220509.png)
-------------------------------------------------------------
作为分布式高可用的数据库存储, 必须满足如下要求:
- 副本数量固定
- 副本需要分布在不同的节点上
- 新添加节点后, 可以将其他节点上的副本迁移过来
- 节点下线后, 需要将该节点的数据迁移走

同时需要满足如下性能要求:
- 维持整个集群的 `Leader` 分布均匀
- 维持每个节点的储存容量均匀
- 维持访问热点分布均匀
- 控制 `rebalance` 的速度, 避免影响在线服务
- 管理节点状态,包括手动上线/下线节点,以及自动下线失效节点

为了满足这些需求,首先我们需要收集足够的信息,比如每个节点的状态、每个 Raft Group 的信息、业务访问操作的统计等；其次需要设置一些策略,PD 根据这些信息以及调度的策略,制定出尽量满足前面所述需求的调度计划；最后需要一些基本的操作,来完成调度计划。
由于 TiKV 不负责 region 的分配,所以只有 PD 具有全局视角,那么完成这个任务的只能是 PD 节点,于是整个流程为:
1. 信息收集
2. 生成调度
3. 执行调度