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