SpringCloud(3) Ribbon负载均衡,负载均衡策略,自定义负载均衡

news2024/9/22 21:28:14

目录

    • 1.Ribbon负载均衡流程
    • 2.Ribbon负载均衡策略
    • 3.自定义负载均衡策略如何实现
    • 4.总结

1.Ribbon负载均衡流程

假设我们有一台 order-service 订单服务,两台 user-service 用户服务,当订单服务需要调用用户服务获取用户信息的时候,应该怎么分配调用哪台服务呢?

在这里插入图片描述

这时候就需要用到 Ribbon 组件了。

在这里插入图片描述

首先,我们发起远程调用的时候,指定的是需要调用的服务名称,然后我们会调用 Ribbon 组件,Ribbon 会从注册中心中拉取 user-service 服务的信息,其中就包括这两台 user-service 服务的所在地址,这时候 order-service 就获取到 user-service 服务所在的两个地址了。

那么这两个地址我们怎么选择其中一个地址进行调用呢?这时候就由 Ribbon 决定到底选择哪一台服务器进行调用,它选用的策略是轮询。比如:找到的第一个服务器是8081,那么 order-service 最终进行调用的就是 8081 的 user-service 服务。

当然,轮询只是 Ribbon 中的其中一种负载均衡策略,那么其他还有哪些负载均衡策略呢?

2.Ribbon负载均衡策略

Ribbon 中一共封装了 7 种负载均衡策略,

1)RoundRobinRule:简单轮询服务列表来选择服务器。

就是按照一定的顺序去调用服务的实例。比如我们刚才有 8081 和 8082 的两个 user-service 实例,假如第一次调用 8081,那么第二次就会调用 8082 了,以此类推。

2)WeightedResponseTimeRule:按照权重来选择服务器,响应时间越长,权重越小。

其中的 ResponseTime 就是指响应时间,意思是说响应时间越长,权重就越小,被选择的概率就越低。

3)RandomRule:随机选择一个可用的服务器。

这个比较简单,就是单纯的随机。

4)BestAvailableRule:忽略那些短路的服务器,并选择并发数较低的服务器。

最小连接数策略。举个例子,比如我们还是有两台服务器,第一台的连接数是100,第二台是50,那这时候就会选择50的连接数对应的服务器进行连接,这就是指并发数较低的服务器,也可以理解成是选择一个空闲比较多的服务器进行连接。

5)RetryRule:重试机制的选择逻辑。

首先,还是会按照轮询的方式选择服务,然后进行远程调用。但是,假如某些服务实例为null,或者某些服务实例已经宕机失效了,它就会按照指定的时间进行不断地重试,来去获取这个服务,这个就是重试机制的选择逻辑。

6)AvailabilityFilteringRule:可用性敏感策略,先过滤非健康的,再选择连接数较小的实例。

比如说我们有三台服务器,如果第一台服务器已经宕机了,很显然就不选择第一台服务器了,然后再从第二、三台服务器中选择连接数比较小的实例,比如第二台服务器的连接数是100,第三台服务器的连接数是50,那么很显然就要去选择第三台服务器。

7)ZoneAvoidanceRule:默认策略,以区域可用的服务器为基础进行服务器的选择。使用 Zone 对服务器进行分类,这个 Zone 可以理解为一个机房、一个机架等。而后再对 Zone 内的多个服务做轮询。

意思是说,服务很多的时候,就会存在很多机房,比如一个在上海,一个在北京。假如服务的调用方也在北京,那么就会优先选择北京的机房服务器进行连接,就近原则。一般情况下,比如说我们没有区域的概念,那么这时候还是会根据轮询的方式来完成调用。

以上就是 Ribbon 最常见的七种负载均衡策略,标红的是面试的时候最好能给面试官陈述出来的部分。

3.自定义负载均衡策略如何实现

我们可以自己创建类实现 IRule 接口,然后再通过配置类或配置文件配置即可,通过定义 IRule 实现可以修改负载均衡规则,有两种方式。

假如我们有一个 order-service 订单服务调用 user-service 用户服务,用户服务有 8081 和 8082 两个节点。

在这里插入图片描述

现在我们想实现自定义的负载均衡策略,我们都是在服务的发起方 order-service 进行配置的。

第一种方法: 我们可以加一个配置类,在配置类中设置一个返回值 IRule,我们可以直接将七种负载均衡策略中的其中一种进行返回。

在这里插入图片描述

第二种方式: 我们可以在 yaml 文件中进行配置。

在这里插入图片描述

user-service:
  ribbon:
    NFLoadBalanceRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则

这两种配置方式有什么不同?

在这里插入图片描述

  • 第一种通过配置类自定义注入 Bean 的方式,是全局生效的。

    意思是只要是 order-service 服务采用 Ribbon 进行的负载均衡调用都是使用的自定义负载均衡策略。

  • 第二种通过 yaml 配置的方式,是局部生效的。

    意思是在 order-service 服务采用 Ribbon 进行负载均衡的时候,只有请求 user-service 服务的请求是使用的自定义负载均衡策略。

4.总结

1)项目负载均衡如何实现?

微服务的负载均衡主要使用了一个组件 Ribbon,比如,我们在使用 feign 远程调用的过程中,底层的负载均衡就是使用了 Ribbon。

2)Ribbon负载均衡有哪些?

  • RoundRobinRule:简单轮询服务列表来选择服务器。
  • WeightedResponseTimeRule:按照权重来选择服务器,响应时间越长,权重越小。
  • RandomRule:随机选择一个可用的服务器。
  • ZoneAvoidanceRule:默认,区域敏感策略,以区域可用的服务器为基础进行服务器的选择。使用 Zone 对服务器进行分类,这个 Zone 可以理解为一个机房、一个机架等。而后再对 Zone 内的多个服务做轮询。

3)自定义负载均衡策略如何实现?

提供了两种方式:

① 创建类实现 IRule 接口,可以指定负载均衡策略(全局生效)。

② 在客户端的 yaml 配置文件中,可以配置某一个服务调用的负载均衡策略(局部生效)。

整理完毕,完结撒花~ 🌻

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

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

相关文章

Windows下mysql 8.0.11 安装教程

http://www.jb51.net/article/140950.htm :此文章注意my.ini的扩展名 MySQL安装参考:mysql-8.0.11-winx64.zip在Windows中的安装配置-百度经验 MySQL卸载:https://blog.csdn.net/cxy_summer/article/details/70142322 下载最新的MySQL 1、…

经商必看的10本书籍推荐

1、《经理人参阅:商业模式与商业思维》 这本书被誉为商业模式的圣经。该书通过可视化工具,包括商业模式画布和价值主张画布,帮助企业家、创业者和经理人创造创新的商业模式。本书通过图表、图像和实例,详细讲解了商业模式的构建方…

智慧饮品未来发展方向:点赋科技AI智能饮品机器人的崛起

随着人们对健康饮品的追求和科技的不断创新,智慧饮品正在迅速崛起并成为未来饮品市场的热点。其中,AI智能饮品机器人作为一种创新的服务形式,将在未来发展中扮演重要角色。点赋科技将探讨智慧饮品市场的未来发展方向以及AI智能饮品机器人的潜…

URL(URI) 中的编码与乱码(下)--查询字符串(query string)中的编码

在上篇中, 初步谈论了 URL 中含有中文字符时的转义编码, 提到了所使用的编码是 utf-8. 不过你可能会有点疑问, 一定都是要用 utf-8 编码吗? 还是因为页面编码本身是 utf-8 的缘故呢? 毕竟在那个例子中, 页面的编码也恰好是 utf-8. 在 GBK 编码页面下的 URL 转义 这次, 将继…

Linux10.地址空间

1.几乎所有的语言,如果它有地址的概念,这个地址一定不是物理地址,是虚拟地址(线性地址)。 2.诸如网卡,硬盘和显卡等外设内部也具有寄存器。 3.在makefile中,gcc -o 文件A 文件1 文件2(…)可以写成 :gcc -o $ $^ 4.地…

程序员常用的几个效率小工具,可好用了!

目录 🖥️ Hexed.it 🖼️ Carbon 🖼️ Draw.net 今天给大家推荐几个平时工作学习中常用到的小工具,让你效率拉满! 🖥️ Hexed.it 在线地址:HexEd.it - Browser-based Online and Offline He…

增强深度学习与对抗训练对癫痫发作的鲁棒预测

标题:Augmenting Deep Learning with Adversarial Training for Robust Prediction of Epilepsy Seizures Abstract: 癫痫是一种慢性疾病,涉及异常的大脑活动,导致患者失去对意识或运动活动的控制。因此,在癫痫发作之前检测出癫…

Learn Mongodb DB数据库部署 ②

作者 : SYFStrive 博客首页 : HomePage 📜: PHP MYSQL 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &#x1f44…

类加载的时机

类加载的时机 类的生命周期 类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括以下 7 个阶段: 加载 验证 准备 解析 初始化 使用 卸载 验证、准备、解析 3 个阶段统称为连接。 加载、验证、准备、初始化和卸载这 5 个阶段的…

【MATLAB第49期】基于MATLAB的深度学习ResNet-18网络不平衡图像数据分类识别模型

【MATLAB第49期】基于MATLAB的深度学习ResNet-18网络不平衡图像数据分类识别模型 一、基本介绍 这篇文章展示了如何使用不平衡训练数据集对图像进行分类,其中每个类的图像数量在类之间不同。两种最流行的解决方案是down-sampling降采样和over-sampling过采样。 在…

力扣 -- 64.最小路径和

题目链接&#xff1a;64. 最小路径和 - 力扣&#xff08;LeetCode&#xff09; 下面是用动态规划的思想解决这道题的过程&#xff0c;相信各位小伙伴都能看懂并且掌握这道经典的动规题目的。 参考代码&#xff1a; class Solution { public:int minPathSum(vector<vector…

filezilla 刷新文件

ubuntu上的filezilla一直右键找不到文件刷新的选项&#xff0c;今天终于找到了 点击那个循环利用的按钮&#xff0c;就是刷新文件和文件夹&#xff0c;这个和mac上的操作有点不一致&#xff0c;很奇怪哈

PHP --- 基础(01)

简单介绍 &#xff08;1&#xff09;PHP基本语法操作 <?php $iphone13 5880; // 变量首字母不能是数字&#xff0c;同时变量区分大小写 $iphone12 5000; // 变量名尽量有意义 $shen $iphone13 $iphone12 echo $shen; // echo是在php中常用的输出、显示功能的命令 ?&…

使用 arpl 在 PVE 上安装黑群晖

arpl 是 GitHub 上开源的自动装载程序&#xff0c;能够实现使用 arpl 在物理机或虚拟机中安装黑群晖 1. 下载 arpl 在 GitHub 项目 fbelavenuto/arpl 的 Releases 中选择下载最新版本&#xff0c;选择 img.zip 后缀的文件进行下载 解压后可以得到一个名为 arpl.img 的文件&am…

一.《泽诺尼亚》背包物品数据分析和遍历

寻找突破口 1.首先寻找突破口,围绕一个“变”字去找 2.之前在别的课程中也给同学们说过,我们在找背包物品遍历,无非就是要先拿到物品对象 3.然而要拿到物品对象,必须先拿到物品属性,然后逆向分析拿到物品对象 4.那么问题来了, 怎么拿到物品属性呢&#xff1f; 5.这时候就要…

Fiddler如何进行弱网测试

目录 前言 1、Fiddler设置 2、手机设置 3.设置模拟调制解调器的速度&#xff1a; 4.设置手机代理 前言 使用Fiddler对手机App应用进行抓包&#xff0c;可以对App接口进行测试&#xff0c;也可以了解App传输中流量使用及请求响应情况&#xff0c;从而测试数据传输过程中流量…

上海师范大学Windows端VPN使用教程及课表查询方法

1、首先强调&#xff1a;学生电子邮件和 VPN 服务须在修改初始密码之后才能登录使用。 2、其次&#xff1a; 学校已为每位新生开通了统一身份认证账号&#xff08; CUID &#xff09;&#xff08;如&#xff1a;1000101010, 详见录取 通知书上的 CUID&#xff09; 。 初始密码…

protobuf的Proto3语法学习 (二)

文章目录 五、proto3语法详解1. 字段规则2. 消息类型的定义与使⽤2.1 定义2.2 使⽤2.3 创建通讯录2.0版本2.3.1 通讯录2.0的写⼊实现2.3.2 通讯录2.0的读取实现2.3.3 验证写入是否正确 3. enum类型3.1 定义规则3.2 定义enum类型的注意事项3.3 升级通讯录⾄2.1版本 4. Any类型4.…

【SpringBoot】基于SSM框架的题库系统的设计与实现

文章结构 课题&#xff1a;一、项目简介主要功能技术选型 二、 模块介绍学生端教师端(一)考试管理(二)试题管理(三)学生成绩管理 管理员三、 B站项目演示地址 四、本项目其余相关博客 课题&#xff1a; 题库系统的设计与实现一、项目简介 简介&#xff1a;主要分为三个端&…

总结下 89C52 单片机中 Timer 2 作为定时器(工作在16位自动重装方式)的使用方法

从应用角度来学习&#xff0c;一切从效率&#xff08;益&#xff09;出发。 计数功能是指使用计数器的计数脉冲输入端&#xff08;T0对应P3.4&#xff0c;T1对应P3.5&#xff0c;T2对应P1.0&#xff09;对外部脉冲信号的计数&#xff1b;定时功能是指对内部晶振驱动时钟进行计…