# 调度 生成调度

+ 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 上。可以分为 2 种：
    - leader关注 Region 的 Leader，可以认为目的是分散处理客户端请求的压力。
    - region关注 Region 的各个 Peer，目的是分散存储的压力，同时避免出现磁盘满。
  - 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 合并的过程。