一致性哈希和取模哈希的问题

来源:互联网 发布:岳阳蔬菜网络销售 编辑:程序博客网 时间:2024/05/21 00:17

今天在mycat那本书上看到一段话,很不是了解

当使用一致性Hash进行路由分片时,假设存在节点宕机/新增节点这种情况,那么相对于使用其他分片算法(如mod),就能够尽
可能小的改变已存在key映射关系,尽可能的减少数据迁移操作。当然一致性hash也有一个明显的不足,假设当前存在三个节点
A,B,C,且是使用一致性hash进行分片,如果你想对当前的B节点进行扩容,扩容后节点为A,B,C,D,那么扩容完成后数据分布就
会变得不均匀。A,C节点的数据量是大于B,D节点的。
据测试,分布最均匀的是mod,一致性哈希只是大致均匀。数据迁移也是,迁移量最小的做法是mod,每次扩容后节点数都是2
的N次方,这样的迁移量最小。但是mod需要对每个节点都进行迁移,这也是mod的不足之处。总之,还得酌情使用,根据业务

选择最适合自己系统的方案。

问题1

为什么扩容后A,C节点的数据量是大于B,D节点的。 

我觉得扩容后只会把a c节点的一部分数据迁移到b d 节点,只会少不会多啊。


问题2

为什么分布最均匀的是mod  

均不均匀不是取决于哈希算法和哈希因子吗,


问题3 为什么迁移量最小的做法是mod


回复芋智波佐助:问题1,一致性哈希是一个环,这里估计作者是考虑B节点上面的虚拟节点是热点,把B节点的某些虚拟节点迁移到了D,这样从虚拟节点看,AC的虚拟节点个数大于BD。问题2,只要哈希算法够好,分布最好的肯定是哈希算法,一致性哈希很容易出现热节点(因为不同节点上的虚拟节点连续)问题3,:从数据量上看,2的n次方迁移,数据量期望最小,但是迁移数据的节点多。一致性哈希需要迁移的数据节点少,但是数据量一般会比较大(迁移虚拟节点)

原创粉丝点击