Spring Cloud Ribbon 组件介绍

ribbon 组件

Spring Cloud Ribbon 组件介绍_第1张图片

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

IClientConfig 读取配置

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

IRule 负载均衡算法

常用的权重、随机、随机权重、hash等负载均衡算法都能找到。也可以根据自己的实际的业务场景进行自定义的负载均衡算法。Spring Cloud Ribbon 组件介绍_第2张图片

IPing 筛选ping不通的实例

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

Serverlist Ribbon的实例列表

这个接口 有俩个方法

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

file

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

file

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

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

public class ServerListSubsetFilter extends ZoneAffinityServerListFilter implements IClientConfigAware, Comparator {
····
····
 public List getFilteredListOfServers(List servers) {
        List zoneAffinityFiltered = super.getFilteredListOfServers(servers);
        Set candidates = Sets.newHashSet(zoneAffinityFiltered);
        Set 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

配置方式

Spring Cloud Ribbon 组件介绍_第3张图片

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

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

NFLoadBalancerClassName: ILoadBalancerNFLoadBalancerRuleClassName: IRuleNFLoadBalancerPingClassName: IPingNIWSServerListClassName: ServerListNIWSServerListFilterClassName 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 注解方式使用

如何喜欢可以关注分享本公众号。Spring Cloud Ribbon 组件介绍_第4张图片

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

你可能感兴趣的:(spring,spring,boot,spring,cloud)