我想弄清楚我是否走在正确的轨道上。我正在构建一个(实时)统计/分析服务,我使用redis来存储一些集合和哈希值。
现在让我们假设我取得了一些成功,我需要扩展。哈希环技术看起来很不错,但我的印象是它只适用于缓存场景。
如果节点发生故障怎么办?理论上,它的密钥现在由其他节点拥有。实际上,他们没有数据。它丢了,对吗?与添加/删除节点相同。
我错过了一些基本的东西吗?这可能是一个穷人的集群吗?
答案 0 :(得分:6)
在群集中使用多个节点有两个原因:
这两者根本不同,但您可以实现两者 - 使用一致性散列来指向具有标准主/从设置而不是单个节点的一组节点。
如果群集是您的主要数据存储而不是缓存,则需要使用不同的重新分发策略,包括复制数据。
我的实现基于让客户端选择64k桶中的一个用于散列并具有将该桶映射到节点的表。最初,所有映射到节点#1。
当节点#1变得太大时,其从属设备成为主节点#2,并且更新该表以将节点#1密钥的一半映射到节点#2。此时,所有读取和写入都将与新映射一起使用,您只需清理现在位于错误节点上的键。根据性能要求,您可以一次检查所有密钥,或者在到期系统时检查随机选择的密钥。