小编典典

一致的散列作为扩展写入的一种方式

redis

我试图弄清楚自己是否走对了。我正在构建(实时)统计/分析服务,并且使用redis存储一些集合和哈希。

现在,让我们假设我取得了一些成功,并且需要扩展。哈希环技术看起来不错,但是我有一个印象,它仅适用于缓存方案。

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

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


阅读 271

收藏
2020-06-20

共1个答案

小编典典

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

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

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

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

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

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

2020-06-20