# 调度: 生成调度

+ Balance
  + leader
  + region
+ Hot region
+ 集群拓扑
+ 缩容
+ 故障恢复
+ Region merge
-------------------------------------------------------------
不同的调度器从自身的逻辑和需求出发, 考虑各种限制和约束后生成待执行的 Operator。先让我们来解释一下什么是 Operator, Operator 是应用于一个 Region 的, 服务于某个调度目的一系列操作的集合。例如 "将 Region 2 的 Leader 迁移至 Store 5", "将 Region 2 的副本迁移到 Store 1, 4, 5" 等。

Operator 可以是由 PD 通过计算生成的, 也可以是由外部 API 手动创建的。

比较有代表性的调度有以下这些:

`Balance:` 将 Region 均匀地分散在集群中的所有 Store 上。

`Hot region:` 对于写热点, 热点调度会同时尝试打散热点 Region 的 Peer 和 Leader；对于读热点,由于只有 Leader 承载读压力,热点调度会尝试将热点 Region 的 Leader 打散。详细内容请参考后面章节。

集群拓扑: 让 PD 感知不同节点分布的拓扑是为了通过调度使不同 Region 的各个副本尽可能分散,保证高可用和容灾。例如集群有 3 个数据中心,最安全的调度方式就是把 Region 的 3 个 Peer 分别放置在不同的数据中心,这样任意一个数据中心故障时,都能继续提供服务。

缩容: 缩容是指预备将某个 Store 下线,通过命令将该 Store 标记为 Offline 状态,此时 PD 通过调度将待下线节点上的 Region 迁移至其他节点。

故障恢复: 故障恢复是指当有 Store 发生故障且无法恢复时,有 Peer 分布在对应 Store 上的 Region 会产生缺少副本的状况,此时 PD 需要在其他节点上为这些 Region 补副本。

`Region merge:` Region merge 指的是为了避免删除数据后大量小 Region 甚至空 Region 消耗系统资源,通过调度把相邻的小 Region 合并的过程。