前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【SCT】Spring Cloud Tencent Polaris LoadBalancer

【SCT】Spring Cloud Tencent Polaris LoadBalancer

作者头像
FoamValue
发布2022-12-20 16:32:26
1.2K0
发布2022-12-20 16:32:26
举报
文章被收录于专栏:FoamValue

【引用】

Spring Cloud Tencent 是腾讯开源的一站式微服务解决方案。SCT实现了Spring Cloud 标准微服务 SPI,开发者可以基于 Spring Cloud Tencent 快速开发 Spring Cloud 云原生分布式应用。

Spring Cloud Tencent 的核心依托腾讯开源的一站式服务发现与治理平台 Polaris,实现各种分布式微服务场景。

版本信息

https://github.com/Tencent/spring-cloud-tencent

spring-cloud-tencent:1.6.0-Hoxton.SR12-SNAPSHOT

Spring Cloud:Hoxton.SR12

Spring Framework:5.2.22.RELEASE

【Spring Cloud Tencent Polaris LoadBalancer】

Polaris LoadBalancer 工程,通过对 ribbon 的继承,扩展了实现负载均衡器的能力。

【additional-spring-configuration-metadata.json】

定义 Polaris LoadBalancer 工程的配置属性,前缀为:spring.cloud.polaris.loadbalancer.*

属性名

备注

默认值

enabled

是否开启 Polaris 负载均衡

true

discoveryType

发现服务类型

POLARIS

strategy

负载均衡策略

random

【PolarisLoadBalancerProperties.java】

Polaris LoadBalancer 配置属性对应类,自动将配置文件中的配置转换为 Bean。

【spring.factories】

指定开启 Spring Boot 自动配置类全路径。

【PolarisLoadBalancerAutoConfiguration.java】

Polaris LoadBalancer 自动配置类

1、配置类注解、不使用 proxy bean 代理

2、启用对@ConfigurationProperties注释 Bean 的支持。

3、判断是否满足启用条件:"spring.cloud.polaris.enabled"。

4、判断是否满足启用条件:"spring.cloud.polaris.loadbalancer.enabled"。

5、配置类加载后,自动加载 RibbonAutoConfiguration.java

6、通过 @RibbonClients 注入 Polaris 客户端配置类 PolarisRibbonClientConfiguration.class。

7、将 PolarisLoadBalancerProperties、RouterAPI(通过 polarisContext Bean 创建)实例加入到 IOC 交由 Spring 进行管理。

【PolarisRibbonClientConfiguration.java】

Polaris ribbon client 配置类,注入 Polaris 自定义 ILoadBalancer 接口实现类。

【PolarisLoadBalancer.java】

Polaris 自定义路由负载均衡类。

1、继承了 DynamicServerListLoadBalancer 类,重写了 getReachableServers()、getAllServers() 两个方法。然而 getAllServers() 方法未自定义实现,直接调用了 getReachableServers() 方法。

getReachableServers()

获取已启动且可访问的服务器。

getAllServers()

获取所有已知的服务器,包括可访问和无法访问的服务器。

2、PolarisLoadBalancer 构造器增加了两个自定义参数 ConsumerAPI、PolarisLoadBalancerProperties。

3、getReachableServers()

  • 判断配置文件中的 discoveryType 是否为 POLARIS
    • 通过自定义主调端接口(ConsumerAPI)获取指定命名空间、服务名称的服务器列表。
    • 通过DynamicServerListLoadBalancer 提供的 getAllServer() 接口,获取所有已知的服务器信息。
    • 将获取的服务器信息,组装为 Polaris 自定义的服务器信息。(即:ServiceInstances、ServiceKey、Instance)

【PolarisWeightedRule.java】

Polaris 权重负载均衡实现类。

1、继承默认设置获取负载均衡实现类:AbstractLoadBalancerRule.java

2、初始化时,增加了 Polaris 路由相关 API 接口。

3、重写 choose() 方法,返回 Polaris 的服务器信息对象。

  • 获取已启动且可访问的服务器列表。getReachableServers()
  • 将服务器列表转换为 ServiceInstances
    • 唯一索引标识 ServerKey:命名空间 + 服务名称
    • 服务器实例列表 List<Instance>:ID、IP 地址、端口、健康、熔断情况等。
  • 调用 Polaris 路由相关 API 的执行负载均衡接口:processLoadBalance(ProcessLoadBalanceRequest request)
  • 将获得的目标 Instance 实例组装为 PolarisServer ,并返回结果。

【结尾】

一年已经过去大半,是时候定一个小目标:阅读学习优秀的开源项目源代码。

本文是 Spring Cloud Tencent 第三篇文章,希望今年能完成整个 SCT 源代码的阅读与学习。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Alan 手记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【引用】
    • 版本信息
    • 【Spring Cloud Tencent Polaris LoadBalancer】
    • Polaris LoadBalancer 工程,通过对 ribbon 的继承,扩展了实现负载均衡器的能力。
    • 【结尾】
    相关产品与服务
    负载均衡
    负载均衡(Cloud Load Balancer,CLB)提供安全快捷的四七层流量分发服务,访问流量经由 CLB 可以自动分配到多台后端服务器上,扩展系统的服务能力并消除单点故障。轻松应对大流量访问场景。 网关负载均衡(Gateway Load Balancer,GWLB)是运行在网络层的负载均衡。通过 GWLB 可以帮助客户部署、扩展和管理第三方虚拟设备,操作简单,安全性强。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档