一致性hash算法
来源:互联网 发布:淘宝订单删除影响吗 编辑:程序博客网 时间:2024/05/18 06:03
1.判断hash算法好坏的四个定义:
⑴平衡性:哈希结果分布到所有缓存中,使缓存空间得到充分利用。
⑵单调性:如果已经有一些内容通过hash分布到缓冲中,当系统加入新的缓冲区,可以保证原有已分配内容映射到新的缓冲中去,而不是旧的缓冲集合的其他缓冲区。
⑶分散性:不同的终端看到的缓冲区范围不一样,倒是哈希结果不一致,相同的结果被不同的终端映射到不同的缓冲区,好的哈希算法应降低分散性。
⑷负载:同一个缓冲区可能被不同的终端映射为不同的内容,这种情况也是应该避免的。
2.
⑴环形hash空间
按照常用的hash算法来将对应的key哈希到一个具有2^32次方个桶的空间中,即0~(2^32)-1的数字空间中。现在我们可以将这些数字头尾相连,想象成一个闭合的环形。如下图
⑵把数据通过通过一定的hash算法映射到环上
现在我们将object1、object2、object3、object4四个对象通过特定的Hash函数计算出对应的key值,然后散列到Hash环上。如下图:
通过按顺时针迁移的规则,那么object2被迁移到了NODE4中,其它对象还保持这原有的存储位置。通过对节点的添加和删除的分析,一致性哈希算法在保持了单调性的同时,还是数据的迁移达到了最小,这样的算法对分布式集群来说是非常合适的,避免了大量数据迁移,减小了服务器的的压力。
⑸平衡性
假如一台服务器坏了,它周围的节点会归到他两侧的NODE上,那么它两侧的负荷就会大大增加。为了将它的节点尽可能平均分配到剩下的服务器上,在一致性hash算法中,引入了虚拟节点来尽可能保证平衡性 。虚拟节点是实际节点(机器)在空间中的复制品,一个实际节点对应若干虚拟节点,这个对应个数也称为“复制个数",虚拟节点在hash空间中以hash值排列。
根据上图可知对象的映射关系:object1->NODE1-1,object2->NODE1-2,object3->NODE3-2,object4->NODE3-1。
另外这篇文章也是讲平衡性的:
http://www.cnblogs.com/tujia/p/5416614.html
- Hash魔法:一致性 hash 算法
- Hash魔法:一致性 hash 算法
- Hash和一致性Hash算法
- Hash魔法:一致性 hash 算法
- 一致性Hash算法
- 一致性hash算法详解
- 一致性Hash算法(转)
- 一致性Hash算法(转)
- 一致性Hash算法
- 一致性Hash算法(转)
- 一致性Hash算法(转)
- Ketama一致性Hash算法
- 一致性Hash算法
- 一致性Hash算法
- 一致性Hash算法背景
- 一致性hash算法
- 一致性hash算法2
- 一致性Hash算法
- git的使用
- IPFS Study
- Ceph Study
- 混合背包
- vscode study
- 一致性hash算法
- 线性代数
- 程序员必读书单 1.0
- d3.js
- OGDF Study
- nginx study
- webpack入门学习(—)
- Jira
- hadoop