龙空技术网

算法:加权轮询算法

java技术小码农 960

前言:

眼前各位老铁们对“java 轮询”都比较关注,同学们都想要知道一些“java 轮询”的相关文章。那么小编也在网络上网罗了一些关于“java 轮询””的相关内容,希望姐妹们能喜欢,我们快快来了解一下吧!

加权轮询算法是负载均衡算法中的一种。在负载均衡的场景下,后端服务器会根据其资源,如内存、cpu等,分配不同的权值。负载均衡器会根据权值分发请求。假设后端有3台服务器,其加权分别为A(5),B(3),C(2)。有10次请求到来时,可能的调度结果是AABACABCAB。

主要有两种常见的加权轮询算法。

1.循环迭代服务器列表,从中选出大于等于阈值的服务器。阈值初始为最大权值,每次迭代后衰减所有权值的最大公约数。以提到的情况为例。

权值的最大公约数为:1,即每次阈值衰减1

初始阈值为:5

迭代情况如下:

迭代情况

迭代5次,会选出的服务器序列为AAABABCABC。

2.方法1有一个缺陷,不够平滑,会出现访问集中的情况。为了避免这个问题,有了如下平滑加权随机算法。每个服务器有两个加权,一个是静态加权,另一个为动态加权。动态加权初始化为0。在每次迭代时,动态加权叠加上静态加权,然后根据这个值从服务其列表中选出最大的服务器。在本次迭代结束,被选出的服务器的动态加权要减去总的加权和。仍然以上面的情况为例。

加权和为:5+3+2=10

静态加权为:A 5,B 3,C 2

初始动态加权:A 0, B 3,C 2

迭代情况如下:

迭代情况

标签: #java 轮询