一致性hash概括

普通的hash是这样的,假设有3个节点,数据分别是1 2 3 4 5 6 7 8 9 10,那么用取模方法的话分布如下。

0:3 6 9

1:1 4 7 10

2:2 5 8

这种情况下如果增加一个节点的话则会变成。

0:4 8

1:1 5 9

2:2 6 10

3:3 7

移动的数据要很多,所以这里就要用上一致性hash。

对节点做hash计算,对值也做hash运算,最后把节点弄成环。把区间数值归右端点。给个其他博客的例子:

十条数据,算出各自的哈希值

0:192

1:196

2:200

3:204

4:208

5:212

6:216

7:220

8:224

9:228

 

有三个节点,算出各自的哈希值

node a: 203

node g: 209

node z: 228

 结果:

node a: 0,1,2

node g: 3,4

node z: 5,6,7,8,9

然后就是有一个问题,删除一个节点后,会把该节点存储的值全部交付给下一个节点,那么下一个节点的压力就会很大,所以引用了虚拟节点。通过把节点后面增加id等方式再做hash运算,这样就可以使环上分布更加均匀,每个节点分布的区域不再是连续的一块而是离散的。

猜你喜欢

转载自blog.csdn.net/qq_34262582/article/details/80326189