LVS的加权轮询算法

http://kb.linuxvirtualserver.org/wiki/Weighted_Round-Robin_Scheduling

加权轮循调度是为了更好地处理不同处理能力的服务器。每个服务器都可以被分配一个权重,一个表示处理能力的整数值。权值较高的服务器比权值较低的服务器首先接收到新连接,权值较高的服务器比权值较低的服务器获得更多连接,权值相等的服务器获得相同的连接。加权轮循调度的伪代码如下:

复制代码
Supposing that there is a server set S = {S0, S1, ..., Sn-1};
W(Si) indicates the weight of Si;
i indicates the server selected last time, and i is initialized with -1;
cw is the current weight in scheduling, and cw is initialized with zero; 
max(S) is the maximum weight of all the servers in S;
gcd(S) is the greatest common divisor of all server weights in S;

while (true) {
    i = (i + 1) mod n;
    if (i == 0) {
        cw = cw - gcd(S); 
        if (cw <= 0) {
            cw = max(S);
            if (cw == 0)
            return NULL;
        }
    } 
    if (W(Si) >= cw) 
        return Si;
}

举例:

A B C这3个服务器的权重分别是4 3 2

一开始等于cw=0,最大公约数是1,cw减去最大公约数后是-1,cw被置为服务器中最大的权重4

第一轮cw>=4的只有

A

第二轮cw减去最大公约数后是3,cw>=3的有

A B

第三轮cw减去最大公约数后是2,cw>=2的有

A B C

第四轮cw减去最大公约数后是1,cw>=1的有

A B C

cw减去最大公约数后是0,重新开始,cw被置为服务器中最大的权重4

cw相当于一个标杆,通过不断的降低标杆让权重小的服务器能被调度

相关推荐
find1star9 小时前
LeetCode 141:环形链表
java·算法·leetcode·链表
迅翼SwiftWing9 小时前
编队系列(总)|固定翼编队如何实现稳定飞行?通信架构、协同算法与工程约束深度解析
算法·架构
LB21129 小时前
力扣160 21 86
算法·leetcode·职场和发展
小智老师PMP10 小时前
2026深度解析|PMP第八版与NPDP核心侧重点本质区别(管理类证书怎么选)
开发语言·分布式·算法·职场和发展·产品经理
HugoStudio_SWAN10 小时前
洛谷 B4450 / B3867 / B3923 智慧购物、储蓄与做题——从程序到生活
c++·学习·程序人生·算法·生活
a1879272183110 小时前
【算法】动态规划第二篇:双序列 DP 三课——继承、计步与断链
算法·leetcode·动态规划·dp·回溯·暴力·算法讲解
江畔柳前堤11 小时前
前台·中台·后台:2026年AI原生时代的架构全景图
开发语言·人工智能·算法·机器学习·架构·scala·ai-native
文心快码BaiduComate12 小时前
2026 OPC x AI Coding 趋势案例交流会圆满落幕:一个人就一支研发团队
算法
ACM-moran12 小时前
条件显化(二分单峰函数+构造数列)
算法·推公式·整数三分
闻缺陷则喜何志丹12 小时前
【栈 运算系统】P3719 [AHOI2017初中组] rexp|普及+
c++·算法··洛谷·运算系统