一致性哈希算法

一致性哈希算法

Content #

一致哈希算法也用了取模运算,但与哈希算法不同的是,哈希算法是对节点的数量进行取模运算,而一致哈希算法是对 2^32 进行取模运算。你可以想象下,一致哈希算法,将整个哈希值空间组织成一个虚拟的圆环,也就是哈希环:

可以看到,哈希环的空间是按顺时针方向组织的,圆环的正上方的点代表 0,0 点右侧的第一个点代表 1,以此类推,2、3、4、5、6……直到 2^32-1,也就是说 0 点左侧的第一个点代表 2^32-1。

在一致哈希中,你可以通过执行哈希算法(为了演示方便,假设哈希算法函数为“c-hash()”),将节点映射到哈希环上,比如选择节点的主机名作为参数执行 c-hash(),那么每个节点就能确定其在哈希环上的位置了:

当需要对指定 key 的值进行读写的时候,你可以通过下面 2 步进行寻址:

  1. 首先,将 key 作为参数执行 c-hash() 计算哈希值,并确定此 key 在环上的位置;
  2. 然后,从这个位置沿着哈希环顺时针“行走”,遇到的第一节点就是 key 对应的节点。

假设 key-01、key-02、key-03 三个 key,经过哈希算法 c-hash() 计算后,在哈希环上的位置就像图 6 的样子:

那么根据一致哈希算法,key-01 将寻址到节点 A,key-02 将寻址到节点 B, key-03 将寻址到节点 C。

Viewpoints #

From #

10 | 一致哈希算法:如何分群,突破集群的“领导者”限制?