vlambda博客
学习文章列表

算法题:一致性hash算法是什么?

数据如果分布在多个机器,如何分配,如果使用取余的算法,那么当增加减少机器的时候,就需要迁移基本上所有的数据,动静太大。一致性hash能够部分解决这个问题。

一致性hash是将数据分布在2的32次方减一个槽位中。当某条数据过来的时候,就使用hash算法,映射到这些槽位中,然后要使用的机器对应某一个槽位,可以把这些槽位想象成一个圆环,某个key顺序的向后寻找,找到某个机器,对应的数据就在这台机器上。

但是如果增减机器数量的时候,可能会出现数据分配不均匀的情况,这时候还有一种方案是可以使用虚拟节点,先把槽位对应到虚拟节点上,然后再对应到对应的机器。