name: 负载均衡模式 description: 当在多个服务器或区域之间分配流量时,使用此技能选择和配置适当的负载均衡解决方案(第4层/第7层、云管理、自管理或Kubernetes入口),并进行适当的健康检查和会话管理。
负载均衡模式
使用适当的负载均衡方法在基础设施上分配流量,从简单的轮询到全局多区域故障转移。
何时使用此技能
使用负载均衡模式当:
- 在多个应用服务器之间分配流量
- 实现高可用性和故障转移
- 基于URL、头部或地理位置路由流量
- 在无状态后端管理会话持久性
- 将应用部署到Kubernetes集群
- 跨区域配置全局流量管理
- 实施零停机部署(蓝绿、金丝雀)
- 在云管理和自管理负载均衡器之间选择
核心负载均衡概念
第4层 vs 第7层
第4层(L4)- 传输层:
- 基于IP地址和端口路由(TCP/UDP数据包)
- 无应用数据检查,低延迟,高吞吐量
- 协议无关,保留客户端IP地址
- 适用于:数据库连接、视频流、游戏、金融交易、非HTTP协议
第7层(L7)- 应用层:
- 基于HTTP URL、头部、cookie、请求体路由
- 完整应用数据可见性,SSL/TLS终止、缓存、WAF集成
- 内容路由能力
- 适用于:Web应用、REST API、微服务、GraphQL端点、复杂路由逻辑
负载均衡算法
| 算法 | 分配方法 | 使用案例 |
|---|---|---|
| 轮询 | 顺序 | 无状态、相似服务器 |
| 加权轮询 | 基于容量 | 不同服务器规格 |
| 最少连接 | 最少活动连接 | 长连接 |
| 最少响应时间 | 最快服务器 | 性能敏感 |
| IP哈希 | 客户端IP基于 | 会话持久性 |
| 基于资源 | CPU/内存指标 | 变化工作负载 |
健康检查类型
浅层(存活): 进程是否存活?
- 端点:
/health/live或/live - 返回:200如果进程运行
- 适用于:进程监控、容器健康
深层(就绪): 服务能否处理请求?
- 端点:
/health/ready或/ready - 验证:数据库、缓存、外部API连接性
- 适用于:负载均衡器路由决策
健康检查迟滞: 不同阈值标记上/下以防止抖动
- 示例:3次失败标记为下,2次成功标记为上
云负载均衡器
AWS负载均衡
应用负载均衡器(ALB)- 第7层:
- 适用于:HTTP/HTTPS应用、微服务、WebSocket
- 特性:路径/主机/头部路由、AWS WAF集成、Lambda目标
网络负载均衡器(NLB)- 第4层:
- 适用于:超低延迟(<1ms)、TCP/UDP、静态IP、百万RPS
- 特性:保留源IP、TLS终止
全局加速器 - 第4层全局:
- 适用于:多区域应用、全球用户、DDoS防护
- 特性:任播IP、自动区域故障转移
GCP负载均衡
应用LB(L7): 全局HTTPS LB、Cloud CDN集成、Cloud Armor(WAF/DDoS) 网络LB(L4): 区域TCP/UDP、直通平衡、会话亲和性 云负载均衡: 单任播IP、全局分发、后端存储桶
Azure负载均衡
应用网关(L7): WAF集成、URL路由、SSL终止、自动扩展 负载均衡器(L4): 基本和标准SKU、健康探针、HA端口 流量管理器(全局): DNS路由(优先级、加权、性能、地理)
自管理负载均衡器
NGINX
最佳用于: 通用HTTP/HTTPS负载均衡、Web应用堆栈
能力: HTTP反向代理、TCP/UDP流负载均衡、SSL/TLS终止、健康检查
HAProxy
最佳用于: 最大性能、数据库负载均衡、资源效率
能力: 高吞吐量、低内存占用、10+算法、复杂健康检查
Envoy
最佳用于: 微服务、Kubernetes、服务网格集成
能力: 云原生设计、动态配置、熔断器、重试、超时
Traefik
最佳用于: Docker/Kubernetes环境、动态配置、易用性
能力: 自动服务发现、原生Kubernetes集成、Let’s Encrypt支持、中间件系统
Kubernetes Ingress控制器
选择指南
| 控制器 | 最佳用于 | 优势 |
|---|---|---|
| NGINX Ingress(F5) | 通用目的 | 稳定性、广泛采用、成熟特性 |
| Traefik | 动态环境 | 易配置、服务发现 |
| HAProxy Ingress | 高性能 | 高级L7路由、可靠性 |
| Envoy(Contour/Gateway) | 服务网格 | 丰富L7特性、可扩展性 |
| Kong | API密集型应用 | JWT认证、速率限制、插件 |
| 云提供商 | 单云 | 原生云集成 |
会话持久性
粘性会话(慎用)
基于Cookie: 负载均衡器设置cookie跟踪服务器亲和性 IP哈希: 哈希客户端IP选择后端服务器
共享会话存储(推荐)
架构:无状态应用服务器 + 集中会话存储(Redis、Memcached)
客户端令牌(最佳用于API)
JWT:服务器生成签名令牌,客户端存储并随请求发送
全局负载均衡
地理DNS路由
基于地理位置路由用户到最近服务器
多区域故障转移
主/次区域配置,自动DNS故障转移
CDN集成
结合负载均衡与CDN,全球缓存内容
决策框架
L4 vs L7选择
选择L4当:协议是TCP/UDP、超低延迟关键、高吞吐量、需要客户端源IP 选择L7当:协议是HTTP/HTTPS、需要内容路由、SSL终止、WAF集成、微服务架构
云 vs 自管理
选择云管理当:单云部署、自动扩展、团队缺乏专业知识 选择自管理当:多云或混合部署、高级路由需求、成本优化、需要完全控制
自管理选择
- NGINX: 通用目的、Web堆栈、HTTP/3支持
- HAProxy: 最大性能、数据库LB、最低资源使用
- Envoy: 微服务、服务网格、动态配置
- Traefik: Docker/Kubernetes、自动发现、易配置
配置示例
完整示例在examples/目录:
- 云提供商:AWS ALB/NLB、GCP、Azure配置
- 自管理:NGINX、HAProxy、Envoy、Traefik配置
- Kubernetes:NGINX Ingress、Traefik IngressRoute、Gateway API配置
监控和可观测性
关键指标
吞吐量、延迟、错误率、资源使用、健康状态
负载均衡器日志
启用访问日志,分析请求/响应细节
故障排除
不均匀负载分配
症状:一个服务器接收过多流量 解决方案:切换到最少连接、禁用粘性会话、实现连接耗尽
健康检查抖动
症状:服务器快速切换健康/不健康状态 解决方案:增加间隔和超时、实施迟滞、使用深层健康检查
故障转移后会话丢失
症状:用户服务器失败后登出 解决方案:实现共享会话存储、使用客户端令牌
集成点
相关技能:基础设施即代码、Kubernetes运维、网络架构、应用部署、可观测性、安全强化、服务网格、TLS实施
快速参考
选择矩阵
| 使用案例 | 推荐解决方案 |
|---|---|
| HTTP Web应用(AWS) | ALB |
| 非HTTP协议(AWS) | NLB |
| Kubernetes HTTP入口 | NGINX Ingress或Traefik |
| 最大性能 | HAProxy |
| 服务网格 | Envoy |
| Docker Swarm | Traefik |
| 多云便携 | NGINX或HAProxy |
| 全局分发 | CloudFlare、AWS全局加速器 |
算法选择
| 流量模式 | 算法 |
|---|---|
| 无状态、相似服务器 | 轮询 |
| 无状态、不同容量 | 加权轮询 |
| 长连接 | 最少连接 |
| 性能敏感 | 最少响应时间 |
| 需要会话持久性 | IP哈希或Cookie |
| 变化服务器负载 | 基于资源 |
健康检查配置
| 服务类型 | 检查类型 | 间隔 | 超时 |
|---|---|---|---|
| Web应用 | HTTP /health | 10s | 3s |
| API | HTTP /health/ready | 10s | 5s |
| 数据库 | TCP连接 | 5s | 2s |
| 关键服务 | HTTP深层检查 | 5s | 3s |
| 后台工作者 | HTTP /live | 30s | 5s |
总结
负载均衡对于分配流量、确保高可用性和启用水平扩展至关重要。选择L4用于原始性能和非HTTP协议,L7用于智能内容路由。优先云管理负载均衡器以简化,自管理用于多云可移植性和高级特性。实施适当健康检查,避免粘性会话,并持续监控关键指标。