平滑加权轮询Smooth weighted round robin

逐轮累加候选权重,选最高分者并扣除总权重,使份额交错分配。

核心约束
在稳定候选与权重下,用累计得分追踪每个节点尚应获得的服务份额。
适用问题
有不同承载权重的上游服务与请求分配。
边界与取舍
按请求数分配不等于按执行成本均衡;故障、重试和动态有效权重会改变结果。
A: +5B: +1C: +1A: 5−7=−2B: 1C: 1
固定权重 5:1:1、初始得分均为 0 的第一轮:选 A 后,从其得分扣除总权重 7。

时间与空间#

n 为候选上游节点数;针对 nginx 1.26.3 的逐节点选择。

时间复杂度
一次选择 O(n)O(n)
辅助空间
O(n)O(n),为各节点保存权重与运行状态

给可用节点累加 effective_weight,选择 current_weight 最大者并扣总权重。失败次数、连接上限、备用组和重试会影响候选集合;这不是按请求耗时自动达成的负载均衡保证。

工程中的应用#

1 个案例 · 附源码
基础原理参考资料

nginx 1.26.3 · ngx_http_upstream_get_peer权重累加、最大值选择和 total 扣减的完整循环。

7 个概念