一致性hash算法

普通的hash算法

假设我们有许多用户画像需要均匀的存放在多台服务器上

做法:

(1)将用户画像的某些属性(如:名称等)经过hash算法算出hash值
(2)hash%服务器台数,算出该用户画像应该存放在哪台服务器上
(3)之后对该用户画像的修改就在这台服务器上进行,就不需要冗余存储了
因为同一个用户画像计算出的hash值是固定的,所以每次映射到的服务器也是同一台

问题:

(1)当用户数量增大需要进行服务器扩充时会导致映射到的服务器跟之前存储的服务器不是同一台
(2)大量缓存失效,会导致查询都跑到后台的业务服务器,可能会导致雪崩

一致性hash算法

为了解决普通hash算法的问题,我们引入了一致性hash算法

做法:

在这里插入图片描述
(1)我们假设有一个2^32长度的hash环
(2)我们除了要计算出用户画像的hash值之外,我们还需要计算各个服务器的hash值
(3)hash%2^32,计算出服务器和用户画像在hash环中所处的位置
(4)各个用户画像就存放在hash环顺时针方向上离它最近的服务器中
当我们扩充服务器数量后,仅会有一小部分缓存失效,大部分还是有效的,因此不会导致雪崩

问题

在这里插入图片描述
可能会出现hash偏斜,即服务器在hash环中的位置离的很近,会导致缓存都落在一台服务器上,导致系统崩溃

问题解决

解决的方法:增加虚拟节点,我们让每个服务器都对应hash环上的多个虚拟节点,因为服务器对饮的节点数变多了,因此可以在一定程度上减少不均匀的影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值