2023-09-01
一致性哈希
- 考虑几个工程实现的问题:
- 虚拟节点如何存储?
很简单,用列表(切片)存储即可。
- 虚拟节点 - 真实节点关系存储
map 即可。
- 顺时针查询第一个虚拟节点如何实现
让虚拟节点列表保持有序,二分查找第一个比 hash(key) 的 index,list[index] 即可。
- 虚拟节点哈希时会有很小的概率出现冲突,如何处理呢?
冲突时意味着这一个虚拟节点会对应多个真实节点,map 中 value 存储真实节点数组,查询 key 的目标节点时对 nodes 取模。
- 如何生成虚拟节点
基于虚拟节点数量配置 replicas,循环 replicas 次依次追加 i 字节 进行哈希计算。