【问题标题】:Consistent hashing as a way to scale writes一致的哈希作为扩展写入的一种方式
【发布时间】:2011-04-13 12:46:21
【问题描述】:

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

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

如果一个节点宕机了怎么办?理论上,它的密钥现在由其他节点拥有。在实践中,他们不会有数据。它丢失了,对吗?与添加/删除节点相同。

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

【问题讨论】:

    标签: hash redis consistent-hashing


    【解决方案1】:

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

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

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

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

    我的实现是基于让客户端从 64k 个存储桶中选择一个作为哈希,并拥有一个将该存储桶映射到节点的表。最初,所有都映射到节点 #1。

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

    【讨论】:

    • 这很聪明!感谢您的洞察力:-)
    • 差不多 10 年后,这仍然是相关的。每当任何数据存储提到一致性哈希时,他们都应该简单地解释在节点关闭/被添加的情况下数据是如何移动的。
    • 对于具有一致性哈希的数据复制,我们应该使用主从还是复制环中相邻节点的数据?
    猜你喜欢
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多