一致散列是一种缩放写入的方法

时间:2011-04-12 21:26:41

标签: hash redis consistent-hashing

我想弄清楚我是否走在正确的轨道上。我正在构建一个(实时)统计/分析服务,我使用redis来存储一些集合和哈希值。

现在让我们假设我取得了一些成功,我需要扩展。哈希环技术看起来很不错,但我的印象是它只适用于缓存场景。

如果节点发生故障怎么办?理论上,它的密钥现在由其他节点拥有。实际上,他们没有数据。它丢了,对吗?与添加/删除节点相同。

我错过了一些基本的东西吗?这可能是一个穷人的集群吗?

1 个答案:

答案 0 :(得分:6)

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

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

这两者根本不同,但您可以实现两者 - 使用一致性散列来指向具有标准主/从设置而不是单个节点的一组节点。

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

我的实现基于让客户端选择64k桶中的一个用于散列并具有将该桶映射到节点的表。最初,所有映射到节点#1。

当节点#1变得太大时,其从属设备成为主节点#2,并且更新该表以将节点#1密钥的一半映射到节点#2。此时,所有读取和写入都将与新映射一起使用,您只需清理现在位于错误节点上的键。根据性能要求,您可以一次检查所有密钥,或者在到期系统时检查随机选择的密钥。