系统性能调优必知必会
陶辉
智链达 CTO,前阿里云 P8 高级技术专家
36367 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
系统性能调优必知必会
15
15
1.0x
00:00/00:00
登录|注册

24 | 一致性哈希:如何高效地均衡负载?

一致性哈希算法 vs. 其他方案
将数据与节点的映射关系放在另一个服务中持久化存储
扩容的新节点分流所有节点的压力
宕机时由所有节点共同分担流量缺口
通过新的哈希函数分散不均匀的数据
引入虚拟节点层
容灾与扩容时相邻节点受影响
数据不均衡
适用场景更广
一致性哈希算法:O(M/N)
传统哈希算法:O(M)
一致性哈希算法:O(logN)
传统哈希算法:O(1)
适用场景
优劣比较
其他方案
优点
原理
解决问题
优点
数据迁移规模
时间复杂度
将哈希环分成N段,每个主机节点处理对应段内的数据
将关键字映射为32位整型哈希值
服务器节点不同构
访问量不均衡
数据分布不均衡
代表哈希桶的服务器节点数变化导致数据迁移
思考题
虚拟节点
优劣分析
工作原理
问题
一致性哈希算法

该思维导图由 AI 生成,仅供参考

你好,我是陶辉。
还记得我们在[第 22 讲] 谈到的 Cassandra 数据库吗?它将服务器节点组成一个环来存储数据,所使用的就是一致性哈希算法。那这一讲,我们就来看看一致性哈希算法是怎样工作的。
使用哈希算法扩展系统时,最大的问题在于代表哈希桶的服务器节点数发生变化时,哈希函数就改变了,数据与节点间的映射关系自然发生了变化,结果大量数据就得在服务器间迁移。特别是含有多份冗余数据的系统,迁移工作量更是会成倍提高。
同时,为了在整体上更加充分地使用 IT 资源,我们必须解决分布式系统扩展时可能出现的两个问题:数据分布不均衡和访问量不均衡。比如,对于包含 10 个服务器节点、持久化 1 亿条用户数据的有状态服务,如果采用关键字模 10(key%10)的哈希算法作为路由策略,就很难保证每个节点处理 1 千万条数据,那些可能还未达到一半设计容量的节点会浪费大量磁盘空间。
即使节点间存储的数据非常均匀,但这些数据间的活跃程度也不相同,存放热点数据较多的节点访问量非常大,很容易率先达到 CPU 瓶颈,在许多主机节点还很空闲时,我们就得扩容系统。
特别是我们很难保证集群内的所有节点都是同构的,如果哈希算法不能区别对待不同配置的服务器,也会抬高 IT 成本。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

一致性哈希算法是解决分布式系统负载均衡和数据迁移问题的重要算法。传统哈希算法在节点数变化时会导致大量数据迁移,而一致性哈希算法通过将哈希值映射到一个环上,并根据节点数量均匀划分环来分配数据,减少数据迁移量。虚拟节点的引入进一步提高了数据的均衡性和系统的容错能力。一致性哈希算法虽然增加了映射函数的时间复杂度,但在实际应用中性价比很高。相比之下,将数据与节点的映射关系放在另一个服务中持久化存储的方案也可行,但需要权衡其优劣和适用场景。文章深入浅出地介绍了一致性哈希算法的工作原理和优化方案,对于分布式系统的设计和优化具有重要参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《系统性能调优必知必会》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • Geek_Jean
    看到这个标题,义不容辞的订阅了陶老师的课。并且定了其它几个专栏。目前看了介绍,刚听完第一节(慢慢跟上步伐),内容里似乎都是和程序设计有关的,我是一名测试工程师,希望在性能测试方面有更大的提升,请问这个课程对测试人员适合学吗?如果适合,那和我们的程序员比起来,怎么学更容易消化?

    作者回复: 你好Geek_Jean,这门课对于想从黑盒向白盒发展,且能够做好性能测试,并给予开发团队明确的性能优化意见的测试人员,是很有帮助的。 另外,测试人员可以更多的从实践中动手来学习,你正在使用的服务都与这门课介绍的知识点相关,可以看看源码,从各种监控上验证课程的内容。

    2020-07-04
    3
    1
  • 亦知码蚁
    上图为了方便你理解,每个真实节点仅包含 4 个虚拟节点,这样能起到的均衡效果其实很有限。为什么真实节点只包含4个虚拟节点?而不是8个?

    作者回复: 笔误了,应该是8个,谢谢,我马上联系编辑更新

    2020-07-09
  • 唐朝首都
    中心化元数据服务: (1)优点:寻找效率更高;集群维护更为集中高效。 (2)缺点:单点故障;性能、容量存在扩展的上限。 (3)适用场景:不太适用于大量小文件的场景。
    2020-07-03
    2
    11
  • 万历十五年
    对于从一开始的普通哈希,到一致性哈希,以及最后增加虚拟节点,可以简单理解为,通过一次哈希,二次哈希和三次哈希,提升了数据分布的均匀性。
    2020-10-30
    4
  • 唐朝首都
    中心化元数据服务: (1)优点:寻找效率更高;集群维护更为集中高效。 (2)缺点:单点故障;性能、容量存在扩展的上限。 (3)适用场景:不太适用于大量小文件的场景。
    2020-07-03
    1
  • stackWarn
    不知道三层交换机上是否有相关一致性哈希的配置,目前接入层的流量就不太均衡😂
    2020-07-03
    1
  • kkxue
    比如下图中我们将 3 个节点的集群扩容为 4 个节点,只需要将节点 0 上一半的数据迁移至节点 3 即可,其他节点不受影响 这里有两个问题: 1、为什么节点3会在节点0后面? 2、为什么迁移节点0上面一半的数据?
    2022-11-09归属地:广东
  • êwěn
    思考题codis好像就这么干的。 另外解决热点问题可尝试下有界负载一致性hash: https://mozillazg.com/2019/04/load-balancing-strategy-algorithm-consistent-hashing-with-bounded-loads
    2021-04-13
  • test
    使用存储的话,需要维护多一个服务,以及该服务的可靠性、可用性,优点是不需要实时计算哈希值,减少了算力的需要。
    2020-07-03
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部