【算法】一致性哈希

一致性哈希

在分布式集群系统中会用到一致性哈希算法,在此进行记录。

一般系统分为前端服务器和后端服务器,前端服务器负责数据的接收和分发工作,后端负责存储、处理、提供数据。后端服务器不止一台,此时就涉及到了数据如何分发的问题。一致性哈希算法就可以用来解决这一问题。

经典结构

通过哈希函数我们可以建立key-value的对应关系。假设目前一共有3台服务器用于数据存储,那么在一个数据存储request发来时,可以对其计算一个hash value,然后将hash value模3来决定将该数据存储在哪台机器当中。由于哈希函数的均匀随机特性,可以做到数据存储的负载均衡。
经典存储结构
**缺陷:**虽然这种经典结构可以做到负载均衡,但是在增加删除机器时,需要重新计算一遍所有数据的哈希值来确定其新的所属的机器。

一致性哈希

针对经典结构不利于机器添加删除的缺陷,提出一致性哈希算法。
将哈希函数域的最大值为max_value,将其值域看做一个首尾相连的环,然后根据机器的ip或者mac值算出一个hash value,从而确定该机器在这个环上的位置。将机器的hash value排序后存储在前端服务器当中,这样在一个request到来时,算出其hash value,然后根据这个值得到第一个哈希值大于该值的机器,然后将该数据存储在这台机器当中。
在这里插入图片描述
新增机器时,例如图中新增机器m4,算得哈希值位于m2与m3之间,那么就将m3中哈希值小于m4机器哈希值的数据转移存储到m4当中。如果要删除m4,就将m4中的数据全部交给m3。

**缺陷:**虽然通过上述方法可以实现机器方便的添加删除,但由于哈希函数的随机特性,当机器很多时可以做到数据存储负载均衡,而机器少时,很可能某些机器存储的数据很少,某些机器存储的数据却很多,做不到负载均衡,且即使某情况下均衡了,后续添加机器又会破坏这种均衡。

虚拟节点技术

针对上述缺陷,提出虚拟节点技术:对每个机器产生很多个虚拟值,然后对这些虚拟值计算哈希值,得到很多个虚拟节点去占据哈希域(相当于一个机器模拟了许多虚拟机器)。然后将属于虚拟节点的数据交给对应的机器。
在这里插入图片描述

总:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值