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
正式替代 Ribbon
,LoadBalancer
现在也是 Spring Cloud
体系中负载均衡器的唯一实现。
与 Nginx
、Haproxy
等软件不同,不管是 Ribbon
还是 LoadBalancer
,它们都只是一个负载均衡器,或者说是一个依赖包,必须集成在服务实例中,甚至可以把它们看作某个 Spring Boot
项目中的一个功能模块。它们并不是一个独立的软件,也不需要独立部署。当然,也有一种说法把 Ribbon
和 LoadBalancer
称作 “客户端服务均衡”。项目中只需要添加相关的依赖,在项目运行期间它们自己就完成了负载均衡的工作,根据某种负载均衡策略选择一个可用的目标实例进行访问,不需要借助其他额外的软件。
这种方案有什么优点呢?
-
减少整个系统的复杂度,不需要额外部署负载均衡软件。
-
可以减少不必要的网络开销,因为请求不需要额外经过
Nginx
等负载均衡软件的一层转发。可用的目标实例信息都存储在本实例的serviceInfoMap
变量中,选择其中一个直接发起请求即可。
Spring Cloud LoadBalancer
中内置的负载均衡规则实现类见表7-1。

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