新闻详情

新闻详情

首页 / 资讯中心 / 详情

system-design-notes:传统哈希取模为什么不适合大规模集群?节点增删的数据迁移困境

发布时间:2026/9/15 20:47:44来源:尧图网络
system-design-notes:传统哈希取模为什么不适合大规模集群?节点增删的数据迁移困境
system-design-notes传统哈希取模为什么不适合大规模集群节点增删的数据迁移困境【免费下载链接】system-design-notesNotes of the book System Desgin Interview - An Insiders Guide项目地址: https://gitcode.com/GitHub_Trending/sy/system-design-notes在分布式系统设计中如何把数据均匀分散到成百上千台服务器是水平扩展绕不开的核心问题。开源笔记项目 system-design-notes 第 5 章《Design Consistent Hashing》就深入剖析了这一点传统「哈希取模」方案在节点数量变化时会导致大规模集群中大部分数据被迫迁移而**一致性哈希Consistent Hashing**通过哈希环将迁移量降到最低。本文将带你理解这个数据迁移困境以及一致性哈希与虚拟节点给出的答案。一、哈希取模固定集群下的完美方案在服务器数量固定的场景下取模法简单又高效对 key 做哈希再对服务器数量 N 取模就能得到数据应落在哪台服务器上。![一致性哈希笔记中的传统哈希取模数据分配示意图](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/05. Consistent Hashing/images/server-hashing.png?utm_sourcegitcode_repo_files)上图展示了serverIndex hash % 4的分配效果8 个 key 被均匀地分散到 4 台服务器上。对于缓存、负载均衡等场景这种方式查找快、实现简单是教科书级的入门做法。但问题在于——它隐含了一个前提服务器数量 N 永远不变。而真实的生产集群恰恰相反扩容、缩容、机器宕机每天都在发生。二、数据迁移困境一个节点下线全局数据大搬家当集群中某台服务器下线时N 从 4 变成 3取模公式随之改变。灾难就发生了几乎所有 key 的取模结果都会改变它们全部被重新映射到新的服务器上。![一致性哈希笔记中节点下线后哈希取模导致数据大量迁移的示意图](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/05. Consistent Hashing/images/server-hashing-miss.png?utm_sourcegitcode_repo_files)如上图serverIndex hash % 3server 1 下线后原本落在它身上的 key 无一幸免其余服务器上的大量 key 也被迫重新分配图中红色标记的 key0、key3、key4、key5、key7。带来的连锁反应是缓存大面积未命中数据还在但取模公式变了客户端按新规则找到的新家里却没有数据大量数据搬运迁移期间带宽被占满集群响应变慢节点瞬间过载迁移风暴可能压垮本已健康的节点 结论取模法中任何一个节点的增删都会牵动全局迁移成本与集群总数据量成正比——这就是大规模集群无法容忍的原因。三、一致性哈希把线性取模换成哈希环一致性哈希的核心思想很巧妙不再用hash(key) % N而是把哈希值的空间首尾相接构成一个哈希环。![一致性哈希哈希环结构示意图哈希空间首尾相接形成环形](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/05. Consistent Hashing/images/hash-ring.png?utm_sourcegitcode_repo_files)1. 服务器与 key 都映射到环上用同一个哈希函数把服务器 IP 映射到环上的一个位置key 的哈希值同样落在环上。![一致性哈希笔记中服务器映射到哈希环的位置示意图](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/05. Consistent Hashing/images/server-ring.png?utm_sourcegitcode_repo_files)2. 顺时针查找第一个服务器key 的归属规则只有一条从 key 的哈希位置出发沿环顺时针走遇到的第一台服务器就是它的数据存储节点。![一致性哈希笔记中key顺时针查找归属服务器的示意图](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/05. Consistent Hashing/images/server-lookup.png?utm_sourcegitcode_repo_files)这个设计让节点变化的影响范围被天然限制住了每台服务器只负责环上自己到下一台服务器之间的那段弧区间。四、迁移量骤降增删节点只影响相邻区间新增节点新服务器 s4 加入环上后只需要从前驱节点 s3手中接管 s3 与 s4 之间的那一段 key其余数据纹丝不动。![一致性哈希笔记中新增服务器仅迁移相邻区间key的示意图](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/05. Consistent Hashing/images/adding-server.png?utm_sourcegitcode_repo_files)移除节点server 1 下线后它负责的 key 只会顺时针迁移给下一台服务器 s2其他节点上的 key 完全不受影响。![一致性哈希笔记中移除服务器后key仅迁移到下一节点的示意图](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/05. Consistent Hashing/images/removing-server.png?utm_sourcegitcode_repo_files)对比取模法一个节点变化、全局数据搬家一致性哈希把迁移量从N-1 台服务器的全部数据压缩到1/N 左右的局部数据这正是它成为大规模分布式系统标配的原因。五、虚拟节点解决环上负载不均基础版一致性哈希还有一个隐患服务器在环上的位置是哈希随机决定的分区弧长天然参差不齐——运气差的服务器可能接手一大段环成为热点运气好的则闲着。解决方案是虚拟节点每台物理服务器在环上不再只占一个点而是用多个虚拟节点均匀占位。![一致性哈希笔记中虚拟节点均匀分布在哈希环上的示意图](https://raw.gitcode.com/GitHub_Trending/sy/system-design-notes/raw/9d8388721e7231442763ad37398b8d82224aa68f/05. Consistent Hashing/images/virtual-nodes.png?utm_sourcegitcode_repo_files)如上图server 0 和 server 1 各自以多个虚拟节点s0_0、s0_1…s1_2分散占位。虚拟节点越多key 的分布越接近理想均匀标准差随虚拟节点数增加而减小。此外虚拟节点数量还能按物理机容量配置天然支持异构集群——大内存机器分配更多虚拟节点自动承担更多数据。六、总结从取模到哈希环的演进逻辑方案节点增删的迁移范围负载均匀性适用场景哈希取模几乎全局重映射均匀服务器数量固定的小集群一致性哈希仅约 1/N 局部迁移依赖节点分布需要动态扩缩容的集群一致性哈希 虚拟节点仅约 1/N 局部迁移虚拟节点数越多越均匀生产级大规模分布式系统 一句话记住取模法让变化扩散到全局哈希环让变化停留在局部——这就是节点增删数据迁移困境的终极答案。一致性哈希也是 Amazon DynamoDB、Apache Cassandra、Discord、Akamai CDN 等真实系统的基础设施。想继续深入可以阅读本章完整的笔记与配套架构图一致性哈希章节全文05. Consistent Hashing/Readme.md下一章 Key-Value Store 中的环形数据分片实践06. Key-Value Store/Readme.md水平扩展的入门背景01. Scaling/Readme.md【免费下载链接】system-design-notesNotes of the book System Desgin Interview - An Insiders Guide项目地址: https://gitcode.com/GitHub_Trending/sy/system-design-notes创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

基于暗通道先验的图像去雾MATLAB实现:从原理到参数调优 2026/9/15 21:29:55

基于暗通道先验的图像去雾MATLAB实现:从原理到参数调优

简介:何凯明图像去雾算法的MATLAB程序包,围绕图像去雾这一经典难题,提供从代码实现到界面交互的完整方案,面向图像处理学习者、计算机视觉研究者与相关课程设计开发者等群体。压缩包共15.42MB,内含12个文件&#xff0c…

阅读更多 →
UKF无迹卡尔曼滤波Matlab实现:sigma点生成与预测更新全解析 2026/9/15 21:29:55

UKF无迹卡尔曼滤波Matlab实现:sigma点生成与预测更新全解析

简介:面向非线性系统状态估计问题的无迹卡尔曼滤波(UKF)MATLAB实现,压缩包内共1个m文件,体积仅2KB,是一份轻量级的状态估计算法参考代码。文件中完成UKF核心迭代闭环,包括利用无迹变换生成sigma…

阅读更多 →
MATLAB阵列仿真:线阵、面阵、圆阵的方向图计算与参数调优 2026/9/15 21:29:55

MATLAB阵列仿真:线阵、面阵、圆阵的方向图计算与参数调优

简介:面向无线通信、雷达与声学领域的阵列天线研究者和学习者,这份Patern.rar压缩包提供了线阵、面阵、圆阵三种典型天线配置的MATLAB仿真程序,用于方向图计算、可视化与阵列性能分析。压缩包共4个文件,包含均匀线阵方向图、均匀面…

阅读更多 →
ATTCK框架入门:从攻击行为描述到安全运营实战拆解 2026/9/15 21:29:55

ATTCK框架入门:从攻击行为描述到安全运营实战拆解

聊聊我为什么劝每个安全人都要啃下ATT&CK先说个真实感受。我最早接触MITRE ATT&CK那会儿,说实话是有点抵触的。市面上讲威胁检测的书那么多,什么Cyber Kill Chain、钻石模型,我自问都还能说上几句。ATT&CK这东西打开官网&#xf…

阅读更多 →
SpringBoot校园服务平台开发实战与优化 2026/9/15 21:29:55

SpringBoot校园服务平台开发实战与优化

1. 项目概述微乐校园平台是一个基于SpringBoot框架开发的校园服务综合系统,主要面向高校师生群体提供便捷的校园生活服务。作为计算机相关专业的毕业设计选题,这个项目完美结合了当前主流技术栈与实际应用场景,既能够展示学生的技术能力&…

阅读更多 →
COMSOL凝固仿真全攻略:从等效热容法到多物理场收敛排查 2026/9/15 21:26:55

COMSOL凝固仿真全攻略:从等效热容法到多物理场收敛排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞