Spring Cloud学习笔记【负载均衡-Ribbon】

文章目录

  • 什么是Spring Cloud Ribbon
  • LB(负载均衡)是什么
    • Ribbon本地负载均衡客户端 VS Nginx服务端负载均衡区别?
  • Ribbon架构工作流程
  • Ribbon Demo搭建
    • IRule规则
    • Ribbon负载均衡轮询算法的原理
    • 配置自定义IRule
      • 新建MyRuleConfig配置类
      • 启动类添加@RibbonClient![在这里插入图片描述](https://img-blog.csdnimg.cn/84677063b6c6433fb78e75c2323f1375.png)
      • 测试
  • Ribbon饥饿加载

什么是Spring Cloud Ribbon

Spring Cloud Ribbon是一个基于Netflix Ribbon的客户端负载均衡器,它是Spring Cloud生态系统中的一部分,用于帮助开发人员构建具有高可用性和弹性的分布式系统。

Ribbon能够将负载分配到多个服务实例之间,以提高应用程序的可用性和性能。在使用Ribbon时,开发人员可以定义可用服务实例的列表,并使用负载均衡算法从该列表中选择一个实例来处理客户端请求。此外,Ribbon还提供了一些其他功能,例如服务实例的健康检查和故障转移机制,以确保在服务实例故障时能够快速切换到其他可用实例。

Spring Cloud Ribbon还集成了Eureka服务发现组件,可以从Eureka注册中心获取可用的服务实例列表。这使得开发人员可以更容易地构建基于微服务的应用程序,并在应用程序中使用客户端负载均衡和服务发现功能。

LB(负载均衡)是什么

LB(负载均衡)是一种将客户端请求均匀地分配到多个服务器或计算机集群中的技术,以提高系统的性能、可用性和扩展性。在负载均衡系统中,负载均衡器接收客户端请求,并将请求转发到可用的服务器或计算机节点上,以平衡服务器的负载和提高系统的性能。

Ribbon本地负载均衡客户端 VS Nginx服务端负载均衡区别?

Ribbon本地负载均衡客户端和Nginx服务端负载均衡是两种不同的负载均衡技术,它们之间有以下区别:

1.位置不同:Ribbon本地负载均衡客户端运行在客户端,而Nginx服务端负载均衡运行在服务器端。

2.负载均衡策略不同:Ribbon本地负载均衡客户端采用客户端负载均衡策略,根据一定的负载均衡算法将客户端请求分配给不同的服务实例。Nginx服务端负载均衡采用服务器端负载均衡策略,将客户端请求先转发到Nginx服务器,再由Nginx服务器将请求分配给不同的后端服务器。

3.功能不同:Ribbon本地负载均衡客户端可以实现微服务架构下的服务发现、负载均衡和故障转移等功能,而Nginx服务端负载均衡可以实现反向代理、SSL终端、缓存等功能。

4.适用范围不同:Ribbon本地负载均衡客户端适用于Java应用程序和Spring Cloud微服务架构中的服务调用,而Nginx服务端负载均衡适用于任何应用程序,包括Web应用程序、数据库、DNS、邮件等服务。

Ribbon架构工作流程

Ribbon负载均衡架构的工作流程如下:

1.服务消费者向服务注册中心获取可用的服务列表。

2.服务消费者使用Ribbon客户端负载均衡器根据一定的负载均衡策略从可用的服务列表中选择一台服务实例。

3.服务消费者向所选的服务实例发起请求。

4.如果所选的服务实例发生故障,Ribbon客户端负载均衡器会自动切换到其他可用的服务实例,保证系统的可用性和稳定性。
在这里插入图片描述

Ribbon Demo搭建

IRule规则

在这里插入图片描述

内置负载均衡规则类规则描述
RoundRobinRule简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。
AvailabilityFilteringRule先过滤掉故障实例,再选择并发较小的实例
WeightedResponseTimeRule为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。
ZoneAvoidanceRule以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。
BestAvailableRule忽略那些短路的服务器,并选择并发数较低的服务器。
RandomRule随机选择一个可用的服务器。
RetryRule重试机制的选择逻辑

Ribbon负载均衡轮询算法的原理

Ribbon负载均衡的轮询算法原理如下:

客户端向服务端请求时,Ribbon先获取服务实例列表;
Ribbon维护一个计数器,每次请求将计数器加1;
Ribbon将请求按照轮询方式分发给服务实例列表中的每个实例,依次循环分配;
若某个服务实例因故障或网络原因无法提供服务,Ribbon会将该实例从服务列表中剔除;
如果服务实例列表中所有的实例都不可用,则返回错误信息。

配置自定义IRule

书接上回,继续在之前的demo上改造。
修改auth工程。
官方文档明确给出了警告:
这个自定义配置类不能放在@ComponentScan所扫描的当前包下以及子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,达不到特殊化定制的目的了。
所以我们需要和路径springcloud区分开
在这里插入图片描述

新建MyRuleConfig配置类

@Configuration
public class MyRuleConfig{
    @Bean
    public IRule myRule() {
        // 定义为随机
        return new RandomRule();
    }
}

启动类添加@RibbonClient在这里插入图片描述

@RibbonClient(name = "LF-USER", configuration = MyRuleConfig.class)

测试

在这里插入图片描述
访问成功,且多次调用,会发现每次的端口都是随机的。不再轮询

Ribbon饥饿加载

在Ribbon中,饥饿加载(eager-loading)是一种预加载机制,通过在应用启动时提前获取服务实例列表,以减少第一次请求的延迟时间。在默认情况下,Ribbon会在第一次请求到达时才会去获取服务实例列表,这样会造成第一次请求的延迟较高。为了解决这个问题,Ribbon提供了饥饿加载机制,可以在应用启动时预先获取服务实例列表,以加速第一次请求的响应时间。

通过在应用启动时启用饥饿加载,Ribbon会在服务注册中心中获取服务列表,并缓存到本地内存中。这样,当第一次请求到达时,Ribbon就可以直接从本地缓存中获取服务实例列表,而无需再去请求注册中心,从而减少第一次请求的延迟。

饥饿加载可以通过配置ribbon.eager-load.enabled来开启或关闭,默认值为false。如果设置为true,则启用饥饿加载机制,Ribbon会在应用启动时预先获取服务实例列表;如果设置为false,则禁用饥饿加载机制,Ribbon会在第一次请求到达时再去获取服务实例列表。
例如:

ribbon:
  eager-load:
    enabled: true

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQLMap 源码阅读

0x01 前言 还是代码功底太差,所以想尝试阅读 sqlmap 源码一下,并且自己用 golang 重构,到后面会进行 ysoserial 的改写;以及 xray 的重构,当然那个应该会很多参考 cel-go 项目 0x02 环境准备 sqlmap 的项目地址&…

学习java——②面向对象的三大特征

目录 面向对象的三大基本特征 封装 封装demo 继承 继承demo 多态 面向对象的三大基本特征 我们说面向对象的开发范式,其实是对现实世界的理解和抽象的方法,那么,具体如何将现实世界抽象成代码呢?这就需要运用到面向对象的三大…

从ChatGPT与New Bing看程序员为什么要学习算法?

文章目录为什么要学习数据结构和算法?ChatGPT与NEW Bing 的回答想要通关大厂面试,就不能让数据结构和算法拖了后腿业务开发工程师,你真的愿意做一辈子CRUD boy吗?对编程还有追求?不想被行业淘汰?那就不要只…

2023年网络安全比赛--CMS网站渗透中职组(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 1.使用渗透机对服务器信息收集,并将服务器中网站服务端口号作为flag提交; 2.使用渗透机对服务器信息收集,将网站的名称作为flag提交; 3.使用渗透机对服务器渗透,将可渗透页面的名称作为flag提交; 4.使用渗透机对服务器渗透,…

一个Bug让人类科技倒退几十年?

大家好,我是良许。 前几天在直播的时候,问了直播间的小伙伴有没人知道「千年虫」这种神奇的「生物」的,居然没有一人能够答得上来的。 所以,今天就跟大家科普一下这个人类历史上最大的 Bug 。 1. 全世界的恐慌 一个Bug会让人类…

jQuery《一篇搞定》

今日内容 一、JQuery 零、 复习昨日 1 写出至少15个标签 2 写出至少7个css属性font-size,color,font-familytext-algin,background-color,background-image,background-sizewidth,heighttop,bottom ,left ,rightpositionfloatbordermarginpadding 3 写出input标签的type的不…

flex布局左边宽度固定,右边宽度动态扩展问题

我们希望在一个固定宽度的容器中&#xff0c;分左右两边&#xff0c;左边宽度固定大小&#xff0c;右边占满&#xff0c;使用flex布局时&#xff0c;如下&#xff1a; 对应代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta…

LeetCode - 198 打家劫舍

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 题目描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装…

【华为机试真题 Python实现】2023年1、2月高频机试题

文章目录2023年1季度最新机试题机考注意事项1. 建议提前刷题2. 关于考试设备3. 关于语言环境3.1. 编译器信息3.2. ACM 模式使用sys使用input&#xff08;推荐&#xff09;3. 关于题目分值及得分计算方式4. 关于做题流程5. 关于作弊2023年1季度最新机试题 两个专栏现在有200博文…

2023还有人不知道kubernetes?| 初步理解kubernetes

文章目录Kubernetes(K8s)一、Openstack&VM1、**认识虚拟化****1.1**、什么是虚拟化**1.2、虚拟化分类**2、OpenStack与KVM、VMWare2.1、OpenStack2.2、KVM2.3、VMWare二、容器&编排技术1、容器发展史1.1、Chroot1.2、FreeBSD Jails1.3、Solaris Zones1.4、LXC1.5、Dock…

深度学习 Day26——使用Pytorch实现猴痘病识别

深度学习 Day26——使用Pytorch实现猴痘病识别 文章目录深度学习 Day26——使用Pytorch实现猴痘病识别一、前言二、我的环境三、前期工作1、设置GPU导入依赖项2、导入猴痘病数据集3、划分数据集四、构建CNN网络五、训练模型1、设置超参数2、编写训练函数3、编写测试函数4、正式…

【LeetCode】1544. 整理字符串、LCP 44. 开幕式焰火

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 目录 1544. 整理字符串 LCP 44. 开幕式焰火 1544. 整理字符串 1544. 整理字符串 题目描述…

金三银四、金九银十 面试宝典 Spring、MyBatis、SpringMVC面试题 超级无敌全的面试题汇总(超万字的面试题,让你的SSM框架无可挑剔)

Spring、MyBatis、SpringMVC 框架 - 面试宝典 又到了 金三银四、金九银十 的时候了&#xff0c;是时候收藏一波面试题了&#xff0c;面试题可以不学&#xff0c;但不能没有&#xff01;&#x1f941;&#x1f941;&#x1f941; 一个合格的 计算机打工人 &#xff0c;收藏夹里…

正则表达式高阶技巧之匹配模式(使用python实现)

匹配模式介绍不区分大小写模式模式的指定方式应用单行模式多行模式注释模式其它模式修饰符的作用范围介绍 我们在正则中所说得匹配模式&#xff08;match mode&#xff09;&#xff0c;指的是匹配时使用的规则。设置特定的匹配模式&#xff0c;可能会改变对正则表达式的识别&a…

业内人士真心话,软件测试是没有前途的,我慌了......

我在测试行业爬模滚打7年&#xff0c;从点点点的功能测试到现在成为高级测试&#xff0c;工资也翻了几倍。个人觉得&#xff0c;测试的前景并不差&#xff0c;只要自己肯努力。 我刚出来的时候是在鹅厂做外包的功能测试&#xff0c;天天点点点&#xff0c;很悠闲&#xff0c;点…

Spark SQL支持DataFrame操作的数据源

DataFrame提供统一接口加载和保存数据源中的数据&#xff0c;包括&#xff1a;结构化数据、Parquet文件、JSON文件、Hive表&#xff0c;以及通过JDBC连接外部数据源。一个DataFrame可以作为普通的RDD操作&#xff0c;也可以通过&#xff08;registerTempTable&#xff09;注册成…

嵌入式安防监控项目——实现真实数据的上传

目录 一、相关驱动开发 二、A9主框架 三、脚本及数据上传实验 https://www.yuque.com/uh1h8r/dqrma0/tx0fq08mw1ar1sor?singleDoc# 《常见问题》 上个笔记的相关问题 一、相关驱动开发 /* mpu6050六轴传感器 */ i2c138B0000 { /* #address-cells <1>…

web实现太极八卦图、旋转动画、定位、角度、坐标、html、css、JavaScript、animation

文章目录前言1、html部分2、css部分3、JavaScript部分4、微信小程序演示前言 哈哈 1、html部分 <div class"great_ultimate_eight_diagrams_box"><div class"eight_diagrams_box"><div class"eight_diagrams"><div class&…

SpringBoot-实用开发篇

SpringBoot开发实用篇开发实用篇中因为牵扯到SpringBoot整合各种各样的技术&#xff0c;所以在整合每一个技术之前&#xff0c;都会做一个快速的普及&#xff0c;这样的话内容整个开发实用篇所包含的内容就会比较多。在学习的时候&#xff0c;如果对某一个技术不是很清楚&#…

硬刚ChatGPT!文心一言能否为百度止颓?中国版ChatGPT“狂飙”的机会在哪儿?

文章目录目录产品背景发展历程科技简介主要功能合作伙伴结语文心一言 &#xff08;英文名&#xff1a;ERNIE Bot&#xff09; *是百度基于文心大模型技术推出的生成式对话产品&#xff0c;被外界誉为“中国版ChatGPT”&#xff0c;将于2023年3月份面向公众开放。 [40] 百度在人…