TarsCpp
TarsCpp copied to clipboard
一致性hash退化问题
https://github.com/TarsCloud/TarsCpp/blob/59a569b38eddc11ade43f0558e158007c8a29bc4/servant/libservant/EndpointManager.cpp#L1050-L1060
当一致性哈希取到的节点挂掉时,退化成了取模路由,打破了按一致性哈希路由的承诺。会导致数据节点重新迁移,和一致性哈希承诺的“节点失效时,需要迁移的区间是均匀的”相违背。
hash完的数值取模, 本身就是均衡的吧? 除非hash不均衡?
在采用一致性哈希这种方式进行路由选择,对业务方的接口承诺保持一致应该比较好吧? 即,因扩缩容导致节点新增或减少,应该还是按照一致性哈希的方式进行rehash来选择路由。
另外,一致性哈希映射的过程,是从键空间->虚拟节点空间->物理节点空间。通过均衡虚拟节点空间->物理节点空间的映射,要求在物理节点挂掉时,虚拟节点空间到物理节点空间的映射变化时均匀的,即挂掉的物理节点上承担的虚拟空间分布均分到其他物理节点上,按取模方式并不能保证这一点吧?