一致性hash算法

学习思路

  1. 什么是hash环
  2. 对象怎么映射到hash环
  3. 服务器节点怎么映射到hash环
  4. 对象怎么映射到服务器节点
  5. 服务器节点新增、失效影响点分析
  6. 虚拟节点

一、什么是hash环

hash算法:通常的hash算法是将一个value映射到一个32位的数字,也就是对应0至2的32次方-1

hash环:就是从0到2的32次方-1首位相连,成为一个环状如下图

                                                     circle space

 二、对象怎么映射到hash环

假设我们这里有4个value通过一定的hash算法得到具体的数字后,对应到hash环上

hash(object)=key,如下图

                                        object                                      

三、服务器节点怎么映射到hash环上

假设我们有3台机器通过和第二部一样的hash算法得到具体的数字后,对应的hash环上

hash(cache)=key;通常情况下技术key的cache一般是服务器的ip或者主机名(确保唯一)

                                   cache

四、对象怎么映射到服务器节点

我们第三步映射到hash环上的key怎么对应到第四步的key呢,即我们知道一个用户id怎么知道它在那个数据库上呢

我们参考第三部的图:

object按顺时针方向找到第一个cache,说明这个object就在这个cache上;(object和cache的hash算法是一样的)

那么根据上面的方法,对象 object1 将被存储到 cache A 上; object2 和 object3 对应到 cache C ; object4 对应到 cache B 

五、服务器节点新增、失效影响点分析

1、服务器节点失效(服务宕机)

                                          remove

假设cacheB宕机,object4沿顺时针方向查找cache,会找到CacheC,影响的只有CacheB到CacheA之间的数据object4而已 ,其它数据均正常

2、服务节点新增(横向扩展服务)

                                           add

假设我们新增CacheD服务器,object2沿顺时针方向查找cache时会找到cacheD而不是原来的cacheC,影响的只有CacheB到CacheD之间的数据object2而已,其它一切正常(如果是数据库,我们只需要将CacheC上的数据(CacheB到CacheD之间的数据)按照hash算法迁移到CacheD即可)

六、虚节点

如果服务器节点相对较少且在hash环上分布不均匀,加入上图只有CacheA和CacheC两个服务器节点,那么只有object1在CacheA上其它全部映射到了CacheC上,从而产生了数据分布不平衡,这并不是我们想看到的,从而产生了虚节点

                                         virtual nodes

我们还是假设只有AC两个服务器节点

现在分别衍生出两个虚节点,这样是不是就相对平衡了

这样访问服务器节点就相当于访问虚拟节点了(插入数据的时候先找到虚拟节点,在映射到真实的节点,数据入库相对平衡了)

                         map

 

 

公众号主要记录各种源码、面试题、微服务技术栈,帮忙关注一波,非常感谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值