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.rhkb.cn/news/472127.html

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

相关文章

apk反编译修改教程系列-----apk应用反编译中AndroidManifest.xml详细代码释义解析 包含各种权限 代码含义【二】

💝💝💝💝在上期博文中解析了一个常规apk中 AndroidManifest.xml的权限以及代码。应粉丝需求。这次解析一个权限较高的apk。这款apk是一个家长管控的应用。需求的各种权限较高。而且通过管控端可以设置控制端的app隐藏与否。 通过博文了解💝💝💝💝 1💝💝…

如何修改npm包

前言 开发中遇到一个问题,配置 Element Plus 自定义主题时,添加了 ElementPlusResolver({ importStyle: "sass" }) 后,控制台出现报错,这是因为 Dart Sass 2.0 不再支持使用 !global 来声明新变量,虽然当前…

神经网络与Transformer详解

一、模型就是一个数学公式 模型可以描述为:给定一组输入数据,经过一系列数学公式计算后,输出n个概率,分别代表该用户对话属于某分类的概率。 图中 a, b 就是模型的参数,a决定斜率,b决定截距。 二、神经网络的公式结构 举例:MNIST包含了70,000张手写数字的图像,其中…

谷歌Gemini发布iOS版App,live语音聊天免费用!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…

【Java基础知识系列】之Java类的初始化顺序

前言 类的初始化顺序 简单场景 代码示例 public class Person {private String name initName();private String initName() {System.out.println("【父类】初始化实例变量name");return "【父类】史蒂夫";}private int age;private static int staticVa…

鸿蒙 管理应用拥有的状态有Localstorage、Appstorage、PersistentStorage、Environment、用户首选项、持久化方案。

LocalStorage: LocalStorage是页面级UI状态存储,通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。支持UIAbility实例内多个页面间状态共享。 // 存储数据 localStorage.setItem(key, value); // 获取数据 const value localStorage…

关系型数据库和非关系型数据库详解

文章目录 关系型数据库和非关系型数据库详解一、引言二、关系型数据库1、关系型数据库简介1.1、SQL语言 2、关系型数据库的实际应用3、关系型数据库的优点4、关系型数据库的缺点 三、非关系型数据库1、非关系型数据库简介1.1、灵活性示例 2、非关系型数据库的分类3、非关系型数…

jvm调优方式

1. 堆内存调优: • 堆大小调整:通过-Xms和-Xmx参数设置堆内存的初始大小和最大大小,确保 JVM 在启动时有足够的内存,并在需要时能够扩展到最大内存。 • 堆分区:使用-XX:NewSize和-XX:MaxNewSize调整新生代&#xff08…

redis linux 安装

下载解压 https://download.redis.io/releases/ tar -zvxf ----redis-7.4.1编译 进入目录下 # redis 依赖c yum install gcc-cmake可能会有问题,所以记得换源# 安装到 /usr/local/redis make PREFIX/usr/local/redis installcd src ./redis-serverredis.confi…

C语言编程练习:验证哥德巴赫猜想 进制转换 rand函数

目录 一. 验证哥德巴赫猜想 二. 进制转换 三. rand函数 往期回顾 一. 验证哥德巴赫猜想 任一充分大的偶数,可以用两个素数之和表示,例如: 4 2 2 6 3 3 10 3 7 10 5 5 .. 9 8 1 9 7 9 • 思路:偶数 num 是要分解的数&…

npm list -g --depth=0(用来列出全局安装的所有 npm 软件包而不显示它们的依赖项)

您提供的命令 npm list -g --depth0 是在 Node Package Manager (npm) 的上下文中使用的,用来列出全局安装的所有 npm 软件包而不显示它们的依赖项。 这是它的运作方式: npm list -g --depth0-g: 指定列表应包括全局安装的软件包。--depth0: 限制树形结…

‘视’不可挡:OAK相机助力无人机智控飞行!

南京邮电大学通达学院的刘同学用我们的oak-d-lite实现精确打击无人机的避障和目标识别定位功能,取得了比赛冠军。我们盼望着更多的朋友们能够加入到我们OAK的队伍中来,参与到各式各样的比赛中去。我们相信,有了我们相机的助力,大家…

hive 统计各项目下排名前5的问题种类

实现指定某项目下的数据效果图如下所示: 其中 ABCDE 为前5名的问题种类,其中A问题有124个(出现了124次) 数据说明: 整个数据集 包含很多项目一个项目 包含很多问题一个问题 选项 可认为是 类别值,所有出…

Odoo :一款免费开源的日化行业ERP管理系统

文 / 开源智造Odoo亚太金牌服务 概述 构建以 IPD 体系作为核心的产品创新研发管控体系,增进企业跨部门业务协同的效率,支撑研发管控、智慧供应链、智能制造以及全渠道营销等行业的场景化,构筑行业的研产供销财一体化管理平台。 行业的最新…

nacos-operator在k8s集群上部署nacos-server2.4.3版本踩坑实录

文章目录 操作步骤1. 拉取仓库代码2. 安装nacos-operator3. 安装nacos-server 坑点一坑点二nacos-ui页面访问同一集群环境下微服务连接nacos地址配置待办参考文档 操作步骤 1. 拉取仓库代码 (这一步主要用到代码中的相关yml文件,稍加修改用于部署容器&…

【安全科普】NUMA防火墙诞生记

一、我为啥姓“NUMA” 随着网络流量和数据包处理需求的指数增长,曾经的我面对“高性能、高吞吐、低延迟”的要求,逐渐变得心有余而力不足。 多CPU技术应运而生,SMP(对称多处理)和NUMA(非一致性内存访问&a…

HarmonyOS Next 组件或页面之间的所有通信(传参)方法总结

系列文章目录 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(上) 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(下) 【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(上) 【…

LeetCode654.最大二叉树

LeetCode刷题记录 文章目录 📜题目描述💡解题思路⌨C代码 📜题目描述 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。 递归地在最大值 左边 的 子…

电子应用产品设计方案-9:全自动智能马桶系统设计方案

一、系统概述 本全自动智能马桶系统旨在提供舒适、卫生、便捷和智能化的如厕体验。通过融合多种传感器技术、电子控制单元和机械执行机构,实现马桶的自动冲洗、座圈加热、臀部清洗、烘干等功能,并具备智能感应、用户个性化设置和健康监测等特色功能。 二…

酒水分销积分商城小程序开发方案php+uniapp

酒水分销积分商城小程序开发,开发语言后端php,前端uniapp。核心功能模块:酒水商城、积分商城、二级分销、抽奖、优惠券。可以二开或定制。协助部署搭建。