一致性哈希
一致性哈希问题是为了解决请求负载均衡的
负载均衡算法
在多节点分布式系统中,如何有效分配客户端请求以实现负载均衡
轮询算法
加权轮询算法
哈希算法
- 上面两中对于数据分片就不适用了,比如缓存的 key 分布在不同的节点上,通过哈希函数和取模运算可以将请求映射到特定节点
一致性哈希
一致性哈希算法
普通哈希算法存在问题,当节点数增加的时候,需要重新计算映射关系,也要迁移数据
比如一开始有 3 台机器,模 3,之后变成 4 台,需要做数据迁移并且重新计算映射关系
一致性哈希也是用了取模,但是与普通哈希不一样,普通哈希对节点数进行取模,一致性哈希是对 2^32
进行取模
一致性哈希是将【存储节点】和【数据】都映射到一个首尾相连的哈希环上,如果增加或移除一个节点,仅影响该节点在哈希环上顺时针相邻的后继结点(因为他的寻址规则是把数据哈希之后顺时针找到第一个存储节点),其他数据不会收到影响
但是一致性哈希算法不能均匀分布节点,会出现大量请求都集中在一个节点的情况,这种情况下进行容灾或备份的时候,容易出现雪崩
为了解决一致性哈希不能均匀分布节点的问题,需要引入虚拟节点,对一个真实节点做多个副本,再将虚拟节点映射到实际节点,有两层映射关系
一致性哈希
http://showyoubug.cn/2024/08/16/一致性哈希/