权重分发策略通过按服务器真实服务能力动态设置权重并配合健康检查与可观测闭环,间接缓解并发压力;需避免与ip_hash冲突,且ssl终止等耗cpu操作应前置至nginx层。

权重分发策略(Weighted Round Robin)本身不直接“优化并发压力”,而是让并发请求更合理地落到不同性能的后端服务器上,从而间接缓解单台服务器的并发压力。关键在于:权重不是拍脑袋定的,得结合真实负载、响应时间和资源使用率来动态调整。
权重配置要匹配真实服务能力
如果后端服务器硬件差异明显(比如一台是 16C32G,另一台是 4C8G),用默认轮询会把流量平均分过去,小规格机器很快被打满,而大机器还有余力。这时就要按能力设权重:
- 权重建议从 CPU 核心数、内存容量、磁盘 I/O 吞吐量中取一个主指标做比例参考(例如 16C vs 4C → 权重比可设为 4:1)
- 避免权重差距过大(如 100:1),否则小权重节点可能长期空闲,失去健康检查意义
- 上线前用 ab 或 wrk 做单机压测,记录每台在相同并发下的平均响应时间与错误率,反向校准权重
配合健康检查才能真正释放并发余量
光设权重不够——如果某台高权服务器实际已卡顿或响应超时,Nginx 还继续往它身上导流,反而加剧雪崩。必须启用主动健康检查:
- 在 upstream 块中加入 health_check 或通过第三方模块(如 nginx-plus 或 openresty 的 lua-resty-upstream-healthcheck)实现 TCP/HTTP 层探测
- 设置合理的 max_fails 和 fail_timeout,比如 3 次 50x 响应后摘除 30 秒,避免误判也防止僵死节点长期占用权重
- 搭配 slow_start 参数(如 slow_start=60s),让刚恢复的高权节点逐步承接流量,防止瞬间压垮
权重不是一劳永逸,需要可观测闭环
业务增长、部署变更、慢查询突增都可能让原先合理的权重失效。必须建立反馈机制:
- 通过 Nginx stub_status 或 Prometheus + nginx-vts-exporter 采集各 upstream server 的 request count、response time、active connections
- 当某台服务器的 avg_response_time 持续高于集群均值 2 倍,或 active_connections 接近 worker_connections 上限,就该调低其权重或扩容
- 有条件可接入自动化脚本:根据监控指标自动 patch upstream 配置并 reload(注意加锁防并发冲突)
注意和其它策略的协同关系
权重策略常和其它机制共存,需避免逻辑冲突:
- 不要和 ip_hash 同时启用——ip_hash 会覆盖权重,导致流量倾斜无法调节
- 若后端有长连接(如 WebSocket),优先考虑 least_conn,权重只作辅助;必要时可对 least_conn 节点再按权重微调
- SSL 终止、gzip、缓存等耗 CPU 操作尽量放在 Nginx 层,减轻后端计算压力,让权重真正反映“应用处理能力”而非“网络转发能力”











