一致性哈希

把节点与数据都映射到哈希环上,按顺时针就近归属;增删节点时只影响相邻区段的数据,配以虚拟节点缓解负载倾斜,常用于缓存与分片路由。

示意

示意
hash(数据) → 环上位置 → 顺时针第一个节点

增删节点只迁移相邻弧段的数据;
虚拟节点:每个物理节点映射多个环上位置,摊平负载。

虚拟节点示意

虚拟节点示意
物理节点 A → 环上多个位置(A#1 ... A#100)
数据键 hash 后顺时针找到最近位置 → 归属该节点

扩容前后对比:
- 无虚拟节点:负载偏差可能达数倍
- 引入虚拟节点后:偏差收敛到较小范围
虚拟节点数量需要调参:太少仍会倾斜,太多增加路由表内存与查找开销。

易错点

  • 未引入虚拟节点,扩容后负载仍严重倾斜
  • 哈希环状态在客户端间不同步,路由结果不一致

数据来源与参考

  • Karger 等《Consistent Hashing and Random Trees》(STOC 1997)
  • 《数据密集型应用系统设计》(Kleppmann)第 6 章
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌