负载均衡一致性Hash算法

一致性Hash算法通过一个叫作一致性Hash环的数据结构实现Key到服务器的Hash映射。

具体算法过程为:

    构造一个长度为0~2^32的整数环,根据节点名称的Hash值(其分布范围同样为0~2^32)将缓存服务器节点放置在这个Hash环上。根据需要缓存的数据的Key值计算得到其Hash值(其分布范围同样为0~2^32),然后在Hash环上顺时针查找距离这个Key的Hash值最近的服务器节点,完成Key到服务器的Hash映射查找。

新加入的节点只影响整个环中的一小段。

具体应用中,长度为2^32的一致性Hash环通常使用二叉查找树实现,Hash查找过程实际上是在二叉查找树中查找不小于查找数的最小数值。当然这个二叉树最右边叶子节点和最左边的叶子节点相连接,构成环。

缺点:加入新节点的负载压力比其他节点压力小。

解决方案:增加一个虚拟层来解决。将每台物理服务器虚拟为一组虚拟服务器,将虚拟服务器的Hash值放置在Hash环上,Key在环上先找到虚拟服务器节点,再得到物理服务器的信息。

效果:新加入物理服务器节点时,是将一组虚拟节点加入环中,如果虚拟节点的数目足够多,这组虚拟节点将会影响同样多数目的已经在环上存在的虚拟节点。新加入一台服务器将会较为均匀地影响原来集群中已经存在的所有服务器,即分摊原有缓存服务器集群中所有服务器的一小部分负载。

实践:虚拟节点太多影响性能,太少会导致负载不均衡。一台物理服务器虚拟为虚拟服务器节点的经验值为150。

参考资料:

李智慧 大型网站技术架构:核心原理与案例分析

你可能感兴趣的:(负载均衡一致性Hash算法)