一致性hash算法主要为解决在动态变化的cache环境中
4个定义:
1、平衡性。尽量保证各key能够平衡分配到其他每个节点。
2、单调性。尽量保证当节点发生变化时,最少的节点数据的迁移变动。
3、分散性。分布式环境中,
4、负载性。
分布式集群中,对机器的添加删除是最基本的功能,当有节点添加删除时,尽量避免原有key值的数据迁移而无法找到。
环形hash空间
建立一个环境的hash空间,有2的32次方个桶空间,它们逻辑上形成一个环形。
把数据通过hash算法映射到环形上:
hash(key1) = hash1
hash(key2) = hash2
hash(key3) = hash3
将机器按某个特征(如ip,机器名等)同样映射到环上:
hash(host1) = hash1
hash(host2) = hash2
hash(host3) = hash3
如此,将机器和对象处于同一个哈希空间中,然后可按照顺时针或逆时针将key存储到对应的host机器上。
这样就保证了对节点的添加或删除操作能避免大量的数据迁移。
一致性哈希为保证平衡性,引入了虚拟节点的概念。
虚拟节点是实际节点在hash空间的复制品,避免节点过少导致出现失衡的情况。
参考链接:https://blog.youkuaiyun.com/cywosp/article/details/23397179/