一致性 Hash 算法
2022年9月29日大约 2 分钟
一致性 Hash 算法
hash
值是非负的整数,值的范围构成一个圆环,值为 2^32- 集群节点按照一定规则求
hash
值,然后放到环中 - 对数据
key
求hash
值,然后放到环中,再按照顺时针方向找到最近的节点,保存到上面。
给定一个圆环,值为2^32
假设现在有 3 个节点:A、B、C
通过计算求得hash
值,放到环中,有几种情况发生:
- 三个分别在不同的地方,
- 三个可能紧挨着
- 或者其中几个紧挨着
都在不同的地方还好,如果此时有数据需要保存,不同的地方,则能均匀的去存储数据,如果紧挨着,就会有某一个节点不会去存储数据,某一个节点会压力很大。
一致性Hash
算法给出的解决办法就是,它会给你自动创建几个虚拟节点:a、b、c
- 虚拟节点 a 对应真实节点 A
- 虚拟节点 b 对应真实节点 B
- 虚拟节点 c 对应真实节点 C
再次放入环中,就可以避免某一个节点压力过大的情况。
新增节点
通过计算hash
值放入环中,对于其逆时针方向的数据则会受到影响,顺时针方向的还是会存储到顺时针方向的下一个节点上;逆时针方向上的数据则需要从原来存储的节点上迁移出数据到新的节点上,而不会去影响别的节点或者数据
删除节点
影响的还是那一个方向上的数据,仅仅需要将移除的节点的上的数据迁移到下一个顺时针方向的节点即可。
Loading...