Ribbon知识点

news2024/9/20 16:12:47

1、通过类实现重写Ribbon规则

1.1注意

这个类一定不能跟启动类放在同一个包下面,不能被@componentScan给扫描到。

需要如图放置:

要是被@componentScan给扫描到,则会被所有的服务提供方所共享,那么就不能实现指定服务用不同的Ribbon策略。所有的服务Ribbon策略都是一样的。

1.2编写配置类

方法名一定要叫iRule

1.3修改启动类

在启动类上使用 @RibbonClients注解

注意: name为需要实现此配置类的Ribbon策略的服务名。

如图配置了以后,则在order这个服务中调用stock-service服务,Ribbon策略就以RibbonRandomRuleConfig.class中重写的那样去执行。

2、通过配置文件实现

2.1通过Ribbon自身的策略实现

如图所示,stock-service为需要调用的服务名,com.alibaba.xxxx就是Ribbon自身自带的策略。

2.2通过实现AbstractLoadBalancerRule

这个不过多叙述,根据自己的情况去实现。

3、Ribbon策略合集

IRule 这是所有负载均衡策略的父接口,里边的核心方法就是choose方法,用来选择一个服务实例。

AbstractLoadBalancerRule AbstractLoadBalancerRule是一个抽象类,里边主要定义了一个ILoadBalancer,这里定义它的目的主要是辅助负责均衡策略选取合适的服务端实例。

3.1 RandomRule

看名字就知道,这种负载均衡策略就是随机选择一个服务实例,看源码我们知道,在RandomRule的无参构造方法中初始化了一个Random对象, 然后在它重写的choose方法又调用了choose(ILoadBalancer lb, Object key)这个重载的choose方法,在这个重载的choose方法中,每次利用 random对象生成一个不大于服务实例总数的随机数,并将该数作为下标所以获取一个服务实例。

3.2 RoundRobinRule

RoundRobinRule这种负载均衡策略叫做线性轮询负载均衡策略。这个类的choose(ILoadBalancer lb, Object key)函数整体逻辑是这样的:开启 一个计数器count,在while循环中遍历服务清单,获取清单之前先通过incrementAndGetModulo方法获取一个下标,这个下标是一个不断自增长 的数先加1然后和服务清单总数取模之后获取到的(所以这个下标从来不会越界),拿着下标再去服务清单列表中取服务,每次循环计数器都会加 1,如果连续10次都没有取到服务,则会报一个警告No available alive servers after 10 tries from load balancer: XXXX。

3.3 RetryRule

(在轮询的基础上进行重试) 看名字就知道这种负载均衡策略带有重试功能。首先RetryRule中又定义了一个subRule,它的实现类是RoundRobinRule,然后在RetryRule的 choose(ILoadBalancer lb, Object key)方法中,每次还是采用RoundRobinRule中的choose规则来选择一个服务实例,如果选到的实例正常就返 回,如果选择的服务实例为null或者已经失效,则在失效时间deadline之前不断的进行重试(重试时获取服务的策略还是RoundRobinRule中定义的 策略),如果超过了deadline还是没取到则会返回一个null。

3.4 WeightedResponseTimeRule

(权重 —nacos的NacosRule ,Nacos还扩展了一个自己的基于配置的权重扩展) WeightedResponseTimeRule是RoundRobinRule的一个子类,在WeightedResponseTimeRule中对RoundRobinRule的功能进行了扩展, WeightedResponseTimeRule中会根据每一个实例的运行情况来给计算出该实例的一个权重,然后在挑选实例的时候则根据权重进行挑选,这样能 够实现更优的实例调用。WeightedResponseTimeRule中有一个名叫DynamicServerWeightTask的定时任务,默认情况下每隔30秒会计算一次 各个服务实例的权重,权重的计算规则也很简单,如果一个服务的平均响应时间越短则权重越大,那么该服务实例被选中执行任务的概率也就越大。

3.5 ClientConfigEnabledRoundRobinRule

ClientConfigEnabledRoundRobinRule选择策略的实现很简单,内部定义了RoundRobinRule,choose方法还是采用了RoundRobinRule的 choose方法,所以它的选择策略和RoundRobinRule的选择策略一致,不赘述。

3.6 BestAvailableRule

BestAvailableRule继承自ClientConfigEnabledRoundRobinRule,它在ClientConfigEnabledRoundRobinRule的基础上主要增加了根据 loadBalancerStats中保存的服务实例的状态信息来过滤掉失效的服务实例的功能,然后顺便找出并发请求最小的服务实例来使用。然而 loadBalancerStats有可能为null,如果loadBalancerStats为null,则BestAvailableRule将采用它的父类即 ClientConfigEnabledRoundRobinRule的服务选取策略(线性轮询)。

3.7 ZoneAvoidanceRule 

默认规则,复合判断server所在区域的性能和server的可用性选择服务器。) ZoneAvoidanceRule是PredicateBasedRule的一个实现类,只不过这里多一个过滤条件,ZoneAvoidanceRule中的过滤条件是以 ZoneAvoidancePredicate为主过滤条件和以 AvailabilityPredicate为次过滤条件组成的一个叫做CompositePredicate的组合过滤条件,过滤成功之后,继续采用线性轮询 (RoundRobinRule)的方式从过滤结果中选择一个出来。

3.8 AvailabilityFilteringRule

(先过滤掉故障实例,再选择并发较小的实例)  过滤掉一直连接失败的被标记为circuit tripped的后端Server,并过滤掉那些高并发的后端Server或者使用一个AvailabilityPredicate来 包含过滤server的逻辑,其实就是检查status里记录的各个Server的运行状态

4、饥饿加载

负载均衡策略在第一次服务调用的时候才会去加载,所以第一次调用服务会稍微的慢一点,可以通过饥饿加载(程序启动的时候,自动初始化)来规避这个问题。

stock-service即是你希望立刻加载的服务名称。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1537319.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

权限提升-Windows权限提升篇溢出漏洞宝塔面板BypassCS插件化MSF模块化

知识点 1、Web到Win系统提权-权限差异原因 2、Web到Win系统提权-溢出漏洞(MSF&CS) 3、Web到Win系统提权-集成软件(哥斯拉模块Bypass) 章节点: 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移…

【Java Web基础】一些网页设计基础(四)

文章目录 1. 做Tab切换2. 下面的内容展示——Card样式3. 采供分类&#xff0c;分类用面包屑导航做4. 出名企业展示&#xff0c;就是普通的图片5. 用热门商品类似的panel做一个农博会展览 1. 做Tab切换 使用BootStrap提供的样式&#xff1a; <ul class"nav nav-tabs&q…

【Linux】系统开启和关闭过程

Linux 系统启动过程 BIOS 自检&#xff1a;在计算机开机时&#xff0c;BIOS 会进行自检&#xff0c;检查硬件设备是否正常。 加载引导程序&#xff1a;BIOS 自检完成后&#xff0c;会加载引导程序&#xff0c;如 GRUB、LILO 等。引导程序会加载内核和初始化 RAM 磁盘&#xff…

005——串口移植(基于鸿蒙liteos-a)

目录 一、 Liteos-a中串口的使用 1.1 内核里打印 1.2 APP控制台 ​编辑 1.2.1 /dev/console 1.2.2 /dev/serial 1.2.3 /dev/uartddev-0 1. 总体介绍 2. device_t 3. drvier_t 4. uartdev_fops 1.2.4 uart_ops 二、 鸿蒙串口内部的一些机制&#xff08;流水账&…

实用福利网站分享

1.http://www.w3school.com.cn w3school&#xff0c;很好的在线web学习网站&#xff0c;免费 2.https://sklearn.apachecn.org sklearn文档&#xff0c;虽然是文档&#xff0c;但能学到很多很多具体的机器学习例子和知识 3.http://www.runoob.com 菜鸟教程&#xff0c;也是…

GTC大会干货:8位大佬对Transformer起源和未来发展的探讨

在2024年的GTC大会上&#xff0c;黄仁勋特邀Transformer机器语言模型的七位创造者&#xff0c;共同探讨Transformer模型的过去、现在与未来。他们一致认为&#xff0c;尽管Transformer已经成为现代自然语言处理领域的基石&#xff0c;但这个世界仍然需要超越Transformer的新颖架…

使用远程工具连接Mysql

&#xff08;若想要远程连接Mysql需要下面解决四个问题&#xff09; 1、目标地址 直接查询 2、端口号 3306 3、防火墙关闭 [rootlocalhost date]# systemctl stop firewalld.service 4、授权mysql数据库root用户权限&#xff08;因为mysql开始不允许其他IP访问&#xff0…

Java 栈与队列

一、栈 在Java中&#xff0c;实现栈有两个方法&#xff1a; Java本身的集合类型Stack类型。Stack集合类型继承于Vector&#xff0c;由于Vector是通过数组实现的&#xff0c;所以Stack集合类型也是通过数组来实现的。借用LinkedList来间接实现栈。LinkedList是双向链表&#x…

【pcolor数据可视化】Matlab vs. Python

1、Matlab代码及结果 代码 clear;clc load(.\nclcolormap.mat)sl [0,50,100,200,500,0]; el [50,100,200,500,1000,200];for i 1:length(sl)file [..\data\static_result\VIS_Min-,num2str(sl(i)),to,num2str(el(i)),_yearly.npy];data readNPY(file);maskreadNPY(.\mas…

2024阿里云服务器99计划优惠活动_开年采购季优惠价格表

2024阿里云开年采购活动3月优惠&#xff0c;99计划云服务器99元一年、免费领取上云扶持优惠券&#xff0c;不只是云服务器、云数据库、存储、云电脑、域名等均有活动&#xff0c;阿里云服务器网aliyunfuwuqi.com整理阿里云开年采购上云无忧活动入口、优惠价格表和优惠券领取详细…

【Linux】信号的处理{信号处理的时机/了解寄存器/内核态与用户态/信号操作函数}

文章目录 0.对于信号捕捉的理解1.信号处理的时机1.1 何时处理信号&#xff1f;1.2 内核态和用户态1.3 内核态和用户态的切换 2.了解寄存器3.信号捕捉的原理4.信号操作函数4.1sighandler_t signal(int signum, sighandler_t handler);4.2int sigaction(int signum, const struct…

代码随想录算法训练营第三十一天 | 455. 分发饼干、376. 摆动序列、53. 最大子数组和

代码随想录算法训练营第三十一天 | 455. 分发饼干、376. 摆动序列、53. 最大子数组和 455. 分发饼干题目解法 376. 摆动序列题目解法 53. 最大子数组和题目解法 感悟 455. 分发饼干 题目 解法 class Solution { public:int findContentChildren(vector<int>& g, vec…

大模型时代,5个最顶级的向量数据库

介绍5个向量数据库。 大模型时代&#xff0c;向量数据库彻底的火了&#xff0c;今天我分享业内最频繁使用的向量数据库&#xff0c;更多实践经验&#xff0c;可以文末参加我们的技术落地的讨论&#xff0c;喜欢本文记得收藏、关注、点赞。 1 Chroma 使用ChromaDB构建LLM应用程…

D咖:颠覆传统,重塑无人自助饮品机新篇章

在当今的快节奏社会中&#xff0c;智能科技正在以前所未有的速度渗透到生活的各个方面&#xff0c;从智能手机到智能家居&#xff0c;它们不仅极大地提高了我们的生活效率&#xff0c;也在不断地改善和丰富我们的生活体验。而饮品行业&#xff0c;作为人们日常生活中不可或缺的…

TCP协议的粘包问题解决方式

粘包问题 首先说明一点&#xff0c;TCP有粘包问题&#xff0c;UDP没有粘包问题。 发送端可以是1KB地发送数据&#xff0c;而接收端的应用程序可以2KB地提走数据&#xff0c;当然也有可能一次提走3K或6K数据&#xff0c;或者一次只提走几个字节的数据&#xff0c;也就是说&…

VS Code 跳板机登录服务器(手打密码+秘钥登录)

目录 0.为什么要用跳班机登陆服务器&#xff1f; 1.VS Code插件安装及ssh安装 2.密码链接方式 1&#xff09;添加ssh设置&#xff0c;设置主机 2)设置跳板机 Tips:可以直接通过窗口连接文件管理 3.密钥连接方式&#xff08;更安全更方便&#xff09; 1&#xff09;mac版…

常见优化器对比:梯度下降法、带动量的梯度下降法、Adagrad、RMSProp、Adam

系列文章目录 李沐《动手学深度学习》线性神经网络 线性回归 李沐《动手学深度学习》优化算法&#xff08;相关概念、梯度下降法、牛顿法&#xff09; 李沐《动手学深度学习》优化算法&#xff08;经典优化算法&#xff09; 文章目录 系列文章目录一、梯度下降法&#xff08;一…

java 泛型(下)

本篇文章主要说明的是类型通配符、可变参数、可变参数的使用等。 在学习之前&#xff0c;希望能对泛型有个大概了解&#xff0c;可参考链接 java 泛型&#xff08;上&#xff09;-CSDN博客 也希望对泛型类、泛型接口、泛型方法有个大概的认识及使用&#xff0c;可参考链接 j…

Transformer学习【从零理解】

Transformer 一、整体框架 二、Encoder 1.输入部分: &#xff08;1&#xff09;Embedding&#xff1a;将输入的词转换为对应的词向量。 &#xff08;2&#xff09;位置编码&#xff1a;因为保证输出时&#xff0c;顺序不会打乱&#xff0c;所以要加入时序信息即位置编码。 公…

Linux:权限的概念与理解

目录 1. Linux权限的概念 2. Linux权限管理 01.文件访问者的分类 02.文件类型和访问权限 03.文件权限值的表示方法 04. 文件访问权限的相关设置方法 3. 使用 sudo分配权限 4. 目录的权限 ---------- 权限 用户角色(具体的人) 文件权限属性 ---------- 1. Linux权限的…