一致性哈希介绍

一致性哈希(Consistent Hashing)是一种**"让节点扩缩容时,尽可能少地迁移数据"的分布式哈希算法。
1997 年由 MIT 的 Karger 等人提出,现在几乎成了
分布式缓存、负载均衡、分库分表**的标配。


1. 传统哈希的问题

假设有 N 台缓存节点,用 hash(key) % N 决定数据落在哪台机器。

  • 节点宕机或新增 1 台 → N 变化 → 几乎所有 key 重新映射 → 缓存雪崩,数据库瞬间被打爆。

2. 一致性哈希的核心思想

哈希空间 想象成一条首尾相接的 2³² 环形轨道 (0 → 2³²-1 → 0)。

步骤:

  1. 节点入环:对节点 IP/ID 做 hash,得到其在环上的位置。
  2. 数据入环:对 key 做 hash,顺时针找到第一个节点,就是它的归属。
  3. 节点增减:只影响环上相邻的一段弧,其余数据原地不动。

3. 虚拟节点(Virtual Nodes)------解决"倾斜"**

真实节点很少时,环上分布不均,易产生"数据扎堆"。

给每台物理节点生成上百个虚拟节点 (如 node1#1node1#2...),打散在环上,负载方差瞬间下降。


4. 扩缩容示例

  • 初始 3 台节点 A/B/C,key 按顺时针规则落点。
  • 新增节点 D,位于 B→C 之间:
    仅把原本归属 C 的**"B→D"**这段 key 迁给 D,剩余 90%+ 数据不动
  • 节点 B 宕机:
    原来 B→C 之间的 key 顺时针滑到 C,其他区间无感知

5. 代码级直觉(Python 伪代码)

python 复制代码
import hashlib, bisect, collections

ring = []                                      # 有序哈希环
vnode_map = {}                                # 虚拟节点 → 物理节点
VNODE_PER_NODE = 150

def _hash(x):
    return int(hashlib.md5(x.encode()).hexdigest(), 16)

def add_node(node):
    for v in range(VNODE_PER_NODE):
        h = _hash(f"{node}#{v}")
        ring.insert(bisect.bisect_left(ring, h), h)
        vnode_map[h] = node

def get_node(key):
    if not ring: return None
    h = _hash(key)
    pos = bisect.bisect(ring, h) % len(ring)
    return vnode_map[ring[pos]]

增删节点只需 add_node/remove_node,调用端零感知。


6. 一句话总结

一致性哈希 = "把节点和数据放到同一个环上,顺时针找邻居"

节点变化时的数据迁移量从 O(M) 降到 O(M/N)

再加虚拟节点解决倾斜,就成为分布式系统里最优雅的数据分片方案

相关推荐
这个DBA有点耶1 小时前
从DBA到数据架构师(五):数据架构演进中的技术债务管理
数据库·程序人生·云原生·架构·dba·数据库管理员
沪上企服通2 小时前
高端财税的技术切面:从“可审计级旧账重建“看企业税务合规中台的架构演进
架构
dogstarhuang2 小时前
大模型 API 停服怎么办:用 API 网关实现多模型统一接入与可切换架构
人工智能·后端·架构·大模型·api·数字化转型·ai应用
过江龙8474 小时前
Java架构师的AI转型之路(中):Agent与编排体系实战
架构
ziyun6668884 小时前
Docker 容器化 Web 服务架构搭建与自动化运维项目
运维·docker·架构
技术传感器4 小时前
让 Hermes 自动完成一个软件需求:从 Issue 到 PR 的 AI 开发流水线
人工智能·架构·aigc·需求分析·issue
Rain的Java大神之路5 小时前
线上接口负载满了如何解决
java·数据库·redis·后端·缓存·面试·架构
霸道流氓气质5 小时前
微服务架构中多实例消息抢占问题:技术解析与解决方案
微服务·云原生·架构
Dr.kangder5 小时前
嵌入式面试总结(十八)——JTAG调试
嵌入式硬件·面试·职场和发展·架构·嵌入式
奈斯先生Vector6 小时前
AI 视频不是会动的图片:用 Shot Contract、时间码与音画质检构建可交付流水线
人工智能·重构·架构·prompt·aigc·音视频