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

server/2024/11/19 12:20:56/

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)由该设施负责把访问请求通过某种策略转发至服务的提供方。

在这里插入图片描述

2、进程内 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 客户端当中的 RestTemplateHttp模板 的位置开启, 加入 @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 负载均衡) 两种分类:集中式: LB进程内 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 客户端当中的 RestTemplateHttp模板 的位置开启, 加入 @LoadBalanced 开启负载均衡@LoadBalanced 注解标注负载均衡

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

@RibbonClient(name = "MEMBER_SERVICE_PROVIDER_URL",configuration = RibbonRule.class) // 指定 Ribbon 的负载均衡算法

文章转载自:Rainbow-Sea

原文链接:https://www.cnblogs.com/TheMagicalRainbowSea/p/18548037

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构


http://www.ppmy.cn/server/143181.html

相关文章

交易效率不打打折扣,遵循昂首平台优化策略

再忽视市场波动和货币对的流动性,投资者的交易效率将大打折扣。在外汇市场中,昂首平台的外汇趋势顾问提供了宝贵的交易策略,但若不遵循市场的基本规律,即使是最精明的顾问也难以保证交易的成功。 首先,交易者应在市场波…

mongoDB的安装及使用

文章目录 1、mongoDB的简介2、mongoDB的安装及配置3、node.js项目中mongoDB使用3.1.引入库3.2.数据操作增删改 4、mongoDB的查询4.1.查询4.2.高级查询 1、mongoDB的简介 MongoDB是一个流行的开源文档型数据库,它使用类似 JSON 的文档模型存储数据,这使得…

论文笔记(五十六)VIPose: Real-time Visual-Inertial 6D Object Pose Tracking

VIPose: Real-time Visual-Inertial 6D Object Pose Tracking 文章概括摘要I. INTRODACTIONII. 相关工作III. APPROACHA. 姿态跟踪工作流程B. VIPose网络 文章概括 引用: inproceedings{ge2021vipose,title{Vipose: Real-time visual-inertial 6d object pose tra…

知识图谱,语义分析,全文检索,neo4j,elaticsearch,知识库平台(java,vue)

一、项目介绍 一款全源码,可二开,可基于云部署、私有部署的企业级知识库云平台,一款让企业知识变为实打实的数字财富的系统,应用在需要进行文档整理、分类、归集、检索、分析的场景。 为什么建立知识库平台? 助力企业…

kafka:使用flume自定义拦截器,将json文件抽取到kafka的消息队列(topic)中,再从topic中将数据抽取到hdfs上

抽取trans_info.json的数据到kafka上,对其中的tr_flag0的数据进行过滤抛弃,只保留正常的状态数据: 将此json文件放在集群中的 /home/zidingyi/trans_info.json 目录下 首先先在java代码中自定义拦截器: 1)&#xff1…

django从入门到实战(三)——CBV视图介绍

在 Django 中,不同类型的视图(如数据显示视图、数据操作视图和日期筛选视图)都有各自的方法和参数。以下是对这些视图及其方法的详细介绍。 1. 数据显示视图 1.1 重定向视图 方法: redirect(): 用于重定向到另一个 URL。 使用…

无人机+无人车+机器狗:城市巷战突破技术详解

在城市巷战中,无人机、无人车和机器狗的组合可以形成一种全新的战场突破技术,这种组合能够大幅提升作战效率,减少人员伤亡。以下是对这一技术的详细解析: 一、无人机的作用 1.空中侦察:无人机能够提供高空视角&#x…

Acwing342

这个代码实现了一种结合 连通块分解、拓扑排序 和 Dijkstra 算法 的复杂图的最短路径计算方法,适用于含有两类边的图结构:普通边(在连通块内)和特殊边(跨连通块)。 以下是详细的代码讲解,逐步解…