轮询是Nginx默认负载均衡策略,按顺序循环分配请求,仅维护一个计数器并取模,纯内存操作、开销极低,万级并发下耗时纳秒级,零配置即生效,适用于后端性能均等的无状态服务。

Nginx 的轮询(Round Robin)策略本身不涉及实时计算或状态跟踪,执行开销极低,性能表现几乎不受后端节点数量影响——它本质是一个轻量级的计数器递增与取模操作。
轮询策略的执行性能特点
- 每次请求仅需维护一个全局索引(
current),每次加1并对服务器总数取模 - 无网络探测、无响应时间采集、无连接数查询,纯内存操作
- 在万级并发下,调度逻辑耗时稳定在纳秒级,对整体吞吐无可观测影响
实际性能瓶颈通常不在轮询算法本身,而在于以下配套配置:
-
健康检查缺失:若未配置
max_fails和fail_timeout,故障节点仍持续接收请求,导致大量超时重试,拖慢整体响应 -
长连接未复用:未启用
keepalive时,频繁建连/断连消耗 CPU 与端口资源,掩盖了调度层的高效性 - proxy_pass 转发延迟:后端响应慢、网络抖动、TLS 握手开销等,远大于轮询调度本身的开销
验证轮询调度是否“公平且高效”的关键方法:
- 查看 Nginx 访问日志中各后端 IP 的请求计数分布(如
awk '{print $NF}' access.log | sort | uniq -c) - 使用
ab或wrk发起固定并发请求(例如wrk -t4 -c100 -d30s http://nginx/),观察各后端请求数偏差是否在 ±5% 内 - 检查
nginx -T输出中 upstream 块是否含多余空格或语法错误(如weight=2写成weight = 2在旧版本可能被忽略,误触发默认轮询)
适合轮询策略的典型场景:
- 后端服务为无状态 HTTP API,处理耗时方差小(标准差 < 20ms)
- 所有节点硬件规格一致(CPU 核心数、内存、网卡带宽相近)
- 不依赖会话粘性,且能容忍单次请求失败后的重试
轮询不是“最智能”的策略,但它是唯一零运行时开销、零依赖、零配置即生效的均衡方式。只要后端能力均衡,它的实际调度效率就接近理论最优。



















