权重变量

weight

配置的权重,即在配置文件或初始化时约定好的每个节点的权重

effective_weight

后端的有效权重,初始值为weight
在释放后端时,如果发现与后端的通信过程中发生了错误,则减小effective_weight
此后有新的请求过来时,在选取后端的过程中,再逐步增加effective_weight,最终又恢复到weight
这个配置作用主要是为了当后端发生错误时,降低其权重

current_weight

后端的当前权重,初始值为0
每次选取后端时,会遍历集群中所有后端,对于每个后端,让它的current_weight增加它的effective_weight,同时累加所有后端的effective_weight,保存为total
如果该后端的current_weight是最大的,就选定这个后端,然后把它的current_weight减去total
如果该后端没有被选定,那么current_weight不用减小

算法逻辑

轮询所有节点,计算当前状态下所有节点的effectiveWeight之和totalWeight
currentWeight = currentWeight + effectiveWeight,选出所有节点中currentWeight中最大的一个节点为命中节点
命中节点的currentWeight = currentWeight - totalWeight;

示例

upstream test {
    server localhost:8081 weight=1
    server localhost:8082 weight=2
    server localhost:8083 weight=3
}
current_weightcurrent_weight += effective_weighttotal命中current_weight
[0,0,0][1,2,3]68003[1,2,-3]
[1,2,-3][2,4,0]68002[2,-2,0]
[2,-2,0][3,0,3]68003[3,0,-3]
[3,0,-3][4,2,0]68001[-2,2,0]
[-2,2,0][-1,4,3]68002[-1,-2,3]
[-1,-2,3][0,0,6]68003[0,0,0]
[0,0,0][1,2,3]68003[1,2,-3]
最后修改:2020 年 09 月 16 日 03 : 45 PM
如果觉得我的文章对你有用,请随意赞赏