3.0 KiB
3.0 KiB
定义
在多个服务器间分散请求,提高系统性能和可用性。
核心作用
- 高可用:单点故障不中断服务
- 高性能:分散负载,提高吞吐量
- 可扩展:增加服务器应对增长
实现层级
第4层(传输层):基于IP/端口,性能最高,功能简单。工具:LVS、HAProxy
第7层(应用层):基于HTTP/内容,功能强大,性能较低。工具:Nginx、HAProxy
常见算法
| 算法 | 原理 | 适用 |
|---|---|---|
| 轮询 | 依次分配给每个服务器 | 无状态短连接 |
| 加权轮询 | 按性能分配权重 | 性能差异大 |
| 最少连接 | 分配给连接数最少的服务器 | 长连接应用 |
| IP哈希 | 相同IP总路由到同一服务器 | 会话保持 |
| 一致性哈希 | 哈希环实现,服务器变化影响小 | 分布式缓存 |
| 随机 | 随机选择服务器 | 简单场景 |
| 响应时间 | 选择响应最快的服务器 | 延迟敏感 |
主流产品
硬件:F5 Big-IP、Citrix NetScaler(功能全面,价格贵)
开源:Nginx(最流行)、HAProxy(功能强大)、LVS(性能最高)
云服务:AWS ELB、阿里云SLB、腾讯云CLB、Azure LB
应用场景
- Web应用:多个服务器部署相同应用
- 数据库:主库写,多个从库读
- 微服务:服务发现和分配
- API网关:统一入口分配到不同服务
- CDN:地理位置分散
关键特性
- 健康检查:定期检测服务器状态,自动隔离故障
- 会话保持:确保用户请求路由到同一服务器
- 连接复用:HTTP Keep-Alive,减少连接开销
- 限流:保护后端服务器
- 超时管理:设置连接和请求超时时间
部署模式
单点:一个LB + 多个服务器(简单但有单点风险)
主备:主LB + 备LB + VIP自动转移(高可用)
多活:多个LB并行工作 + DNS分散(性能最优)
分层:DNS级(地域)→ 网络级(区域)→ 应用级(服务器)
选择指南
| 条件 | 方案 |
|---|---|
| 小规模(<1K QPS) | Nginx基础配置 |
| 中等规模(1K-10K QPS) | Nginx/HAProxy |
| 大规模(>10K QPS) | LVS/硬件/云服务 |
| 复杂业务逻辑 | Nginx高级/HAProxy/硬件 |
| 云环境 | 用云厂商服务 |
| 成本优先 | 开源方案(Nginx/HAProxy) |
常见问题解决
| 问题 | 解决方案 |
|---|---|
| LB单点故障 | 主备部署或多活部署 + VIP |
| 会话不一致 | 会话粘性或分布式会话存储(Redis) |
| 调试困难 | 分布式追踪(Jaeger/Zipkin) + 日志聚合 |
| 服务器增删影响大 | 用一致性哈希 |
优缺点
优势:高可用、高吞吐、易扩展、故障转移、灵活部署
局限:成本增加、系统复杂、可能增加延迟、会话管理复杂
快速判断使用场景
- 单个服务器无法承载 → 需要负载均衡
- 需要故障自动转移 → 需要负载均衡
- 频繁发布部署 → 需要负载均衡
- 想水平扩展系统 → 需要负载均衡
- 对性能无特殊要求的小应用 → 暂可不用