在集群中使用多个节点有两个原因:
- 分片以限制每个节点上存储的数据量
- 复制可减少读取负载并允许删除节点而不会丢失数据。
两者在本质上是不同的,但是您可以实现两者-使用一致的散列来指向具有标准主/从设置的一组节点,而不是单个节点。
如果群集是您的主要数据存储而不是缓存,则您将需要其他重新分配策略,其中包括复制数据。
我的实现基于让客户端从64k个存储桶中选择一个进行哈希处理,并具有将该存储桶映射到节点的表。最初,所有映射到节点#1。
当节点#1变得太大时,其从节点将成为主节点#2,并且该表将更新,以将节点#1密钥的一半映射到节点#2。此时,所有读取和写入将与新映射一起使用,您只需要清理错误节点上的键即可。根据性能要求,您可以一次检查所有按键,也可以像到期系统一样检查随机选择的按键。



