专栏目录
4.maven依赖回顾以及项目框架结构 42.SpringCloudGateway 现有的可供分析的请求日志以及缺陷 39. 改造 resilience4j 粘合 WebClient 13.UnderTow 核心配置 5.所有项目的parent与spring-framework-common说明 7.从Bean到SpringCloud 19.Eureka的服务端设计与配置 30. FeignClient 实现重试 35. 验证线程隔离正确性 11.Log4j2 监控相关 28.OpenFeign的生命周期-进行调用 40. spock 单元测试封装的 WebClient(下) 23.订制Spring Cloud LoadBalancer 38. 实现自定义 WebClient 的 NamedContextFactory 8.理解 NamedContextFactory 21.Spring Cloud LoadBalancer简介 41. SpringCloudGateway 基本流程讲解(2) 20. 启动一个 Eureka Server 集群 17.Eureka的实例配置 15.UnderTow 订制 18.Eureka的客户端核心设计和配置 14.UnderTow AccessLog 配置介绍 22.Spring Cloud LoadBalancer核心源码 44.避免链路信息丢失做的设计(1) 16.Eureka架构和核心概念 40. spock 单元测试封装的 WebClient(上) 3.Eureka Server 与 API 网关要考虑的问题 26.OpenFeign的组件 10.使用Log4j2以及一些核心配置 27.OpenFeign的生命周期-创建代理 2.微服务框架需要考虑的问题 43.为何 SpringCloudGateway 中会有链路信息丢失 45. 实现公共日志记录 24.测试Spring Cloud LoadBalancer 1. 背景 25.OpenFeign简介与使用 37. 实现异步的客户端封装配置管理的意义与设计 12.UnderTow 简介与内部原理 6.微服务特性相关的依赖说明 33. 实现重试、断路器以及线程隔离源码 34.验证重试配置正确性 32. 改进负载均衡算法 44.避免链路信息丢失做的设计(2) 41. SpringCloudGateway 基本流程讲解(1) 31. FeignClient 实现断路器以及线程隔离限流的思路 36. 验证断路器正确性 29.Spring Cloud OpenFeign 的解析(1) 9.如何理解并定制一个Spring Cloud组件

21.Spring Cloud LoadBalancer简介

unknown
• 阅读 1229

21.Spring Cloud LoadBalancer简介

本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford

我们使用 Spring Cloud 官方推荐的 Spring Cloud LoadBalancer 作为我们的客户端负载均衡器。

Spring Cloud LoadBalancer背景

Spring Cloud LoadBalancer是一个客户端负载均衡器,类似于Ribbon,但是由于Ribbon已经进入维护模式,并且Ribbon 2并不与Ribbon 1相互兼容,所以Spring Cloud全家桶在Spring Cloud Commons项目中,添加了Spring cloud Loadbalancer作为新的负载均衡器,并且做了向前兼容,就算你的项目中继续用 Spring Cloud Netflix 套装(包括Ribbon,Eureka,Zuul,Hystrix等等)让你的项目中有这些依赖,你也可以通过简单的配置,把ribbon替换成Spring Cloud LoadBalancer。

负载均衡器在哪里使用?

Spring Cloud 中内部微服务调用默认是 http 请求,主要通过下面三种 API:

  • RestTemplate:同步 http API
  • WebClient:异步响应式 http API
  • 三方客户端封装,例如 openfeign

如果项目中加入了 spring-cloud-loadbalancer 的依赖并且配置启用了,那么会自动在相关的 Bean 中加入负载均衡器的特性。

  • 对于 RestTemplate,会自动对所有 @LoadBalanced 注解修饰的 RestTemplate Bean 增加 Interceptor 从而加上了负载均衡器的特性。
  • 对于 WebClient,会自动创建 ReactorLoadBalancerExchangeFilterFunction,我们可以通过加入ReactorLoadBalancerExchangeFilterFunction会加入负载均衡器的特性。
  • 对于三方客户端,一般不需要我们额外配置什么。

这些使用的示例,会在我们系列升级完最后的测试部分看到。

Spring Cloud LoadBalancer 结构简介

系列之前的文章我们提到了 NamedContextFactory,Spring Cloud LoadBalancer 这里也是使用了这个机制实现了不同微服务使用不同的 Spring Cloud LoadBalancer 配置。相关核心实现是 @LoadBalancerClient@LoadBalancerClients 这两个注解,以及 NamedContextFactory.Specification 的实现 LoadBalancerClientSpecificationNamedContextFactory 的实现 LoadBalancerClientFactory。如下图所示:

21.Spring Cloud LoadBalancer简介

  1. 可以通过 loadbalancer.client.name 这个属性获取当前要创建的 Bean 是哪个微服务的
  2. 可以知道默认配置是 LoadBalancerClientConfiguration,再查看它里面的源代码我们可以知道主要初始化两个 Bean:
    1. ReactorLoadBalancer,负载均衡器,因为有 @ConditionalOnMissingBean 所以可以被替换,这就是我们的扩展点
    2. ServiceInstanceSupplier,提供实例信息的 Supplier,因为有 @ConditionalOnMissingBean 所以可以被替换,这就是我们的扩展点
  3. Specification 为 LoadBalancerSpecification,再分析其调用可以知道,可以通过 @LoadBalancerClient@LoadBalancerClientsLoadBalancerClientConfiguration 的基础上额外指定配置。

21.Spring Cloud LoadBalancer简介

我们这一节简要介绍了 Spring Cloud LoadBalancer 的使用场景,以及结构设计和扩展点。下一节我们将详细分析 Spring Cloud LoadBalancer 的源代码来理解其中的原理。

微信搜索“我的编程喵”关注公众号,每日一刷,轻松提升技术,斩获各种offer

21.Spring Cloud LoadBalancer简介

点赞
收藏
评论区
推荐文章

暂无数据

unknown
unknown
Lv1
男 · rrrr · rrrrrrrr
rrrrr
文章
0
粉丝
17
获赞
0
热门文章

暂无数据