当系统请求量超过单机极限时,水平扩展是最直接的解决方案。它依赖负载均衡策略,让多台节点共同承担流量。
1. 垂直扩展 vs 水平扩展
- 垂直扩展:提升单机硬件配置(CPU、内存)。简单但成本高,存在上限。
- 水平扩展:增加节点数量,分摊负载。可无限扩展,但架构复杂。
2. 负载均衡算法
- 轮询(Round Robin) :顺序分发请求,简单通用。
- 加权轮询:按节点性能分配权重。
- 最少连接数:优先将请求发往当前连接少的节点。
- 哈希一致性:同一用户或会话始终落到同一节点,适合状态依赖业务。
- 随机算法:适合节点数量频繁变化的场景。
3. 常见负载均衡实现
- Nginx / HAProxy:应用层负载均衡(L7)。
- LVS / IPVS:网络层负载均衡(L4),性能高。
- Kubernetes Service / Ingress:容器化环境的统一负载入口。
- 应用层自实现:微服务框架内部实现客户端负载均衡(Ribbon、Feign、gRPC)。
4. 会话保持与状态同步
-
无状态服务可以任意分配请求。
-
有状态服务需解决 Session 共享,可通过:
- Redis 存储 Session。
- Token 机制携带用户状态。
- Sticky Session(会话粘性)。
5. 实践经验
- 节点健康检查必不可少。
- 优雅下线机制保证不丢请求。
- 指标监控:QPS、RT、Error Rate 需要实时监测。
结论:水平扩展是后端性能的“终极手段”。合理的负载均衡策略决定系统能否真正做到高可用与高并发。