应对突发流量需采用感知式调度:按连接特征选算法(least_conn、ip_hash+健康检查、weight、响应时间加权),加固tcp连接层(调大内核参数及nginx backlog),实施三层过载防护(连接/请求/响应层限流与重试),并通过map指令实现秒级策略切换。

应对突发流量,负载均衡策略早已从“平均分发”转向“感知式调度”——核心是让流量跟着后端真实状态走,而不是按固定规则硬分。
按连接特征动态选算法
不同突发场景需要不同底层逻辑:
- 秒杀、抢券这类短连接洪峰,用 least_conn:新请求只发给当前活跃连接最少的节点,避免某台机器瞬间打满;
- WebSocket、在线课堂等长连接业务,配 ip_hash + 主动健康检查:保证用户始终落在同一后端,同时自动剔除异常节点;
- 新老机器混布时,靠 weight 显式标注处理能力,比如新机 weight=5、旧机 weight=2;
- 搜索、推荐等延迟敏感接口,需引入 响应时间加权(如配合 nginx-upstream-check-module),慢节点自动降权。
入口连接层必须加固
TCP 连接建立是第一道防线,丢包常发生在 accept 队列溢出:
- 同步调大系统参数:net.core.somaxconn、net.ipv4.tcp_max_syn_backlog、ulimit -n,建议统一设为 65535 或更高;
- Nginx 的 listen 必须显式写 backlog=65535,否则默认 511 极易成为瓶颈;
- 压测时用 ss -lnt 观察 Recv-Q 值,确认是否真正生效。
三层过载防护缺一不可
限流只是起点,真正的防护要覆盖连接、请求、响应全链路:
- 连接层:用 limit_conn_zone + limit_conn 限制单 IP 并发连接数,防 Slowloris 类攻击;
- 请求层:对非核心路径(如评论、埋点)单独限流;运维接口(/health、/metrics)严格限速,避免探针反成压测源;
- 响应层:配置 proxy_next_upstream error timeout http_500–504 + proxy_next_upstream_tries 2,后端短暂不可用时自动重试并摘除,阻断雪崩。
运行中支持秒级策略切换
Nginx 不支持热改 upstream 算法,但可通过配置重组实现逻辑切换:
- 定义多个 upstream 块,如 backend_least(least_conn)、backend_hash(ip_hash);
- 用 map 指令绑定变量(如 $http_x_load_mode),动态映射目标 upstream;
- location 中 proxy_pass 使用变量 http://$target_upstream,无需 reload 即可切换;
- 紧急时还可临时加 down 标记隔离故障节点,或调高 max_fails 缓解误判。











