每天学一个算法--一致性哈希(Consistent Hashing)

📘 教案 22:一致性哈希(Consistent Hashing)


一、问题背景

在分布式系统中,需要解决一个基本问题:

如何将大量数据分布到多个服务器上?


典型场景

  • 缓存系统(Redis 集群)
  • 分布式数据库分片
  • 负载均衡

二、最直观的方法(问题的起点)


方法:取模

node=hash(key)mod  N\]\[ node = hash(key) \\mod N \]\[node=hash(key)modN


示例

text 复制代码
服务器数 N = 3
key → hash → %3 → 节点

三、取模的问题(核心缺陷)


当服务器数量变化:

text 复制代码
N = 3 → N = 4

结果:

👉 几乎所有数据重新映射


问题本质

数据分布对节点数量"高度敏感"


四、一致性哈希的核心思想


将"节点"和"数据"统一映射到同一个哈希空间中


构建方式


1️⃣ 构建一个哈希环

text 复制代码
0 ------------------------ 2^32
(首尾相连)

2️⃣ 将服务器映射到环上

text 复制代码
Server A → hash(A)
Server B → hash(B)

3️⃣ 将 key 映射到环上

text 复制代码
key → hash(key)

4️⃣ 分配规则

顺时针找到第一个服务器


示例

text 复制代码
key → 落在环上 → 顺时针找到节点

五、节点变化的影响


新增节点

text 复制代码
插入一个新节点

影响:

👉 只影响该节点前一段区间的数据


删除节点

text 复制代码
删除一个节点

影响:

👉 数据只迁移到下一个节点


🔥 关键优势


节点变化时,仅有 局部数据迁移


六、核心性质


1️⃣ 局部性(Locality)

节点变化只影响局部数据


2️⃣ 单调性(Monotonicity)

新增节点不会导致已有数据"乱跳"


3️⃣ 平衡性(Balance)

数据分布尽量均匀


七、问题:分布不均


如果节点少:

text 复制代码
数据可能集中在某些节点

八、解决方案:虚拟节点(Virtual Nodes)


思想

每个物理节点对应多个"虚拟节点"


示例

text 复制代码
Server A → A1, A2, A3...

👉 分布更均匀


九、查找过程(工程实现)


通常使用:

  • 有序结构(TreeMap / SortedList)

查找:

text 复制代码
hash(key) → 在环上找 ≥ key 的第一个节点

十、复杂度


  • 查找:(O(\log N))
  • 插入节点:(O(\log N))

十一、典型应用


1️⃣ 分布式缓存(Redis Cluster)


2️⃣ 分布式存储(Cassandra / Dynamo)


3️⃣ CDN 负载均衡


4️⃣ 微服务路由


十二、与普通哈希的对比


方法 节点变化影响
hash % N 全局重排
一致性哈希 局部调整

十三、本质总结

一致性哈希通过将节点与数据映射到同一哈希空间,并基于环结构进行分配,使得在节点动态变化时,仅需对局部数据进行迁移,从而显著降低系统重平衡成本。

相关推荐
团象科技13 分钟前
走访近百支出海技术团队后的海外云计算资源选型实操观察
大数据·人工智能·算法
勤自省29 分钟前
吴恩达机器学习课程实验:线性回归模型入门(课后实验)
人工智能·算法·机器学习·回归·线性回归
ChillCoding34 分钟前
更新中:C++ STL库,查找排序(基础算法),数据结构,数学算法,竞赛相关基础
数据结构·c++·算法
智者知已应修善业39 分钟前
【51单片机使用IO组赋值方法实现无源蜂鸣器响时LED12亮不响时34亮】2024-3-7
c++·经验分享·笔记·算法·51单片机
珊瑚里的鱼1 小时前
【动态规划】按摩师
算法·动态规划
Fms_Sa1 小时前
贪心算法-背包问题
算法·贪心算法·c#
大雨淅淅1 小时前
【机器人】ROS2 机械臂控制(MoveIt2)从入门到实战
人工智能·python·神经网络·学习·算法·机器学习·机器人
智者知已应修善业1 小时前
【51单片机0.1秒计时到21.0时点亮LED】2024-1-5
c++·经验分享·笔记·算法·51单片机
apcipot_rain1 小时前
计科八股20260606——二叉树、PCA、图深度学习、进程上下文、C语言预编译、文件读写、单精度浮点数
c语言·数据结构·算法·pca·图神经网络
scx_link2 小时前
逻辑回归的总结
算法·机器学习·逻辑回归