权重变量
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。
示例
1 | upstream test { |
current_weight | current_weight += effective_weight | total | 命中 | current_weight |
---|---|---|---|---|
[0,0,0] | [1,2,3] | 6 | 8003 | [1,2,-3] |
[1,2,-3] | [2,4,0] | 6 | 8002 | [2,-2,0] |
[2,-2,0] | [3,0,3] | 6 | 8003 | [3,0,-3] |
[3,0,-3] | [4,2,0] | 6 | 8001 | [-2,2,0] |
[-2,2,0] | [-1,4,3] | 6 | 8002 | [-1,-2,3] |
[-1,-2,3] | [0,0,6] | 6 | 8003 | [0,0,0] |
[0,0,0] | [1,2,3] | 6 | 8003 | [1,2,-3] |
- 本文链接: https://mikuac.com/nginx-lb/
- 版权声明: 本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。