目录
匹配优先级和权重的比例问题
问题来源
在一哥们面试时,面试官问了一个有意思的问题,即upstream的权重比1:5和2:10的区别?
这个问题其实并不难,但很多学习者都不会去注意这个问题,很多培训机构也不会去讲这个区别,那么到底有什么区别呢?看到这个问题的你是否知道呢?不急,看完本篇博文,保你会。
面试官问道这个问题,其实已经很刁钻的了。相信看完本篇博文,面试官问到你时,你肯定可以狠狠的扇HR一个耳光。开始正文
答案
答案:在只有两台后端服务器的时候:1:5和2:10是没有区别的,当有超过两台后端服务器的时候,就存在区别。A:B=1:5(或2:10)的时候,返回顺序是BBBBAB,A:B:C=4:3:2的时候,返回顺序为AABABCABC,当A:B:C=2:3:4的时候,返回顺序为CBCABCABC。
找规矩,找的懂的有肉吃,找不懂的没肉吃。PS:后面讲解规矩
比如有3台,A1 B2 C5 和A2 B2 C10的A和C就绝对不一样,虽然每个循环里,A和C的调度比例次数都是1比5,但是调度顺序是不一样的。
规矩总结
相信看完上图你已经知道了排序方法
总结:先找最大公约数,就是先约分,权重大的先排,排完减一,再比对,相同,从左到右排。
官方手册:
这是它的算法(LVS官方手册里给的)。其中gcd(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;
}