LoadBalancer的使用
# Loadbalancer的使用
# 它是负载均衡组件
在 Spring Cloud 中,LoadBalancer
是一个重要的组件,主要用于实现客户端负载均衡
。它可以帮助微服务应用在多个服务实例之间均匀地分配请求,从而提高系统的可用性和性能。
客户端负载均衡:
LoadBalancer
位于客户端,负责在多个服务实例之间分配请求。- 客户端通过
LoadBalancer
获取服务实例列表,并根据某种负载均衡策略选择一个实例进行通信。那什么是服务端负载均衡呢?Nginx就是一个典型的服务端负载均衡组件。
# 它的特点
它有以下几个特点,
服务发现集成(这也是它主要作用):
LoadBalancer
通常与服务发现组件(如 Eureka、Consul、Nacos)集成,动态获取服务实例列表。- 当服务实例发生变化时(如新增、删除、健康检查),
LoadBalancer
会自动更新服务实例列表。
灵活的负载均衡策略:
LoadBalancer
支持多种负载均衡策略,如轮询、随机、最少连接数等。- 开发者可以根据具体需求选择合适的负载均衡策略。
去中心化:
- 没有单点故障,因为每个客户端都独立选择后端服务器。
- 即使某个客户端或服务实例失败,也不会影响整个系统的正常运行。
易于水平扩展:
- 客户端负载均衡易于水平扩展,因为每个客户端都是独立的。
- 新增或移除服务实例时,客户端会自动更新服务实例列表。
任何事物都是如此,再带来新的便利之时,也会带来新的问题。以下就是它所带来的新问题(其中典型的):
- 网络开销:
- 客户端需要定期与服务发现组件通信以获取最新的服务实例列表,这可能会增加网络开销。
- 如果服务实例数量较多,频繁的通信可能会对网络带宽造成压力。
- 复杂性:
- 客户端需要实现负载均衡逻辑,增加了开发和维护的复杂性。
- 开发者需要了解和配置负载均衡策略,可能需要更多的学习和调试时间。
# 它的使用
它作为SpringCloud官方组件,当然,在官网是可以找到的,不过它的位置有点隐蔽。没有作为一个单独组件展示出来,而是挂在组件Spring Cloud Commons
下了。
在Learn面板的,Guides菜单中可以找到。
这里是SpringCloud LoadBalancer (opens new window)官网介绍的从0到1的案例
- https://spring.io/guides/gs/spring-cloud-loadbalancer
或者你可以在所有项目汇总这里进行搜索:Spring-搜索页 (opens new window)
- https://spring.io/guides
当然,你也可以在Commons对应的Reference中找到。
这是对LoadBalancer (opens new window)的特性以及使用介绍:
- https://docs.spring.io/spring-cloud-commons/reference/spring-cloud-commons/loadbalancer.html
# 工作流程
第一步,先选择服务注册中心(比如:ConsulServer)从服务端查询并拉取服务列表,知道了它有多个服务,这几个实现是完全一样的,
默认轮询调用谁都可以正常执行。类似生活中求医挂号,某个科室今日出诊的全部医生,客户端你自己选一个。
第二步,按照指定的负载均衡策略从server取到的服务注册列表中由客户端自己选择一个地址,所以LoadBalancer是一个客户端的负载均衡器。
# 关键步骤
引入对应pom坐标:
<!--loadbalancer-->
< dependency >
< groupId >org.springframework.cloud </ groupId >
< artifactId >spring-cloud-starter-loadbalancer </ artifactId >
</ dependency >
1
2
3
4
5
2
3
4
5
该坐标添加到要去消费其他微服务的module中。
# 轮询算法切换
- https://docs.spring.io/spring-cloud-commons/reference/spring-cloud-commons/loadbalancer.html#switching-between-the-load-balancing-algorithms
上次更新: 2024/12/01, 14:58:26