微服务治理-负载均衡
一、介绍
1.1 什么是负载均衡
负载均衡(Load Balancing)是微服务治理中的核心能力之一,它负责在多个服务实例之间合理分配请求,提高系统吞吐能力、可用性和扩展能力
假设: User Service 只有一台服务器:10.0.0.5
随着后面业务越来越大增加服务器:10.0.0.5,10.0.0.6,10.0.0.7 …
现在应该调用哪一个?
于是出现:
负载均衡(Load Balancing)
它负责:
从多个可用实例中选择一个最合适的实例。
1.2 为什么需要负载均衡?
假设:10000 个请求全部发送:10.0.0.5 导致服务宕机
结果: 10.0.0.6, 10.0.0.7 却一直空闲
负载均衡能够平均分配
1.3 负载均衡解决什么问题?
主要包括
1.流量分摊
2.提高可用性
3.方便扩容
4. 支持灰度发布
二、原理
2.1 整个调用流程
Order Service
↓
Service Discovery
↓
Registry
↓
返回:
10.0.0.5
10.0.0.6
10.0.0.7
↓
Load Balance
↓
选择:
10.0.0.6
↓
HTTP
2.2 轮询(Round Robin)
特点:
- 简单
- 公平
- 实现容易
缺点:
不能反映机器性能差异。
2.3 随机
优点:
实现简单。
缺点:
短时间可能分配不均匀。
2.4 加权轮询
2.5 最少连接
2.6 一致性 Hash
三、最佳实践
3.1不同业务选择不同算法
| 场景 | 推荐算法 |
|---|---|
| 普通 HTTP 接口 | 轮询、随机 |
| 机器性能差异明显 | 加权轮询 |
| WebSocket、长连接 | 最少连接 |
| Session 保持 | 一致性 Hash |
| 灰度发布 | 标签路由 + 权重 |
3.2 配合健康检查
负载均衡器不能选择DOWN实例
应该:过滤不可用节点。
3.2 配合熔断
如果某个实例连续失败。
负载均衡:节点应该暂时移除。
3.4 支持动态实例
负载均衡器应根据服务发现同步更新实例列表,而不需要重启服务。