一致性哈希的学习和理解

       学习算法时候突然想到这个问题,先留个大致印象好了。

       看了几篇博文,仍然不知所云,而这篇:

      http://www.jiacheo.org/blog/174

      通过比较普通集群、哈希集群与一致性哈希集群,得出了一致性哈希的优点。进而阐述一致性哈希为什么要具备四个条件:

     1、平衡性

     2、单调性

     3、负载

     4、分散性

        简单说,传统的集群方式是通过普通映射(例如1-->1,2-->2)或者哈希映射(例如1 mod 3 = 1,2 mod 3 = 2,N mod M),但是缺点在于,如果节点挂掉,需要进行大量的数据迁移。普通映射的迁移代价类似数组中插入或删除元素,需要整体迁移;哈希映射变动后需要重新选择M,并对存在的节点数据进行迁移。

        一致性哈希的优点在于,先将节点映射到2^32这样一个超级大环中,然后将需要cache的对象计算hashCode() mod 2^32也映射到这个环上,接着按照事先定好的顺序(如顺时针或逆时针)将对象一一存储到节点上,创造性地提出了将存储节点与存储对象放到同一个环上的思想。这样做的好处在于,当其中某个节点挂掉后,受影响的仅仅是映射到本节点的这些对象,我们只需要将这些对象重新映射到下一个节点上。增加节点的时候同理。

        在映射量不是很大的时候,可能造成不平衡,这里可以引入虚拟节点来对对象进行二次映射,即Object--->virtual node--->real node

        有空再附上自己理解的图片。

那么问题来了:

       1、如何解决冲突?

       2、如果节点的哈希和对象的哈希相等时候怎么处理?

       3、如何保证数据迁移的可靠性?

参考资料:

每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)   http://blog.csdn.net/cywosp/article/details/23397179

一致性哈希算法(Consistent Hashing)http://blog.csdn.net/x15594/article/details/6270242


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值