一致性hash算法的实现

  1. 基础实现

将节点A,B,C利用类似MD5的hash算法得到一个hash值,并将它们排序按照顺时针方式组成一个环;例如node A =208 ,node B = 230,node c = 286;当object对象存入缓存时,将自身根据同样的hash算法得到一个key值,例如object A = 322,则此数据将缓存到node A, object B = 235,则缓存到node C ,以此判定; 此种方式在添加,删除节点时,只会影响相近的两个节点数据;但是此种方式在节点服务器偏少的时候,会出现缓存不均衡的情况,造成node A,node B,node C分配缓存不均衡,因此诞生了另外一种虚拟节点的hash实现。

(2)虚拟节点的实现

当节点只存在A,B,C三个节点时,物理机偏少,因此在创建服务时,每个物理机创建4个虚拟节点,因此虚拟节点存在12个,虚拟节点的key生成一般是基于节点IP地址加数字后缀的方式,例如Hash(“192.168.1.99#1”);

Hash(“192.168.1.99#2”);

Hash(“192.168.1.100#1”);

Hash(“192.168.1.100#2”);

以及方法来生成虚拟节点key,并使用类似map的方式来记录实际物理机和虚拟机的key映射关系。

fe37b0861ccb21ff41f84ae10fee75a03b4.jpg

38959e9ebe510a7e5b844fd52dfb4c77efb.jpg

转载于:https://my.oschina.net/ttscjr/blog/1941482

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值