一致性哈希

  • 考虑几个工程实现的问题:
    • 虚拟节点如何存储?

很简单,用列表(切片)存储即可。

    • 虚拟节点 - 真实节点关系存储

map 即可。

    • 顺时针查询第一个虚拟节点如何实现

让虚拟节点列表保持有序,二分查找第一个比 hash(key) 的 index,list[index] 即可。

    • 虚拟节点哈希时会有很小的概率出现冲突,如何处理呢?

冲突时意味着这一个虚拟节点会对应多个真实节点,map 中 value 存储真实节点数组,查询 key 的目标节点时对 nodes 取模。

    • 如何生成虚拟节点

基于虚拟节点数量配置 replicas,循环 replicas 次依次追加 i 字节 进行哈希计算。