普通 hash 算法
在分布式系统中,普通哈希算法通常用于确定数据存储在哪个节点上。例如,如果我们有3个节点,我们可以通过计算hash(key) % 3
来确定一个给定的key
应该存储在哪个节点上。然而,这种方法存在一个显著的问题:当节点数量发生变化(增加或减少)时,会导致大量的缓存数据失效,因为大多数key
的哈希值将会映射到不同的节点上。
一致性 Hash 算法
一致性哈希算法被设计用来减少由于节点增减而导致的缓存失效问题。该算法通过将所有的节点和key
都映射到一个哈希环上,使得每个key
总是被分配给顺时针方向的第一个节点。这样,当节点数量变化时,只有少数key
会受到影响,从而减少了缓存失效的范围。
然而,一致性哈希算法仍然面临一些挑战,例如,当某些key
成为热点时,对应的节点可能会承受过高的负载。为了解决这个问题,有界一致性哈希算法被提了出来。
有界一致性 Hash 算法
有界一致性哈希算法基于 Google 论文《有界一致性哈希算法》(Consistent Hashing with Bounded Loads),可以用于解决一致性哈希环上的缓存热点问题。
算法原理
有界一致性哈希算法的核心思想是在一致性哈希的基础上,根据节点的当前负载情况,为每个节点设置一个最大负载限制。当在一致性哈希环上查找节点时