一致性哈希

一致性哈希问题是为了解决请求负载均衡的

负载均衡算法

在多节点分布式系统中,如何有效分配客户端请求以实现负载均衡

  1. 轮询算法

  2. 加权轮询算法

  3. 哈希算法

    • 上面两中对于数据分片就不适用了,比如缓存的 key 分布在不同的节点上,通过哈希函数和取模运算可以将请求映射到特定节点
  4. 一致性哈希

一致性哈希算法

普通哈希算法存在问题,当节点数增加的时候,需要重新计算映射关系,也要迁移数据

比如一开始有 3 台机器,模 3,之后变成 4 台,需要做数据迁移并且重新计算映射关系

一致性哈希也是用了取模,但是与普通哈希不一样,普通哈希对节点数进行取模,一致性哈希是对 2^32 进行取模

一致性哈希是将【存储节点】和【数据】都映射到一个首尾相连的哈希环上,如果增加或移除一个节点,仅影响该节点在哈希环上顺时针相邻的后继结点(因为他的寻址规则是把数据哈希之后顺时针找到第一个存储节点),其他数据不会收到影响

但是一致性哈希算法不能均匀分布节点,会出现大量请求都集中在一个节点的情况,这种情况下进行容灾或备份的时候,容易出现雪崩

为了解决一致性哈希不能均匀分布节点的问题,需要引入虚拟节点,对一个真实节点做多个副本,再将虚拟节点映射到实际节点,有两层映射关系


一致性哈希
http://showyoubug.cn/2024/08/16/一致性哈希/
作者
Dong Su
发布于
2024年8月16日
许可协议