1

我已经阅读了几篇解释一致性哈希背后的理论的文章。但是它们中的大多数都没有提供有关如何处理添加/删除节点的详细信息。我知道如果它用于像memcached这样的缓存层,我们可能不需要做任何事情,但如果它用于分布式存储,将一些数据移动到正确的节点是非常关键的。当我们需要添加/删除一个节点时到底发生了什么?

其他几个问题是:

  1. 处理不同大小的服务器的最佳方法是什么
  2. 如何一次添加和删除多台机器
  3. 如何应对复制和容错

希望有人能给我指出一篇解释这些的文章。

4

2 回答 2

1

对于您最初的问题,您只需要其他方式将对象从一个节点切换到另一个节点。这可能更多地是您添加和删除节点的一​​个因素,而不是一致性哈希的工作方式。

解决此问题的一种假设方法是在重新平衡时考虑存在一个中间状态,其中有两个一致的哈希值,一个用于旧拓扑,一个用于新拓扑。取它们之间的差异,每个服务器应该能够知道它需要做什么来符合新的拓扑。例如,每个服务器使用旧的一致哈希从旧服务器请求它没有的对象。一旦我们达到某种“完成”状态,我们就可以删除旧副本(如有必要)。

  1. 一致的散列允许您通过调整副本的数量来为服务器赋予权重。这可能是一致性散列优于 HRW 的最大优势。

  2. 这可能与仅添加一台机器相同。

  3. HRW 有一个有用的想法,即一致性哈希不像通常解释的那样具有获取后续节点的功能。也就是说,它不仅可以为您提供对象的“节点”,还可以为您提供“对象的节点的有序列表”。如果您决定要为每个对象创建 3 个副本,您可以从列表中选择前三个,而不是只选择第一个。

您可以在一致的散列中获得相同的效果,尽管它不太直观:只需继续围绕“圆圈”,直到您有 N 个唯一节点。

于 2015-01-15T05:42:55.827 回答
0

但是它们中的大多数都没有提供有关如何处理添加/删除节点的详细信息。

你读过Dynamo:亚马逊的高可用键值存储吗?这在第 4 节中有详细介绍。

处理不同大小的服务器的最佳方法是什么

没有什么能阻止您在类似 Dynamo 或类似 Cassandra 的系统中的不同服务器上放置不同数量的数据。它会增加大量的复杂性,尤其是在故障恢复的情况下,但不会以任何方式破坏协议的基本原理。

于 2014-04-14T00:08:25.313 回答