一致性哈希

来源:

https://blog.csdn.net/weixin_39094034/article/details/128264838

一致性哈希算法(consistent hashing) - 知乎 (zhihu.com)

背景:对于分布式存储,不同的机器上存储不同的数据,使用哈希函数建立数据到服务器之间的映射关系。

使用简单的哈希函数

Machine = hash(object) mod n,n为机器的数量

当增加或减少机器数量时,需要有大量的数据在机器间迁移,导致网络通信压力的剧增,严重情况,还可能导致数据库宕机。

一致性哈希

一致性哈希就是为了解决上述问题,它可以保证当机器的数量增加或减少时,节点之间的数据迁移只限于两个节点之间,不涉及其他节点,这样就不会造成全局的网络问题。

环形Hash空间

按照常用的hash算法将key哈希到[0,2^{32}-1]的数字空间中,将这些数字头尾相连,构成一个闭合的环形。

将数据通过hash映射到环上

例如将object1、object2、object3、object4通过特定的hash函数计算出对应的key值,散列到hash环上,

Hash(object1) = key1; Hash(object2) = key2; Hash(object3) = key3; Hash(object4) = key4;

同样地,将机器映射到环上

将数据存储到机器上

通过上图可以看出对象与机器处于同一哈希空间中,可以按照顺时针转动数据对象,将数据存储到对应的机器上

机器的添加与删除

  1. 添加新机器

向集群中添加新的机器c4,c4经过hash函数映射到c2、c3之间,根据顺时针存储规则,只需要属于本台机器的数据从另一台机器中迁移过来即可,其他的机器不会收到影响。

2. 删除一台机器

原理与添加机器基本一致

一致性哈希存在的问题

当集群中的节点数量较少时,可能会出现节点在哈希空间分布不平衡的问题,造成hash环的倾斜。极端情况下,某存储了大量数据的节点宕机,大量数据迁移导致下一个节点崩溃,逐步迁移导致整个集群宕机,称为雪崩效应。

解决办法:虚拟节点

思路就是,让集群中的节点尽可能的多,从而让节点尽量均匀地分布在哈希空间中。通过将现有的物理节点通过虚拟的方法复制多个出来,从而使哈希空间平衡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值