当我们用普通的哈希算法时,如图,下列有四个桶,那么就是哈希值%4得出在哪个桶里存放数据。
但是,当我们的桶装满时,就得增加桶的数量了,当桶数增加到5时,这时的算法就变成了哈希值%5,但是呢,之前是哈希值%4,现在哈希值%5了,假设之前53249%4=2了,现在53249%5=3了,那么就出问题了,之前桶里的所有数据就得重新分布了,得把所有数据拿出来再%5再放回去,那么开销就变得巨大了。
为了解决此问题,就提出了一致性哈希。一致性哈希相对于普通哈希来说,当增加一个节点的时候,只需要迁移部分的数据,大多数数据还是放在原来的地方里不用管的。
如图,我们可以把它看做一个环,这个环里总共有2^16个哈希值,假设有ABCD节点,每个节点负责一部分的哈希值。
如下图,当我们增加节点时,只需把B的一小部分的值迁移到E桶里去就行了,ACD桶里的值并不用去管他,那么,相比于普通哈希来说,一致性哈希的在增加节点时的开销就小了很多