加权轮询是静态权重+请求计数的分发机制,不感知实时负载;其大并发表现取决于权重合理性、后端稳定性及健康检查、least_conn等配套措施。

Nginx 的加权轮询(Weighted Round Robin)算法在大并发连接场景下,不是“自动适配高负载”的智能调度器,而是静态权重分配+请求计数驱动的分发机制——它本身不感知后端实时负载(如 CPU、内存、连接数或响应时间),只按预设权重比例分发请求。能否在大并发下表现良好,取决于权重设置是否合理、后端服务能力是否稳定,以及是否配合其他机制弥补其局限性。
关键点:权重 ≠ 实时负载能力
比如配置 server A weight=5、server B weight=1,Nginx 会按 5:1 的请求次数比例分发(如6个请求中5个到A、1个到B),但若A节点此时已满载、响应变慢,Nginx仍会继续把第5、第6、第11…个请求发给它,除非触发健康检查剔除。
加权轮询在大并发下的实际表现
- 优势明显时:后端服务器性能差异稳定(如新旧机器混用)、业务请求轻量且处理时间均一(如静态资源、简单API)、扩容节奏可控。此时权重可基于压测QPS设定,实现近似线性的吞吐提升。
-
容易出问题时:
- 请求处理耗时波动大(如含数据库查询、外部调用)→ 高权重节点可能积压大量慢请求;
- 某节点突发故障但未达
max_fails阈值 → 仍持续接收权重份额的流量; - 短连接密集爆发(如秒杀抢购)→ 连接建立/释放开销叠加权重分配,可能放大不均衡。
提升大并发下稳定性的必要配套措施
-
必须启用健康检查:
- 设置
max_fails=3 fail_timeout=30s,让Nginx及时识别响应超时或连接拒绝的节点; - 对关键服务建议搭配主动健康检查模块(如
nginx_upstream_check_module),避免仅靠被动失败累积才剔除。
- 设置
优先搭配
least_conn(最少连接):
在upstream块中显式声明least_conn;,Nginx 会在此基础上再按权重做二次筛选(即:先找当前连接数最少的候选池,再在该池内按权重分发)。这对长连接或处理时间不均的API网关尤其有效。-
合理设置连接与超时参数:
-
proxy_connect_timeout 5s;、proxy_read_timeout 30s;避免慢节点拖垮整体; -
keepalive 32;+proxy_http_version 1.1;复用后端连接,减少新建开销; -
worker_connections 10240;确保Nginx自身不成为瓶颈。
-
权重应基于实测数据,而非硬件参数:
不要直接按CPU核数设为2:1,而应通过相同压力测试得出两台机器的实际QPS上限,再按比例换算权重(例如A能扛6000 QPS、B能扛2000 QPS → 权重比设为3:1)。
何时该换更动态的算法?
当出现以下情况,说明加权轮询已不够用:
- 同一批请求中,部分需毫秒级响应、部分需数秒(如混合读写API);
- 后端节点动态扩缩容频繁(权重需人工反复调整);
- 存在明显“热点”节点长期过载,监控显示连接堆积或超时率陡增。
此时建议升级至 Nginx Plus 使用least_time(响应时间加权),或改用 service mesh 层(如Istio)做更细粒度的流量治理。
不复杂但容易忽略:权重只是起点,不是终点。大并发下的真实均衡,靠的是权重 + 健康检查 + 连接管理 + 监控反馈的组合拳。











