概述
key % NNkey % (N+1)key%(N-1)一致性hash算法的特点
karger- 均衡性: 均衡性主要是通过算法分配,集群中各节点应该要尽可能均衡。
- 单调性: 单调性主要是指当集群发生变化时,已经分配到老节点的key,尽可能的继续分配到之前的节点,防止大量数据迁移。
- 分散性: 分散性主要针对同一个key,当在不同的客户端操作时候,可能存在客户端获取到的缓存集群的数量不一致,从而导致将key映射到不同节点的问题,这会引起数据的不一致性。
- 负载: 负载主要针对一个缓存而言,同一缓存有可能会被用户映射到不同的key上,从而导致该缓存的状态不一致。
一致性hash算法详解
0 ~ 2^32-12^23所以就是两步:
- 将代表服务器的key做hash,得到服务器节点在hash环上的位置。
- 将缓存的key,用同样的方法计算出hash环上的位置,按顺时针方向,找到第一个大于等于hash环位置的服务器的ServerNodeKey,从而得到该key需要分配的服务器。
如图所示,key做hash之后得到一个整数然后顺时针在环上找第一个遇到的服务器:
如果只使用实际节点,一般都会出现hash出来的范围分配不均的情况,这时候就需要加上虚拟节点,如图: