文档章节

Spring Cloud Ribbon 组件介绍

简单自由
 简单自由
发布于 2019/11/28 10:53
字数 1050
阅读 21
收藏 0

ribbon 组件

file

接口 作用 默认值
IClientConfig 读取配置 DefaultclientConfigImpl
工Ru1e 负载均衡规则,选择实例 ZoneAvoidancerule
工Ping 筛选掉ping不通的实例 Dummying
Serverlist<server> 交给 Ribbon的实例列表 Ribbon: ConfiqurationBasedServerList Spring cloud Alibaba: NacosServerList
ServerlistFilter< Server> 过滤掉不符合条件的实例 ZonepreferenceserverlistFilter
ILoadBalancer Ribbon的入口 ZoneAwareloadBalancer
ServerListUpdater 更新交给Ribbon的List的策略 PollingserverlistUpdater

IClientConfig 读取配置

读取配置信息。一般都不使用

IRule 负载均衡算法

常用的权重、随机、随机权重、hash等负载均衡算法都能找到。也可以根据自己的实际的业务场景进行自定义的负载均衡算法。 file

IPing 筛选ping不通的实例

IPing 方式可以也可以根据实际业务场景进行定制开发 file

Serverlist<server> Ribbon的实例列表

这个接口 有俩个方法

  • 一个是获取初始化服务列表
  • 获取更新的服务器列表,默认是30S,可设置调整

file

ServerlistFilter< Server> 过滤掉不符合条件的实例

file

过滤服务根据ServerStats条件,是否需要筛选。

如果有需要我们也可以定制自己的服务过滤器。

public class ServerListSubsetFilter<T extends Server> extends ZoneAffinityServerListFilter<T> implements IClientConfigAware, Comparator<T> {
····
····
 public List<T> getFilteredListOfServers(List<T> servers) {
        List<T> zoneAffinityFiltered = super.getFilteredListOfServers(servers);
        Set<T> candidates = Sets.newHashSet(zoneAffinityFiltered);
        Set<T> newSubSet = Sets.newHashSet(this.currentSubset);
        LoadBalancerStats lbStats = this.getLoadBalancerStats();
        Iterator var6 = this.currentSubset.iterator();

        while(true) {
            while(var6.hasNext()) {
                T server = (Server)var6.next();
                if (!candidates.contains(server)) {
                    newSubSet.remove(server);
                } else {
					// 循环调用获取服务状态
                    ServerStats stats = lbStats.getSingleServerStat(server);
                    if (stats.getActiveRequestsCount() > this.eliminationConnectionCountThreshold.get() || stats.getFailureCount() > (long)this.eliminationFailureCountThreshold.get()) {
                        newSubSet.remove(server);
                        candidates.remove(server);
                    }
                }
            }


····
····
}

ILoadBalancer

Ribbon的入口 ,也是真正的业务核心类。罗列了一下 主要工作的职责。

  • 维护了存储服务实例Server对象的二个列表。一个用于存储所有服务实例的清单,一个用于存储正常服务的实例清单
  • 初始化得到可用的服务列表,启动定时任务去实时的检测服务列表中的服务的可用性,并且间断性的去更新服务列表,结合注册中心。
  • 选择可用的服务进行调用(这个一般交给IRule去实现,不同的轮询策略)

file

ServerListUpdater

循环更新服务器状态。

只有一个实现类 PollingServerListUpdater

配置方式

file

这使您可以在启动时在不同环境中更改行为。

支持的属性在下面列出,并且应以开头<clientName>.ribbon.:

NFLoadBalancerClassName: ILoadBalancer NFLoadBalancerRuleClassName: IRule NFLoadBalancerPingClassName: IPing NIWSServerListClassName: ServerList NIWSServerListFilterClassName ServerListFilter

cloud-discovery-client:
  ribbon:
    NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule
		

注意点

这些属性中定义的类优先于使用定义的bean @RibbonClient(configuration=MyRibbonConfig.class)和Spring Cloud Netflix提供的默认值。

思考

其实Ribbon 用组件的方式给拆解出来。对于有一定了解基础的人。就能猜到,该如何组合这些组件完成整个的流程的操作。这里不会再过多的介绍 Ribbon 如果想探究一下里面实现的细节。可以去看看里面源码。

往期资料、参考资料

Sentinel 官方文档地址

摘自参考 spring cloud 官方文档

Spring Cloud alibaba 官网地址

示例代码地址

服务器nacos 地址 http://47.99.209.72:8848/nacos

往期地址 spring cloud alibaba 地址

spring cloud alibaba 简介

Spring Cloud Alibaba (nacos 注册中心搭建)

Spring Cloud Alibaba 使用nacos 注册中心

Spring Cloud Alibaba nacos 配置中心使用

spring cloud 网关服务

Spring Cloud zuul网关服务 一

Spring Cloud 网关服务 zuul 二

Spring Cloud 网关服务 zuul 三 动态路由

Spring Cloud alibaba网关 sentinel zuul 四 限流熔断

Spring Cloud gateway 网关服务 一

Spring Cloud gateway 网关服务二 断言、过滤器

Spring Cloud gateway 三 自定义过滤器GatewayFilter

Spring Cloud gateway 网关四 动态路由

Spring Cloud gateway 五 Sentinel整合

Spring Cloud gateway 六 Sentinel nacos存储动态刷新

Spring Cloud gateway 七 Sentinel 注解方式使用

如何喜欢可以关注分享本公众号。 file

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。转载请附带公众号二维码

© 著作权归作者所有

简单自由
粉丝 0
博文 19
码字总数 31342
作品 0
朝阳
私信 提问
加载中

评论(0)

Spring Cloud全家桶主要组件及简要介绍

一、微服务简介 微服务是最近的一两年的时间里是很火的一个概念。感觉不学习一下都快跟不上时代的步伐了,下边做一下简单的总结和介绍。 何为微服务?简而言之,微服务架构风格这种开发方法,...

小致Daddy
2019/06/04
340
0
Spring Cloud Ribbon 源码分析

一.前言 我们在前面两篇文章分析了Spring Cloud Eureka 注册中心和客户端的源码,在注册中心会有很多同应用名的实例组成集群供客户端调用,这时我们就需要负载策略来实现如何请求服务.这时我们...

JackieRiver
2018/08/25
330
0
热门技术从零开始学Spring Cloud视频教程发布

使用技术 (1)spring boot,使用版本:1.5.8 (2)spring cloud ,使用版本:Dalston.SR4 (3)Netflix Eureka (4)Netflix Ribbon (5)Feign (6)Netflix Hystrix (7)Spring Clou Con...

小红牛
2018/08/04
0
0
微服务开发架构——Spring Cloud常见问题与总结Spring Cloud 各组件配置属性

个人GitHub地址:https://github.com/leebingbin/ 在使用Spring Cloud的过程中,难免会遇到一些问题。所以对Spring Cloud的常用问题做一些总结。 关于“Eureka常见问题”可以参考,我之前的文...

Mr_ET
2017/11/02
178
0
Spring Cloud Netflix架构浅析

最近接触微服务这块的东西,对这方面有了一些了解,拿出来和大家分享一下。 微服务框架Spring Boot+Spring Cloud Spring Cloud是基于Spring Boot的一整套实现微服务的框架,可以说,Spring ...

海岸线的曙光
2017/12/20
946
0

没有更多内容

加载失败,请刷新页面

加载更多

Java BigDecimal 如何去掉末尾多余的 0

Java BigDecimal 如何去掉末尾多余的 0 呢? /** * To StripTrailingZeros */ @Test public void bigDecimalStripTrailingZerosTest() { BigDecimal bi......

honeymoose
今天
43
0
齐齐哈尔哪里可以开发票-中国新闻网

齐齐哈尔哪里可以开发票【1.3.2 - 2.9.3.0 - 0.5.6.8.】李生,adb的全称为Android Debug Bridge,是Android手机通用的一个USB端口。百度CarLife的部分车机采用了该...

8315581
今天
79
0
衡水哪里可以开发票-中国新闻网

衡水哪里可以开发票【1.3.2 - 2.9.3.0 - 0.5.6.8.】李生,adb的全称为Android Debug Bridge,是Android手机通用的一个USB端口。百度CarLife的部分车机采用了该种连...

457192
今天
60
0
张家口哪里可以开发票-中国新闻网

张家口哪里可以开发票【1.3.2 - 2.9.3.0 - 0.5.6.8.】李生,adb的全称为Android Debug Bridge,是Android手机通用的一个USB端口。百度CarLife的部分车机采用了该种...

253878
今天
66
0
黑龙江哪里可以开发票-中国新闻网

黑龙江哪里可以开发票【1.3.2 - 2.9.3.0 - 0.5.6.8.】李生,adb的全称为Android Debug Bridge,是Android手机通用的一个USB端口。百度CarLife的部分车机采用了该种...

富大范
今天
39
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部