在日常工作中,经常有这样的情况,我们需要做hash,散列开数据到不同的区或节点。目标要的结果是要均匀散列,避免某个节点积累大量的数据,出现倾斜情况。
比如目前有N台机器,过来的数据key,需要做散列key%N,分发到对应的节点上。
一致性哈希算法原理
为了解决hash倾斜难题,一致性算法是这样的,节点和节点形成一个环。比如
A->B->C->A,这样一个环。数字hash后落在环上,而不是落到某个node。比如落在a~b node之间,通过顺时针转,这个数字归b节点管。
但是如果节点很少,同样容易出现倾斜,负载不均衡问题。所以一致性哈希算法,引入了虚拟节点,在整个环上,均衡增加若干个节点。比如a1,a2,b1,b2,c1,c2,a1和a2都是属于A节点的。
通过让闭环上的节点增加,来平衡各个节点散列的值。