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

21.Spring Cloud LoadBalancer简介

unknown
• 阅读 1346

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
热门文章

暂无数据