一致性哈希(consistent hash)

一致性哈希是将整个哈希值空间组织成一个虚拟的圆环

普通的hash算法在分布式应用中的不足:

比如,在分布式的存储系统中,要将数据存储到具体的节点上,如果我们采用普通的hash算法进行路由,将数据映射到具体的节点上,如key%N,key是数据的key,N是机器节点数,如果有一个机器加入或退出这个集群,则所有的数据映射都无效了。如果是持久化存储则要做数据迁移,如果是分布式缓存,则其他缓存就失效了。

解决方案:一致性哈希

按照常用的hash算法来将对应的key哈希到一个具有2^32次方个节点的空间中,即0 ~ (2^32)-1的数字空间中。现在我们可以将这些数字头尾相连,想象成一个闭合的环形。

1 映射服务器节点

将各个服务器使用Hash进行一个哈希,具体可以选择服务器的ip作为关键字进行哈希,这样每台机器就能确定其在哈希环上的位置。假设我们将四台服务器使用ip地址哈希后在环空间的位置如下

Untitled

2 映射数据

现在我们将objectA、objectB、objectC、objectD四个对象通过特定的Hash函数计算出对应的key值,然后散列到Hash环上,然后从数据所在位置沿环顺时针“行走”,第一台遇到的服务器就是其应该定位到的服务器。

Untitled

3 服务器的删除/宕机