一种可扩展写入的方式:一致性哈希

6
我正在努力确定自己是否正确。我正在构建一个(实时)统计/分析服务,并使用redis存储一些集合和哈希表。
现在假设我取得了一些成功并且需要扩展。哈希环技术看起来很不错,但我有一种印象它只适用于缓存场景。
如果一个节点挂掉了怎么办?理论上,它的键现在由其他节点拥有。实际上,他们没有数据。它已经丢失了,对吗?添加/删除节点也是同样的情况。
我是否忽略了一些基本问题?这可以成为穷人的集群吗?
1个回答

9

使用群集中的多个节点有两个原因:

  • 分片以限制存储在每个节点上的数据量
  • 重复以减少读取负载并允许删除节点而不会丢失数据。

这两者本质上是不同的,但您可以同时实现-使用一致性哈希将指向具有标准主/从设置而不是单个节点的节点集。

如果群集是您的主要数据存储而不是缓存,则需要不同的重新分配策略,包括复制数据。

我的实现基于客户端选择64k个哈希桶之一,并具有将该桶映射到节点的表。最初,所有桶都映射到节点#1。

当节点#1变得太大时,其从节点成为主节点#2,并更新表以将节点#1键的一半映射到节点#2。此时,所有读取和写入将使用新映射工作,您只需要清理现在位于错误节点上的键。根据性能要求,您可以一次检查所有键,也可以像过期系统那样随机选择一些键进行检查。


将近10年过去了,这仍然是相关的。每当任何数据存储提到一致性哈希时,他们都应该用简单的语言解释在节点宕机/添加的情况下数据如何移动。 - Gopal
对于具有一致性哈希的数据复制,我们应该选择主从复制还是将数据复制到环中相邻的节点? - Mehul Parmar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接