再平衡与热点治理
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 个分区,读端聚合。
原理与机制
安全再平衡的三要素:
- 限速:迁移流量与业务流量共享 IO/网络,不限速会拖垮在线服务(迁移限流是调度器的标配参数);
- 裁决唯一:切换瞬间新老路径并存,读写必须路由到唯一权威(路由表原子更新 + 客户端重定向),并保留旧副本只读直到确认收敛;
- 可回滚:迁移失败能退回旧布局,旧副本在确认删除前不可物理清除。
动态分裂的阈值权衡:分裂阈值大 → 分片过大、迁移单元太重;阈值小 → 元数据暴涨、每分片 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 的调度器是完整案例。
自测题
- 再平衡限速为什么是必需项?
答:迁移流量与业务共享网络/磁盘 IO,不限速会挤占在线请求造成抖动甚至雪崩;限速把迁移时长与业务影响做成可调权衡。
- 双写窗口如何保证数据唯一裁决?
答:路由原子切换 + 版本/时间戳较新者为准,旧副本只读直至确认收敛;任何窗口内的冲突写都要可判序。
- 加盐治热点的代价是什么?
答:打散后范围查询需跨桶聚合、原子操作需跨桶协调,读端扇出增加;桶数需在倾斜程度与聚合成本间权衡。
延伸阅读
- Kleppmann《DDIA》第 6 章再平衡一节。
- Kafka 官方文档:partition reassignment & throttling。
- TiDB PD 调度器设计文档(热点调度)。