Ribbon知识点

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.mzph.cn/news/763911.shtml

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

相关文章

灵神DP题单---划分型 DP---§6.1 判定能否划分

这里的状态定义一般使用DP【i】 表示 考虑前i个东西能否满足条件,然后我们枚举上一次的转移位置就好了 2369. 检查数组是否存在有效划分 需要注意的是我习惯从1开始写,所以要处理好边界的下标问题 class Solution { public:bool validPartition(vector&l…

LeetCode刷题记录——day4

https://leetcode.cn/problems/trapping-rain-water/description/?envTypestudy-plan-v2&envIdtop-interview-150 对于一个可以构成“碗”的序列,最后装满水的话应该和最短的一边齐平,那么可以左右各遍历一次,记录每个元素位置对应的最短…

最大中位数(c++题解)

题目描述 题目描述 给定一个由 个整数组成的数组 ,其中 为奇数。 你可以对其进行以下操作: 选择数组中的一个元素(例如 ),将其增加 (即,将其替换为 )。 你最多可以进行 次操…

java网络原理(三)----三次握手四次挥手

三次握手 三次握手是建立连接的过程,四次挥手是断开连接的过程,三次握手发生在socket.accept()之前。 客户端和服务器尝试建立连接的时候服务器就会和客户端进行一系列的数据交换称为握手,这个过程建立完了后,连接就好了。 A和B…

Matlab有限差分法求解狄利克雷(Dirichlet)边界的泊松(Poisson)问题,边界值为任意值

参考l链接: 有限差分法简介有限差分法-二维泊松方程及其Matlab程序实现弹性力学方程 有限差分法matlab,泊松方程的有限差分法的MATLAB实现 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% Matrix method for Poisson Equation …

基于python+vue的OA公文发文管理系统flask-django-php-nodejs

系统根据现有的管理模块进行开发和扩展,采用面向对象的开发的思想和结构化的开发方法对OA公文发文管理的现状进行系统调查。采用结构化的分析设计,该方法要求结合一定的图表,在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的…

使用 Amazon SageMaker 微调 Llama 2 模型

本篇文章主要介绍如何使用 Amazon SageMaker 进行 Llama 2 模型微调的示例。 这个示例主要包括: Llama 2 总体介绍Llama 2 微调介绍Llama 2 环境设置Llama 2 微调训练 前言 随着生成式 AI 的热度逐渐升高,国内外各种基座大语言竞相出炉,在其基础上衍生出…

部署es集群

我们会在单机上利用docker容器运行多个es实例来模拟es集群。不过生产环境推荐大家每一台服务节点仅部署一个es的实例。 部署es集群可以直接使用docker-compose来完成,但这要求你的Linux虚拟机至少有4G的内存空间 创建es集群 首先编写一个docker-compose文件,内容如下: v…

nginx有哪些功能

Nginx拥有丰富且强大的功能,主要包括但不限于以下几点: Web服务器: 提供HTTP服务,能够高效地分发静态内容,如HTML、CSS、JavaScript、图片、视频等。支持HTTP/2、WebSocket等多种协议。可以设置防盗链、缓存控制、重写…

掌握ChatGPT:如何用AI撰写高质量论文

ChatGPT无限次数:点击直达 掌握ChatGPT:如何用AI撰写高质量论文 在当今信息爆炸的时代,人们不仅需要大量信息,还需要这些信息的整理与创新。人工智能技术正是我们在这个信息化时代最强大的助手之一。ChatGPT是一款基于大型神经网络的语言生成…

测试开发工程师(QA)职业到底需要干些什么?part1:移动端QA

概述 移动端QA测试开发工作主要涉及对移动应用程序进行质量保证和测试的开发工作。以下是移动端QA测试开发人员的主要职责和工作内容: 测试计划和策略制定:参与制定移动应用程序的测试计划和策略,确定测试范围、测试目标和测试方法。考虑到…

Mysql---DML

文章目录 目录 一.DML概述 注入数据( Insert) 替换数据(replace) 删除数据 (delete) 修改数据 (update) 查询数据 (select) 二. 多表连接查询 内连接 子…

第十四节 JDBC批量处理

批量处理允许将相关的SQL语句分组到批处理中,并通过对数据库的一次调用来提交它们,一次执行完成与数据库之间的交互。 一次向数据库发送多个SQL语句时,可以减少通信开销,从而提高性能。 不需要JDBC驱动程序来支持此功能。应该使…

5.1.4.4【AI技术新纪元:Spring AI解码】Titan Chat

Amazon Titan 基础模型 亚马逊Titan基础模型(FMs)通过完全托管的API,为客户提供了广泛的高性能图像、多模态嵌入和文本模型选择。Amazon Titan模型由AWS创建,预训练在大型数据集上,使其成为强大的通用模型,支持多种用例,同时也支持AI的负责任使用。用户可以按原样使用,…

Linux环境JMeter脚本性能测试、easyNmon生成监控报告

一、下载JMeter安装包 Jmeter是Java开发的,需要依赖JDK环境,因此我们需提前安装好JDK。 Jmeter是开源的工具,我们直接到官网下载即可。 最新版本下载地址:Apache JMeter - Download Apache JMeter 二、安装JMeter #新建jmete…

【GIT】最好用的git可视化教程网站推荐

最好用可视化学习git 网站:https://learngitbranching.js.org/?demo&localezh_CN 玩遍所有关卡&#xff0c;花半天时间便能掌握git &#x1f603; 本地仓库 基础命令介绍 git commit 提交 git branch <分支名> 创建分支 git checkout <分支名> 切换分支 git…

鸿蒙Harmony应用开发—ArkTS(@State装饰器:组件内状态)

State装饰的变量&#xff0c;或称为状态变量&#xff0c;一旦变量拥有了状态属性&#xff0c;就和自定义组件的渲染绑定起来。当状态改变时&#xff0c;UI会发生对应的渲染改变。 在状态变量相关装饰器中&#xff0c;State是最基础的&#xff0c;使变量拥有状态属性的装饰器&a…

【C++ leetcode】双指针问题

1. 611. 有效三角形的个数 题目 给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 题目链接 . - 力扣&#xff08;LeetCode&#xff09; 画图 和 文字 分析 判断是否是三角形要得到三边&#xff0c;由于遍历三边要套三层循环&#x…

苍穹外卖Day3碰到的元注解

1. Target Target注解用于指定自定义注解可以应用的Java元素范围。它的参数是ElementType的枚举值&#xff0c;可以指定一个或多个范围。使用Target可以限制注解只能用于特定的程序元素&#xff0c;如类、方法、字段等。 import java.lang.annotation.ElementType; import ja…

文兴业:从内蒙古小镇到全球金融巨擘的不凡旅程

文兴业的传奇人生&#xff0c;如同一部跨越时间和地域的史诗&#xff0c;描绘了一个内蒙古小镇男孩如何凭借自己的智慧、勤奋和不屈不挠的精神&#xff0c;在全球商界创造了辉煌成就的故事。这个故事不仅仅是关于个人的成功&#xff0c;更是关于如何通过教育和持续的自我提升&a…