再平衡与热点治理

05-事务与数据系统 核心 约 20 分钟 #再平衡#热点#加盐#调度 更新 2026-10-02
当前状态:未学
本文基于模型知识整理(生成时未联网核对),关键结论建议对照经典文献复核。

一句话定义

再平衡是在节点增减或负载漂移时把分片在集群中重新分配的过程,目标是以最小的迁移量、最平稳的双写过渡达成均衡;热点治理则在上游把倾斜的 key 拆散或分流,让再平衡有得可调。

为什么重要

分区上线只是开始:大促扩容、机器淘汰、数据自然增长都在触发再平衡。迁移期间的性能抖动、双写窗口的数据正确性、迁移失败的回滚,都是生产事故高发区;而热点(名人效应、时间序列尾部)会让"均衡的分片数"形同虚设。

前置知识

kp-025(分区模型与路由)。

核心概念

  • 再平衡策略:静态分片 + 槽位迁移(Redis/Kafka Reassign);动态分裂合并(按容量阈值分裂 Region/Partition,HBase/TiDB/DynamoDB);一致性哈希弧段迁移(kp-025)。
  • 迁移协议:快照 + 增量追平(bulk copy + cdc 回放)→ 原子切换路由(切读写)→ 清理旧副本。
  • 双写/双读窗口:切换前的过渡期,同一 key 可能有两个权威副本,必须定义唯一裁决者(版本号/时间戳较新者)。
  • 热点类型:写入热点(时间尾部、自增 ID)、读取热点(名人/爆款 key)、分区热点(元数据调度不均)。
  • 加盐(salting):key 前缀加随机桶号(0~N),把单 key 负载摊到 N 个分区,读端聚合。

原理与机制

安全再平衡的三要素:

  1. 限速:迁移流量与业务流量共享 IO/网络,不限速会拖垮在线服务(迁移限流是调度器的标配参数);
  2. 裁决唯一:切换瞬间新老路径并存,读写必须路由到唯一权威(路由表原子更新 + 客户端重定向),并保留旧副本只读直到确认收敛;
  3. 可回滚:迁移失败能退回旧布局,旧副本在确认删除前不可物理清除。

动态分裂的阈值权衡:分裂阈值大 → 分片过大、迁移单元太重;阈值小 → 元数据暴涨、每分片 Raft 组心跳开销放大(Multi-Raft 系统的心跳与调度成本是真实约束,TiDB 默认 Region ~96MB 是这类折衷的产物)。

热点治理的层次:发现(监控按 key/分区聚合的 QPS)→ 上游打散(加盐、随机后缀、二级哈希)→ 存储层分摊(把名人 key 的读放大到多副本负载均衡)→ 业务兜底(缓存kp、限流降级 kp-030)。注意加盐的代价:范围查询与原子操作被打散后需要聚合/重试,N 的取值是倾斜程度与聚合成本的平衡。

图示

迁移一个分片:
 1. 目标节点建空分片 → 2. 全量快照拷贝
 3. 增量日志追平(catch-up) → 4. 短暂禁写/版本检查
 5. 路由表原子切换 → 6. 旧副本降为只读 → 7. 清理
热点: key=seller:888 (50% QPS) → 加盐 seller:888:{0..9} → 10 分片分摊

实例或案例

  • Kafka 分区重分配:kafka-reassign-partitions 工具 + throttling 参数;大集群迁移必须限速否则打爆 broker 网卡。
  • TiDB/PD 调度:PD 依据 Region 大小、热点统计自动 balance 与 split;热点 Region 的 manual split 是运维常规操作。
  • 秒杀场景:单品库存热点——典型做法是库存分桶(加盐)+ Redis 预扣 + 异步落库,把单 key 写放大为 N 桶并行。

常见误区

  • 误区一:"均衡分片数 = 均衡负载"。热点 key 会把任意均匀布局打穿;负载均衡必须以实际 QPS/字节数(而非仅容量)为信号。
  • 误区二:"迁移时不用管业务"。切换窗口的路由抖动会造成超时与重复请求,业务侧幂等(kp-029)与重试预算必须预先就位。
  • 误区三:"加盐一加了之"。读端聚合与跨桶原子性代价常被忽略;桶数 N 过大反而放大查询扇出。

与其他知识点的关系

  • kp-025:分区模型是再平衡的对象。
  • kp-019:Multi-Raft 每分片一组共识,分片数直接放大心跳成本。
  • kp-029/030:迁移窗口的幂等与限流保护。
  • kp-032:TiDB/Kafka 的调度器是完整案例。

自测题

  1. 再平衡限速为什么是必需项?

答:迁移流量与业务共享网络/磁盘 IO,不限速会挤占在线请求造成抖动甚至雪崩;限速把迁移时长与业务影响做成可调权衡。

  1. 双写窗口如何保证数据唯一裁决?

答:路由原子切换 + 版本/时间戳较新者为准,旧副本只读直至确认收敛;任何窗口内的冲突写都要可判序。

  1. 加盐治热点的代价是什么?

答:打散后范围查询需跨桶聚合、原子操作需跨桶协调,读端扇出增加;桶数需在倾斜程度与聚合成本间权衡。

延伸阅读

  • Kleppmann《DDIA》第 6 章再平衡一节。
  • Kafka 官方文档:partition reassignment & throttling。
  • TiDB PD 调度器设计文档(热点调度)。