当负载均衡后端服务器数量发生变化时,可能会导致本该发给RS1的数据包发送到RS2。此时有两种解决方案:1)采用session,记录建立的连接选择的后端服务器。2)采用一致性哈希,一致性哈希可以保证当后端服务器数量发生变化时,分配给连接已经建立的数据包的后端不会发生变化。

经典一致性哈希算法

经典一致性哈希算法将哈希空间看成一个环,每条流被哈希成环上的一个单点。此时将RS也哈希到环上,这些RS对应的点将哈希环分拆成几个部分,通过某种规则将各个部分分配给不同的点,比如逆时针碰到的第一个RS点,就是被分配到的RS。因此从这个角度来看,经典一致性哈希的均衡性在于RS的哈希点分布的均衡性,如果RS哈希点分布均衡,那么一致性哈希一定是即均衡且当后端RS数量变化时,受影响的session更少。通常的做法是将一个RS哈希多次到环上。这样能保证RS能更均衡的散布在环上。

Google Maglev一致性哈希

其做法是将均匀性至于minimal disrupt之上,根据前几篇blog可以看出,Google Maglev的算法是最均衡的,因为他能完全均分hash array(也就是哈希空间),但是通过permutation表,尽量降低哈希的碰撞率,在碰撞率小的时候,能够保证位置不会被多个表项所抢占。