# 调度 总流程

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

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

为了满足这些需求，首先我们需要收集足够的信息，比如每个节点的状态、每个 Raft Group 的信息、业务访问操作的统计等；其次需要设置一些策略，PD 根据这些信息以及调度的策略，制定出尽量满足前面所述需求的调度计划；最后需要一些基本的操作，来完成调度计划。

由于 TiKV 不负责 region 的分配，所以只有 PD 具有全局视角，那么完成这个任务的只能是 PD 节点，于是整个流程为：
- 信息收集
- 生成调度
- 执行调度

下面，我们将会分别介绍。