【发布时间】:2011-07-03 03:53:27
【问题描述】:
您可能知道,在处理 DHT 时,一致的哈希是一个好主意。主要思想是在添加或删除新节点时不会受到太大影响。
来自原始论文:
添加或删除机器时 从缓存集合中,预期 必须移动的对象的比例 到一个新的缓存是最低要求 以保持整个负载平衡 缓存。
解决方案很好,但是存在密钥分配不良的现象。为了解决这个问题,原始节点的副本是随机分布的。该解决方案效果很好。如果你想确定的话,看看这个chart。
好的,看起来效果不错。但是,我一直在想一些没有人提及的事情。
添加(或删除)一个节点时会发生什么?好吧,每个键,“之前”放置的节点都需要重新散列。这看起来不错,因为这些键不会是“所有”键。但是,如果我们决定放置一些副本,比如 20 个,那么 20 个节点就会感到重新散列的痛苦。
更少的副本意味着更差的分布,但更多的副本意味着需要重新散列时更加痛苦。
您知道哪种解决方案适合这种情况?我错过了什么吗?
【问题讨论】:
-
为什么会出现这个问题?重新散列的密钥的总比例保持不变:大约是已经散列的总数的 1/N。它发生在 1 个节点还是 20 个节点上都无关紧要,因为散列是确定性的(并且可以即时计算)。
-
重新散列正是一致性散列应该解决的问题。哈希桶的数量是固定的。当节点数量发生变化时,只有桶到节点的映射发生变化。
标签: distributed hash distributed-caching dht consistent-hashing