一致性hash算法_面试题:分布式系统的一致性hash算法原理

本文深入浅出地介绍了在分布式系统中应用广泛的一致性Hash算法。该算法通过构造虚拟哈希环实现数据均衡分配,有效提升系统的容错性和扩展性。文章详细解释了服务器节点与数据如何在哈希环上分布,并探讨了虚拟节点的概念及其作用。
摘要由CSDN通过智能技术生成

一致性hash算法的介绍

在分布式系统中,对服务的请求进行负载均衡,让请求能够均匀的分发到每一台服务器上,是最常见的应用场景。

而一致性hash算法就是一种分布式算法,常用于负载均衡。它将整个哈希值空间组织成一个虚拟的哈希环,hash值的空间范围为:0到(2^32) - 1,它俩位置重合,如图1所示:

a964123afdbd54eb0291d2a5c0746fdd.png

图1

分析哈希环上的节点和数据分布情况

我们分析下服务器节点访问服务器的数据分别是如何在哈希环上分布的。

  • 服务器节点

该哈希环上散列分布着各个服务器节点的hash值,这个hash值以顺时针的顺序,从0开始,0、1、2、3直到(2^32) - 1,最后散列分布在哈希环上。hash值是由服务器节点的ip或者服务器名这种唯一的关键标识作为key进行hash(key)计算,从而得到hash值。如图2所示:

6420714fee419e15335296359ac19219.png

图2

  • 访问服务器的数据

然后使用同样的hash(key)函数,将访问服务器的数据作为key计算出hash值,散列分布在哈希环上。以顺时针的方向,数据的hash值找到距离最近的服务器节点的hash位置,那么此服务器节点就是被数据访问的位置。如图3所示:

28cfaa21ba0e6c4b04de09a81216856b.png

图3

一致性hash算法的容错性和扩展性

  • 容错性指的是,比如某台服务器宕机了,对外不提供能力的时候,也能够不影响整体的服务运行。如图4所示:

服务器ip1宕机了,那么根据顺时针方向,数据A就会定位到服务器ip2上,很好的保证了容错性。

4a27d3021fa3a34e0d2c9d9316cbaca3.png

图4

  • 扩展性指的是,新增一台或多台服务器节点ip4,那么数据C就会定位到距离它更近这台新增加的服务器ip4上面,体现了其扩展性能高的特点。如图5所示:
aab792a37256d7ac0c7a74276e565b93.png

图5

虚拟节点

概念:虚拟节点是在服务器数量较少的情况下,通过虚拟节点变相的增加服务器节点,使得请求访问更加均衡。

当服务器节点数量非常少的情况下,数据的访问容易出现数据倾斜,导致请求访问不均匀。如图6所示:

只有两台服务器ip1和ip2,如果数据的hash值大量分布在0到hash(ip1)之间,这些数据都会去访问服务器ip1,服务器ip1的承受的压力可想而知。

6d5f08ffe4e8c305008b7a49bf6329c7.png

图6

导致这种请求访问不均匀的根本原因就是服务器数量太少,解决这种服务器数量少的方式就是将现有的物理节点通过虚拟的方式复制出来,从而让hash环上的服务器节点更加均匀的分布,同时更加均匀的被数据请求访问。

总结

融会贯通才是王道。在面试中能够以这样的知识面来答复面试官的提问,拿到入职offer不成问题。加油吧!


作者:杨工,北京互联网公司在职Java开发,专注分享写作干货。欢迎关注我,期待你的点赞评论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值