Spring Cloud LoadBalancer简介

引入的 spring-cloud-starter-loadbalancer 依赖对应的负载均衡方案,就是本节的主角——Spring Cloud LoadBalancer。

Spring Cloud LoadBalancer 是负载均衡器 Ribbon 的替代方案。在 3.4 节中,介绍了 Spring Cloud 的主流套件,Spring Cloud 2020 版本以后,默认移除了对 Netflix 的依赖,其中就包括 Ribbon。现在 Spring Cloud 官方推荐使用 LoadBalancer 正式替代 RibbonLoadBalancer 现在也是 Spring Cloud 体系中负载均衡器的唯一实现。

NginxHaproxy 等软件不同,不管是 Ribbon 还是 LoadBalancer,它们都只是一个负载均衡器,或者说是一个依赖包,必须集成在服务实例中,甚至可以把它们看作某个 Spring Boot 项目中的一个功能模块。它们并不是一个独立的软件,也不需要独立部署。当然,也有一种说法把 RibbonLoadBalancer 称作 “客户端服务均衡”。项目中只需要添加相关的依赖,在项目运行期间它们自己就完成了负载均衡的工作,根据某种负载均衡策略选择一个可用的目标实例进行访问,不需要借助其他额外的软件。

这种方案有什么优点呢?

  • 减少整个系统的复杂度,不需要额外部署负载均衡软件。

  • 可以减少不必要的网络开销,因为请求不需要额外经过 Nginx 等负载均衡软件的一层转发。可用的目标实例信息都存储在本实例的 serviceInfoMap 变量中,选择其中一个直接发起请求即可。

Spring Cloud LoadBalancer 中内置的负载均衡规则实现类见表7-1。

image 2025 04 16 14 57 32 964
Figure 1. 表7-1 Spring Cloud LoadBalancer 中内置的负载均衡规则实现类

LoadBalancer 只提供了两种基础的负载均衡算法。虽然现在 Spring Cloud 官方推荐使用 Loadbalancer 替代 Ribbon,但是也不得不吐槽一下 Loadbalancer 有些小家子气,与 Ribbon 默认提供的七种负载均衡算法相比,确实有些相形见绌。好在开发人员可以自行定义负载均衡算法,这个知识点笔者也会讲解。