微服务治理-负载均衡

一、介绍

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 支持动态实例

负载均衡器应根据服务发现同步更新实例列表,而不需要重启服务。