一致性哈希算法(consistent hashing)的一种实现

来源:互联网 发布:sketchup2017 pro mac 编辑:程序博客网 时间:2024/04/27 16:29

首先需要了解一致性哈希算法(consistent hashing):http://blog.csdn.net/cywosp/article/details/23397179/。

下面介绍支持2^32次方空间的一致性哈希算法的一种实现:

1、建立虚拟节点,最大支持2^16次方个虚拟节点:关键在于既要体现出每个实际节点的权重,还要为后续增加的节点预留虚拟节点。

2、为了满足1条件和虚拟节点分布的随机性和均衡性,可采用MD5算法:

对实际节点进行编号(IP+序列号)”192.168.10.11@1“、”192.168.10.11@2“、”192.168.10.11@3“,再进行MD5,由于MD5值是一个16位16进制数,

每四位16进制数(低四位、中低四位、中高四位、高四位)可组成一个32bit的key,所以一个编号可创建4个虚拟节点。

3、权重实现:权重越大,每个实际节点编号越多,最大序列号变大。

4、预留虚拟节点:为后续节点假设权重,假设最大支持32台服务器,现在有10台在线,每台权重为1,那么每台建设虚拟节点个数为(2^16/4)*(1/32),

这个值也是这个节点的最大序列号值;采用MD5算法,也可以保证现在这10台的均衡性。

5、将虚拟节点信息(真实节点信息和虚拟节点key)放入红黑树,便于查找;可首先建好2^32次方虚拟节点,空的虚拟节点可采用链表存储,为新节点准备。

6、当某一对象需要调度到实际节点时,对该对象ID进行MD5算法,并只取低四位作为key,通过红黑树,查找到与它最接近但不大于它的虚拟节点信息,从中获取实际节点。

7、该实现可保证:

a、各个节点的均衡性。

b、当删除一节点时,剩下节点的全部原有数据依旧都能够映射到原节点上,并且剩下节点分担了删除节点的原有数据。

c、当添加一个节点时,映射到老节点的数据都是原有数据,但老节点的部分原有数据被新节点分担,并且老节点和新节点依旧保持均衡性。

0 0