4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明

4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明

文章目录

  • 4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明
  • 前言
  • 1. Ribbon 介绍
    • 1.1 LB(Load Balance 负载均衡)
  • 2. Ribbon 原理
    • 2.2 Ribbon 机制
  • 3. Spring Cloud Ribbon 实现负载均衡算法-应用实例
  • 4. 总结:
  • 5. 最后:


前言

  • 对应上一篇学习内容:🌟🌟🌟ChinaRainbowSea-CSDN博客
  • 对应下一篇学习内容:🌟🌟🌟

1. Ribbon 介绍

Ribbon 是什么 ?

1.Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端,负载均衡的工具
2.Ribbon 主要功能是提供客户端负载均衡算法和服务调用
3.Ribbon 客户端组件提供一系列完善的配置项如“连接超时,重试”
4.Ribbon 会基于某种规则(如简单轮询,随机连接等)去连接指定服务
5.程序员很容易是由 Ribbon 的负载均衡算法实现负载均衡
6.一句话: Ribbon: 负载均衡 + RestTemplate 调用
Ribbon 的官网地址: https://github.com/Netflix/ribbon

在这里插入图片描述

Ribbon 进入维护状态?

在这里插入图片描述

在这里插入图片描述

Ribbon 目前进入维护模式, 未来替换方案 是 Spring Cloud LoadBalancer

1.1 LB(Load Balance 负载均衡)

LB 分类

  1. 集中式: LB

即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5,也可以是软件,如 Nginx)
由该设施负责把访问请求通过某种策略转发至服务的提供方。

在这里插入图片描述

  1. 进程内 LB

将 LB逻辑集成到消费方,消费方服务注册中心获知有哪些地址可用,然后再从这些地址中选择
一个合适的服务地址

Ribbon 就属于进程内 L B,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。

在这里插入图片描述

特别说明:在上一篇的学习内容上:实例-前面 member-consumer 轮询负载访问 10000/10002 底层就是 Ribbon 默认的轮询负载算法。

2. Ribbon 原理

Ribbon 架构图&机制

在这里插入图片描述

在这里插入图片描述

2.2 Ribbon 机制

Ribbon 机制:

  1. 先选择 EurekaServer,它优先 选择在同一个区域内负载较少的 Server 服务。
  2. 再根据用户指定的策略,在从 Server 取到的服务注册列表中选择一个地址
  3. Ribbon 提供了多种策略:比如:轮询,随机和根据响应时间加权等等

Ribbon 常见负载算法

在这里插入图片描述

3. Spring Cloud Ribbon 实现负载均衡算法-应用实例

需求分析/图解

  1. 需求: 将默认的轮询算法改成随机算法 RandomRule
  2. 浏览器输入 : http://localhost/member/consumer/get/1
  3. 要求 访问的 10000/10002 端口的服务是随机的,也就是设置为:RandomRule 随机负载均衡

其实:所谓的随机是在少量数据上是随机的,但是在大量数据的基础上,随机的结果基本上和平均 差不多。

  1. 首先:创建 member-service-consumer-80 com/rainbowsea/springcloud/config/RibbonRule.java,随机负载均衡的算法的配置类,进行配置随机负载均衡

在这里插入图片描述

package com.rainbowsea.springcloud.config;import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RibbonRule {@Bean // 配置注入自己的负载均衡算法public IRule myRibbonRule() {// 这里老师返回的是 RandomRule,大家也可以指定其他的内容。//return new WeightedResponseTimeRule();return new RandomRule();  // 随机算法}
}

注意:同时还需要在对应的Eureka Client 客户端当中的 RestTemplate Http模板 的位置开启, 加入 @LoadBalanced 开启负载均衡

在这里插入图片描述

以及同时还需要在对应的Eureka Client 客户端 的场景启动器的位置开启,当中加入@RibbonClient 注解标明:使用的是 Ribbon 下的负载均衡上的哪个算法。

在这里插入图片描述

@RibbonClient(name = "MEMBER_SERVICE_PROVIDER_URL",configuration = RibbonRule.class) // 指定 Ribbon 的负载均衡算法
package com.rainbowsea.springcloud;import com.rainbowsea.springcloud.config.RibbonRule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.ribbon.RibbonClient;// 如果错误: 加入排除 DataSourceAutoConfiguration 自动配置
//@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
//@EnableEurekaClient 表示将项目/模块/程序 标注作为 Eureka Client
@EnableEurekaClient
@SpringBootApplication
@EnableDiscoveryClient // 启用服务发现
@RibbonClient(name = "MEMBER_SERVICE_PROVIDER_URL",configuration = RibbonRule.class) // 指定 Ribbon 的负载均衡算法
public class MemberConsumerApplication80 {public static void main(String[] args) {SpringApplication.run(MemberConsumerApplication80.class, args);}
}

测试

  1. 浏览器输入 : http://localhost/member/consumer/get/1
  2. 观察访问的 10000/10002 端口的服务是随机的。

在这里插入图片描述

4. 总结:

  1. Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端,负载均衡的工具。
  2. LB(Load Balance 负载均衡) 两种分类:
    1. 集中式: LB
    2. 进程内 LB
  3. Ribbon 原理和机制
  1. 先选择 EurekaServer,它优先 选择在同一个区域内负载较少的 Server 服务。
  2. 再根据用户指定的策略,在从 Server 取到的服务注册列表中选择一个地址
  3. Ribbon 提供了多种策略:比如:轮询,随机和根据响应时间加权等等
  1. Ribbon 常见的负载均衡算法。
  2. 配置 Spring Cloud Ribbon 的三点:
  1. 创建配置对应 Ribbon 下的负载均衡的算法的配置类(注意标注配置类注解@Configuration 和对应的方法处加入'@Bean加入 ioc 容器管理' ),进行配置负载均衡 ,直接 new 对应的 Ribbon 下的 负载均衡算法即可,比如: RandomRule,RoundRobinRule
  2. 还需要在对应的Eureka Client 客户端当中的 RestTemplate Http模板 的位置开启, 加入 @LoadBalanced 开启负载均衡@LoadBalanced 注解标注负载均衡
  3. 同时还需要在对应的Eureka Client 客户端 的场景启动器的类上 位置开启,当中加入@RibbonClient 注解标明:使用的是 Ribbon 下的负载均衡上的哪个算法。
@RibbonClient(name = "MEMBER_SERVICE_PROVIDER_URL",configuration = RibbonRule.class) // 指定 Ribbon 的负载均衡算法

5. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

在这里插入图片描述

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

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

相关文章

Redis 线程模型详解:理解 Redis 高效性能的关键

Redis 是一个开源的高性能键值存储系统,因其卓越的速度和强大的功能被广泛应用于各种场景,如缓存、消息队列和实时数据存储等。Redis 的性能优越不仅归功于其高效的数据结构和内存存储,还源于其独特的线程模型。本文将详细介绍 Redis 的线程模…

vue3【实战】切换全屏【组件封装】FullScreen.vue

效果预览 原理解析 使用 vueUse 里的 useFullscreen() 实现 代码实现 技术方案 vue3 vite UnoCSS vueUse 组件封装 src/components/FullScreen.vue <template><component:is"tag"click"toggle":class"[!isFullscreen ? i-ep:full-sc…

docker:基于Dockerfile镜像制作完整案例

目录 摘要目录结构介绍起始目录package目录target目录sh目录init.sh脚本start.sh脚本stop.sh脚本restart.sh脚本 config目录 步骤1、编写dockerfilescript.sh脚本 2、构件镜像查看镜像 3、保存镜像到本地服务器4、复制镜像文件到指定目录&#xff0c;并执行init.sh脚本5、查看挂…

lua实现雪花算法

lua实现雪花算法 雪花算法介绍组成部分优点缺点 代码示例 雪花算法介绍 雪花算法&#xff08;Snowflake Algorithm&#xff09;是一种用于生成唯一ID的分布式生成算法&#xff0c;最初由Twitter开发。它的主要目的是在分布式系统中生成唯一的、时间有序的ID&#xff0c;这些ID通…

Spring Boot之Spring-devtools热部署

1、导包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope> </dependency>2、添加配置 #开启热部署 spring.devtools.restart.enabledtrue #热…

STM32 | 超声波避障小车

超声波避障小车 一、项目背题 由于超声波测距是一种非接触检测技术&#xff0c;不受光线、被测对象颜色等的影响&#xff0c;较其它仪器更卫生&#xff0c;更耐潮湿、粉尘、高温、腐蚀气体等恶劣环境&#xff0c;具有少维护、不污染、高可靠、长寿命等特点。因此可广泛应用于…

第6章:TDengine 标签索引和删除数据

TDengine 标签索引和删除数据 目标 掌握标签索引的创建、删除掌握超表、子表创建以及数据删除删除数据 删除数据是 TDengine 提供的根据指定时间段删除指定表或超级表中数据记录的功能,方便用户清理由于设备故障等原因产生的异常数据。 注意:删除数据并不会立即释放该表所…

微澜:用 OceanBase 搭建基于知识图谱的实时资讯流的应用实践

本文作者&#xff1a; 北京深鉴智源科技有限公司架构师 郑荣凯 本文整理自北京深鉴智源科技有限公司架构师郑荣凯&#xff0c;在《深入浅出 OceanBase 第四期》的分享。 知识图谱是一项综合性的系统工程&#xff0c;需要在在各种应用场景中向用户展示经过分页的一度关系。 微…

多轮对话中让AI保持长期记忆的8种优化方式篇

多轮对话中让AI保持长期记忆的8种优化方式篇 一、前言 在基于大模型的 Agent 中&#xff0c;长期记忆的状态维护至关重要&#xff0c;在 OpenAI AI 应用研究主管 Lilian Weng 的博客《基于大模型的 Agent 构成》[1]中&#xff0c;将记忆视为关键的组件之一&#xff0c;下面我…

消息中间件分类

消息中间件&#xff08;Message Middleware&#xff09;是一种在分布式系统中实现跨平台、跨应用通信的软件架构。它基于消息传递机制&#xff0c;允许不同系统、不同编程语言的应用之间进行异步通信。 常见的消息中间件类型包括&#xff1a; 1. JMS&#xff08;Java Message S…

aws-athena查询语句总结

完全归于本人mysql语句小白&#xff0c;是一点也写不出来&#xff0c;故汇总到此 1. cloudtrail ## 查询事件排序 SELECT eventname,eventtime,count(eventname) as num FROM your_athena_tablename where eventtime between 2024-11-10 and 2024-11-11 group by eventname…

Swift的可选绑定(Optional binding)

在Swift中&#xff0c;有一种变量称为可选变量&#xff08;Optional&#xff09;&#xff0c;具体说明见Swift初步入门。这种变量的值可以存在也可以为空&#xff08;nil&#xff09;。在Swift中&#xff0c;可以通过将if语句和赋值语句结合&#xff0c;有条件地展开&#xff0…

关键JavaScript进行表单验证:提升用户体验与数据完整性

关键JavaScript进行表单验证&#xff1a;提升用户体验与数据完整性 在网页开发中&#xff0c;表单验证是确保用户输入有效数据的重要步骤。有效的表单验证不仅可以提高用户体验&#xff0c;还可以减少服务器端处理无效或错误数据的负担。本文将通过一个简单的示例&#xff0c;…

java集合—List常用的方法

Java集合中的List是一种有序的集合&#xff0c;可以通过索引访问元素。以下是List常用的方法&#xff1a; 添加元素&#xff1a; add(E element)&#xff1a;将指定的元素追加到列表的末尾。add(int index, E element)&#xff1a;将指定的元素插入到列表的指定位置。 获取元…

3D Gaussian Splatting 代码层理解之Part3

最后,内容到达了高斯泼溅过程中最有趣的阶段:渲染!这一步可以说是最关键的,因为它决定了模型的真实性。然而,它也可能是最简单的。在本系列的Part 1和Part2,文章演示了如何将 Raw 3D椭球 转换为可渲染的格式,但现在我们实际上必须完成这项工作并渲染到一组固定的像素上。…

【Bluedroid】A2dp初始化流程源码分析

一、概述 Bluedroid是Android系统中用于蓝牙通信的底层协议栈,它支持多种蓝牙协议,包括A2DP(Advanced Audio Distribution Profile,高级音频分发协议)。A2DP主要用于通过蓝牙传输高质量音频,如立体声音乐。以下是Bluedroid中A2DP初始化的基本流程。 1.1. 启动Bluetooth…

Mac上详细配置java开发环境和软件(更新中)

文章目录 概要JDK的配置JDK下载安装配置JDK环境变量文件 Idea的安装Mysql安装和配置Navicat Premium16.1安装安装Vscode安装和配置Maven配置本地仓库配置阿里云私服Idea集成Maven 概要 这里使用的是M3型片 14.6版本的Mac 用到的资源放在网盘 链接: https://pan.baidu.com/s/17…

[⑧5G NR]: PBCH payload生成

本篇博客记录下5G PBCH信道中payload数据的生成方式。PBCH payload一共32个比特&#xff0c;基本结构如下图&#xff1a; 根据SSB PDU中bchPayloadFlag的值有三种方式得到PBCH payload。 bchPayloadFlag 0&#xff1a;全部32比特由MAC层提供。 bchPayloadFlag 1&#xff1a;M…

预处理(1)(手绘)

大家好&#xff0c;今天给大家分享一下编译器预处理阶段&#xff0c;那么我们来看看。 上面是一些预处理阶段的知识&#xff0c;那么明天给大家讲讲宏吧。 今天分享就到这里&#xff0c;谢谢大家&#xff01;&#xff01;

IP地址查询——IP归属地离线库

自从网络监管部门将现实IP地址列入监管条例&#xff0c;IP地址的离线库变成网络企业发展业务的不可或缺的一部分&#xff0c;那么IP地址离线库是什么&#xff0c;又能够给我们带来什么呢&#xff1f; 什么是IP地址离线库&#xff1f; IP地址离线库是IP地址服务商将通过各种合…