负载均衡
L4/L7;对照 nginx-essentials。
25 分钟
负载均衡
多实例无状态服务前面需要 负载均衡器(LB) 分发流量,避免单点过载。理解 L4 与 L7 差异、常见算法与健康检查,是 building-for-scale 流量层的必修课,细节实现见 nginx-essentials。
学习目标
- 区分四层(TCP)与七层(HTTP)负载均衡的能力边界
- 掌握轮询、加权轮询、最少连接、一致性哈希等算法
- 配置健康检查与优雅摘流,避免把流量打到宕机实例
核心概念
| 层级 | 工作对象 | 典型产品 | 能做什么 |
|---|---|---|---|
| L4 | IP + 端口 | LVS、NLB | 快速转发、低延迟 |
| L7 | HTTP 头、路径 | Nginx、ALB | 路径路由、TLS、限流 |
Client → LB → { App-1, App-2, App-3 }
↑ health check: GET /actuator/health
常用算法:
- Round Robin:简单均匀,不考虑实例负载
- Least Connections:长连接场景更公平
- IP Hash / Consistent Hash:会话粘滞或缓存 locality
- Weighted:新机器权重低,灰度放量
Spring Cloud 中 @LoadBalanced RestTemplate、Gateway 背后是服务发现 + 客户端 LB;边缘仍常放 Nginx/Ingress。
陷阱:健康检查过慢导致误摘流;max_fails 过小导致抖动。摘流前配合 graceful shutdown(完成在途请求再退出)。
与微服务
spring-cloud-essentials 的 Gateway + 注册中心与 scale-stateless 无状态实例组合,构成完整入口层。超限流量需 scale-backpressure。
练习
- 为三个 App 实例写 Nginx upstream 配置(含 health check)
- 对比轮询与最少连接在 WebSocket 场景下的表现
- 模拟一台实例 503,确认 LB 是否在 3 次失败后摘除
小结
负载均衡把流量摊到健康实例上——算法选对、探活可靠,扩容才有意义。
加载本节练习…