88 lines
3.0 KiB
Markdown
88 lines
3.0 KiB
Markdown
## 定义
|
||
|
||
在多个服务器间分散请求,提高系统性能和可用性。
|
||
|
||
## 核心作用
|
||
|
||
- **高可用**:单点故障不中断服务
|
||
- **高性能**:分散负载,提高吞吐量
|
||
- **可扩展**:增加服务器应对增长
|
||
|
||
## 实现层级
|
||
|
||
**第4层(传输层)**:基于IP/端口,性能最高,功能简单。工具:LVS、HAProxy
|
||
**第7层(应用层)**:基于HTTP/内容,功能强大,性能较低。工具:Nginx、HAProxy
|
||
|
||
## 常见算法
|
||
|
||
|算法|原理|适用|
|
||
|---|---|---|
|
||
|轮询|依次分配给每个服务器|无状态短连接|
|
||
|加权轮询|按性能分配权重|性能差异大|
|
||
|最少连接|分配给连接数最少的服务器|长连接应用|
|
||
|IP哈希|相同IP总路由到同一服务器|会话保持|
|
||
|一致性哈希|哈希环实现,服务器变化影响小|分布式缓存|
|
||
|随机|随机选择服务器|简单场景|
|
||
|响应时间|选择响应最快的服务器|延迟敏感|
|
||
|
||
## 主流产品
|
||
|
||
**硬件**:F5 Big-IP、Citrix NetScaler(功能全面,价格贵)
|
||
**开源**:Nginx(最流行)、HAProxy(功能强大)、LVS(性能最高)
|
||
**云服务**:AWS ELB、阿里云SLB、腾讯云CLB、Azure LB
|
||
|
||
## 应用场景
|
||
|
||
1. **Web应用**:多个服务器部署相同应用
|
||
2. **数据库**:主库写,多个从库读
|
||
3. **微服务**:服务发现和分配
|
||
4. **API网关**:统一入口分配到不同服务
|
||
5. **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) + 日志聚合|
|
||
|服务器增删影响大|用一致性哈希|
|
||
|
||
## 优缺点
|
||
|
||
**优势**:高可用、高吞吐、易扩展、故障转移、灵活部署
|
||
**局限**:成本增加、系统复杂、可能增加延迟、会话管理复杂
|
||
|
||
## 快速判断使用场景
|
||
|
||
- 单个服务器无法承载 → 需要负载均衡
|
||
- 需要故障自动转移 → 需要负载均衡
|
||
- 频繁发布部署 → 需要负载均衡
|
||
- 想水平扩展系统 → 需要负载均衡
|
||
- 对性能无特殊要求的小应用 → 暂可不用 |