当前位置: 首页 > news >正文

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{@Beanpublic 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

相关文章:

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

文章目录什么是Spring Cloud RibbonLB(负载均衡)是什么Ribbon本地负载均衡客户端 VS Nginx服务端负载均衡区别?Ribbon架构工作流程Ribbon Demo搭建IRule规则Ribbon负载均衡轮询算法的原理配置自定义IRule新建MyRuleConfig配置类启动类添加Rib…...

第九章:C语言数据结构与算法初阶之堆

系列文章目录 文章目录系列文章目录前言一、堆的定义二、堆的实现三、堆的接口函数1、初始化2、销毁3、插入4、删除5、判空6、元素个数四、堆排序1、建堆2、排序五、堆的应用——TOPK1、什么是TOPK问题?2、解决方法总结前言 堆就是完全二叉树。 一、堆的定义 我们…...

Mysql架构初识

🥲 🥸 🤌 🫀 🫁 🥷 🐻‍❄️🦤 🪶 🦭 🪲 🪳 🪰 🪱 🪴 🫐 🫒 🫑…...

字符串函数和内存函数

🍕博客主页:️自信不孤单 🍬文章专栏:C语言 🍚代码仓库:破浪晓梦 🍭欢迎关注:欢迎大家点赞收藏关注 字符串函数和内存函数 文章目录字符串函数和内存函数前言1. 字符串函数介绍1.1 s…...

Web3中文|GPT-4超越GPT-3.5的五大看点

A Beautiful CinderellaDwelling EagerlyFinally Gains HappinessInspiring Jealous KinLove Magically Nurtures Opulent PrinceQuietly RescuesSlipper TriumphsUniting Very WondrouslyXenial Youth Zealously这是一段描述童话故事《灰姑娘》的内容,它出自GPT-4之…...

动态矢量瓦片缓存库方案

目录 前言 二、实现步骤 1.将数据写入postgis数据库 2.将矢量瓦片数据写入缓存库 3.瓦片接口实现 4.瓦片局部更新接口实现 总结 前言 矢量瓦片作为webgis目前最优秀的数据格式,其主要特点就是解决了大批量数据在前端渲染时出现加载缓慢、卡顿的问题&#xff0…...

628.三个数的最大乘积

给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。 示例 1: 输入:nums [1,2,3] 输出:6 示例 2: 输入:nums [1,2,3,4] 输出:24 示例 3: …...

【数据结构】堆和集合笔记

自己写一个堆首先,明确一下,为什么需要堆?>考虑插入,删除,查找的效率。数组,查找,最快是二分查找O(lgN)。但查找完如果要做什么操作,比如删除,就要挪动元素了。所以合…...

java LinkedList 源码分析(通俗易懂)

目录 一、前言 二、LinkedList类简介 三、LinkedList类的底层实现 四、LinkedList类的源码解读 1.add方法解读 : 〇准备工作 。 ①跳入无参构造。 ②跳入add方法。 ③跳入linkList方法。 ④增加第一个元素成功。 ⑤向链表中添加第二个元素。 2.remove方法解读 : 〇准备工…...

Vue中实现路由跳转的三种方式详细分解

vue中实现路由跳转的三种方式 目录 vue中实现路由跳转的三种方式 一、使用vue-router 1.下载vue-router模块到当前工程 2.在main.js中引入VueRouter函数 3.添加到Vue.use()身上 – 注册全局RouterLink和RouterView组件 4.创建路由规则数组 – 路径和组件名对应关系 5…...

全国自学考试03708《中国近现代史纲要》重点复习精要

1. 西方列强的殖民扩张和鸦片战争的影响。(两面性) :反面—破坏了了中国的小农经济,是中国由封建社会转变为两半社会。 --一系列不公平条约,破坏了中国主权领土完整。 --压迫中国人民,给中国人民带来了巨大…...

数据库面试题——锁

了解数据库的锁吗? 锁是数据库系统区别于文件系统的一个关键特性,锁机制用于管理对共享资源的并发访问。 InnoDB下两种标准行级锁: 共享锁(S Lock),允许事务读一行数据。 排他锁(X Lock&…...

Python笔记 -- 文件和异常

文章目录1、文件1.1、with关键字1.2、逐行读取1.3、写入模式1.4、多行写入2、异常2.1、try-except-else2.2、pass1、文件 1.1、with关键字 with关键字用于自动管理资源 使用with可以让python在合适的时候释放资源 python会将文本解读为字符串 # -*- encoding:utf-8 -*- # 如…...

蓝桥杯刷题冲刺 | 倒计时24天

作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.修剪灌木2.统计子矩阵1.修剪灌木 题目 链接: 修剪灌木 - 蓝桥云课 (lanqiao.cn) 找…...

真正理解微软Windows程序运行机制——什么是消息

我是荔园微风,作为一名在IT界整整25年的老兵,今天说说Windows程序的运行机制。经常被问到MFC到底是一个什么技术,为了解释这个我之前还写过帖子,但是很多人还是不理解。其实这没什么,我在学生时代也被这个问题困绕过。…...

HTTP 缓存的工作原理

缓存是解决http1.1当中的性能问题主要手段。缓存可能存在于客户端浏览器上,也可以存在服务器上面,当使用过期缓存可能给用户展示的是错误的信息而导致一些bug。 HTTP 缓存:为当前请求复用前请求的响应 • 目标:减少时延&#xff1…...

RK3568在Android上进行驱动模块开发(源码外)

文章目录 前言一、ARCH架构二、编译器三、建立自己的Makefile文件总结前言 本文记录在驱动开发时,由于编译内核时间较长,经常会选择单独编译一个模块,这里主要讲解,makefile文件如何编写(主要是编译器和架构) 提示:以下是本篇文章正文内容,下面案例可供参考 一、ARCH…...

操作技巧 | 在Revit中借用CAD填充图案的方法

在建模过程中,有时需要达到多种填充效果,而CAD中大量的二维填充图案,便是最直接的资源之一。 使用 填充图案之前 使用 填充图案之后 其中要用到主要命令便是对表面填充图案的添加与编辑 简单效果 如下 模型填充与绘图填充 区别 模型填…...

Java的二叉树、红黑树、B+树

数组和链表是常用的数据结构,数组虽然查找快(有序数组可以通过二分法查找),但是插入和删除是比较慢的;而链表,插入和删除很快(只需要改变一些引用值),但是查找就很慢&…...

昨天某读者拿到华为OD岗位offer,今天来分享一下经验,包含华为OD机试

来自读者投稿,已经拿到华为 OD 开发岗位 offer,询问了一些问题,下面是他的一些经验。 文章目录华为 OD 投递简历华为 OD 机试分数OD 机试通过之后,收到综合测评OD 技术面(时长 1 小时左右)主管/HR 面试&…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...