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

【SpringCloud入门】-- Ribbon入门

1.什么是Ribbon?

Ribbon就是netflix公司的一个开源项目,主要功能是提供客户端负载均衡算法和服务调用。Ribbon客户端组件提供了完善的配置项,如连接超时,重试等等。Ribbon作为服务消费者的负载均衡器,有两种使用方式,一是和RestTemplate结合,二是和Open Feign结合。OpenFeign默认集成Ribbon。

2.什么是负载均衡?

负载均衡是一种在计算机网络和服务器系统中使用的技术,旨在平衡系统中的工作负载,确保资源能够以均衡的方式分配给各个请求。简单来说,负载均衡就像是一个智能调度器,它将用户请求分配到多个服务器上,以避免任何一个服务器过载或不工作。

举个例子来说明,假设你经营一家餐厅,每天会有很多客人到来点餐。如果只有一个服务员负责接待所有客人,那么可能会出现排队等待的情况,有些客人可能会感到不满。为了解决这个问题,你决定雇佣更多的服务员,并将客人均匀地分配给他们。这样,每个服务员只需处理一部分客人,服务效率更高,客人也不需要长时间等待。这就是负载均衡的概念。

负载均衡可以通过多种算法来实现,常见的有轮询算法、最小连接数算法、最短响应时间算法等。它们根据不同的策略和条件来确定应该将请求发送到哪个服务器上,以实现负载的均衡。

3.Ribbon负载均衡的算法和实现

ribbon中核心的接口IRule

Ribbon是一个开源的负载均衡器,常用于基于Java的微服务架构中。它提供了多种负载均衡算法和实现方式,下面是其中几种常见的算法和实现:

  1. 轮询(Round Robin):这是最简单的负载均衡算法,Ribbon会将请求按照顺序分配给后端服务器。每个请求依次发送到不同的服务器,实现了请求的均衡分发。

  2. 权重轮询(Weighted Round Robin):在轮询的基础上,每个服务器都可以设置一个权重值,表示其处理能力。Ribbon会根据权重值来分配请求,处理能力越强的服务器获得更多的请求。

  3. 随机(Random):Ribbon会随机选择一个后端服务器来处理请求。每个服务器被选中的概率是相等的,适用于无需考虑服务器性能差异的场景。

  4. 最少连接(Least Connections):Ribbon会选择当前连接数最少的服务器来处理请求。通过动态监测服务器的连接数,将请求发送到连接数最少的服务器上,实现了请求的均衡分配。

  5. 响应时间加权(Response Time Weighted):根据服务器的平均响应时间来进行权重分配。平均响应时间较短的服务器获得更高的权重,从而获得更多的请求。

  6. Hash散列(Hashing):根据请求的特定属性(如请求URL、请求IP等)进行哈希计算,然后将哈希值映射到后端服务器。相同哈希值的请求总是会被分配到同一个服务器上,保证了相同请求的一致性处理。

除了以上的算法,Ribbon还支持自定义负载均衡策略。你可以基于自己的业务需求和场景特点,实现适合自己的负载均衡算法。

需要注意的是,Ribbon在最新版本的Spring Cloud中已经进入维护模式,推荐使用Spring Cloud LoadBalancer替代,它提供了更强大、灵活的负载均衡能力。

4.Ribbon调用前要做什么事?

通过“http://” + serviceId + "/info" ,思考ribbon需要做什么?

restTemplate.getForObject("http://provider/info",String.class);

1. 拦截该请求。

2. 获取该请求的url地址。

3. 截取url地址的provider。

4. 从服务列表找到key为provider的服务实例集合。

5. 根据负载均衡算法选出符合的实例。

6. 拿到该实例的host和port,重构url中的provider。

7. 发送restTemplate.getForObject(“http://ip:port/info”,String.class)。

5.如何修改Ribbon默认的负载均衡算法

修改yml文件,指定某个服务用什么算法

provider :
# 提供者的服务名称 , 那么访问该服务的时候就会按照自定义的负载均衡算法
        ribbon :
                NFLoadBalancerRuleClassName : com.netflix.loadbalancer.RandomRule
# 几种算法的全限定类名

6.Ribbon底层实现原理

Ribbon的底层实现原理主要包括两个核心部分:服务发现和负载均衡算法。

  1. 服务发现: Ribbon通过与服务注册中心进行交互,获取可用的服务实例列表。服务注册中心(如Eureka、Consul)是一个用于服务治理的组件,它能够帮助服务提供者将自身的信息注册到其中,消费者可以从注册中心获取可用的服务实例。Ribbon会定期从注册中心拉取最新的服务列表,并缓存起来供后续使用。这样就保证了Ribbon始终具备最新的可用服务列表。同时,当有新的服务实例加入或从注册中心下线时,Ribbon也能及时感知并更新服务列表。

  2. 负载均衡算法: Ribbon提供了多种负载均衡算法,用于决定将请求发送到哪个服务实例上。常见的负载均衡算法包括轮询(Round Robin)、权重轮询(Weighted Round Robin)、随机(Random)、最少连接(Least Connections)、响应时间加权(Response Time Weighted)等。Ribbon根据选择的负载均衡算法,在服务列表中选择一个合适的服务实例,并将请求发送到该实例上。这样可以实现请求的均衡分发,提高系统的可用性和性能。

 Ribbon通过服务发现获取可用的服务列表,并借助负载均衡算法实现请求的合理分配。这样可以使得客户端能够有效地与后端服务进行通信,提高系统的负载均衡能力和整体性能。需要注意的是,最新版的Spring Cloud已经将Ribbon进入维护模式,推荐使用Spring Cloud LoadBalancer等替代方案来实现负载均衡。

相关文章:

【SpringCloud入门】-- Ribbon入门

1.什么是Ribbon? Ribbon就是netflix公司的一个开源项目,主要功能是提供客户端负载均衡算法和服务调用。Ribbon客户端组件提供了完善的配置项,如连接超时,重试等等。Ribbon作为服务消费者的负载均衡器,有两种使用方式&…...

(二)Liunx下ElasticSearch快速搭建

1.下载安装 1)环境准备: 操作系统:centos7 es版本:8.8.1 jdk:17 es与jdk等兼容支持查看 2)下载安装包上传到服务器,官网地址 https://www.elastic.co/cn/downloads/elasticsearch 3)解压文件…...

神经网络编程基础

目录 1、二分类(Binary Classification) 2、逻辑回归(Logistic Regression) 3、逻辑回归的代价函数(Logistic Regression Cost Function) 4、梯度下降法(Gradient Descent) 5、使用计算图求导数 6、逻辑回归中的梯度下降&…...

2023年北京/上海/深圳DAMA-CDGA/CDGP数据治理工程师认证报名

DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…...

Python之枚举类Enum定义错误码

在 ​​web​​​ 项目中,我们经常使用自定义状态码来告知请求方请求结果以及请求状态;在 ​​Python​​ 中该如何设计自定义的状态码信息呢? 1、普通类字典设计状态码 class RETCODE:OK "0"ERROR …...

GIS大数据处理框架sedona(塞多纳)编程入门指导

GIS大数据处理框架sedona(塞多纳)编程入门指导 简介 Apache Sedona™是一个用于处理大规模空间数据的集群计算系统。Sedona扩展了现有的集群计算系统,如Apache Spark和Apache Flink,使用一组开箱即用的分布式空间数据集和空间SQL,可以有效地…...

C++基础(7)——类和对象(5)

前言 本文主要介绍C中的继承 4.6.1:继承和继承方式(公有、保护、私有) 4.6.2:继承中的对象模型,sizeof()求子类对象大小 4.6.3:子类继承父类后,两者构造和析构顺序 父类先构造、子类先析构 如…...

【Express.js】sql-knex 增删改查

Sql增删改查 本节使用knex作为sql框架,以sqlite数据库为例 准备工作 knex是一个运行在各自数据库Driver上的框架,因此需要安装相应的js版数据库Driver,如: PostgreSQL -> pg, mysql/mariadb -> mysql, sqlite -> sqlite3… 安装…...

构建基于前后端分离的医学影像学学习平台:Java技术实现与深度解析

在医学领域,影像学学习平台是一种重要的工具,用于帮助医学学生和专业人士学习和研究医学影像。本文将介绍如何使用Java构建一个基于前后端分离的医学影像学学习平台,通过结合前沿的Web开发技术和医学影像处理算法,为用户提供强大且高效的学习工具。 技术架构设计: 在构…...

从零开始学习R语言编程:完全指南

一、引言 R语言是一种流行的数据分析语言,广泛应用于学术界、商业界和社会科学研究等领域。与其它数据分析软件相比,R语言的优点包括免费开源、高效可靠、具有强大的数据分析和可视化能力等。R语言的编程基础包括了各种控制结构和函数,可以方…...

PulsarMQ系列入门篇

文章目录 介绍:部署安装讲解:安装单机版本测试(Linux下): 介绍: PulsarMQ 现托管于apache Apache 软件基金会顶级项目,2016年由雅虎公司开源的分布式多租户消息中间件 ,是下一代云原生分布式消息…...

编程的实践理论 第九章 交互

第九章 交互 根据状态的初始值和终止值,我们已经描述了计算。一个状态变量的声明如下: var x: T S ∃x, x′: T S 它说的是一个状态变量有两个数学变量,一个是初始值,一个是终止值。在这个 声明的作用域内,x和x…...

BSN全球技术创新发展峰会在武汉举办,“延安链”正式发布

原标题:《第二届BSN全球技术创新发展峰会在武汉成功举行》 6月9日,由湖北省人民政府指导,湖北省发展改革委、国家信息中心联合主办,中国移动、中国电信、中国联通、武汉市江汉区人民政府、区块链服务网络(BSN&#xf…...

8.4 IP地址与端口号

目录 IP地址 IP地址及编址方式 IP 地址及其表示方法 点分十进制记法举例 IP 地址采用 2 级结构 分类的 IP 地址 分类的 IP 地址 多归属主机 各类 IP 地址的指派范围 ​编辑 一般不使用的特殊的 IP 地址 ​编辑 分类的 IP 地址的优点和缺点 划分子网 无分类编址 CIDR 无…...

day56_springmvc

今日内容 零、 复习昨日 零、 复习昨日 一、JSON处理【重点】 springmvc支持json数据交互,但是自己本身没有对应jar,使用的是第三方Jackson,只需要导入对应依赖,springmvc即可使用 如果需要换用到FastJson 导入依赖配置文件中指定json转换的类型为FastJson本次课程没有替换,用的…...

SQL Server Management Studio (SSMS)下载,安装以及连接数据库配置

目录 (一)前言 (二)下载与安装 1. 下载 (1)下载地址 (2)SSMS对操作系统的要求 2. 安装 (1)存放下载好的安装包 (2) 双击进入安…...

go 错误 异常

自定义错误 Go语言中 错误使用内建的 error 类型表示, error类型是一个接口类型:定义如下: error 有一个 Error() 的方法‘所有实现该接口的类型 都可以当做一个错误的类型;Error()方法输入具体错误描述,在打印错误时…...

智慧加油站卸油作业行为分析算法 opencv

智慧加油站卸油作业行为分析系统通过opencvpython网络模型技术,智慧加油站卸油作业行为分析算法实现对卸油作业过程的实时监测。当现场出现卸油作业时人员离岗,打电话人员抽烟等违规行为,灭火器未正确摆放,明火和烟雾等异常状态&a…...

LiangGaRy-学习笔记-Day22

1、shell工具-tput 这个是tput bash工具 具体的操作如下: tput clear:清屏tput cup Y X 第Y行,第X列的位置 tput bold:字体加粗tput sgr0 : 重置命令tput setaf n n:代表数字0-7 0黑色1红色2绿色3黄色4蓝…...

数据库横表和竖表有什么区别

横表和竖表是描述数据库表结构的两种形式,它们之间的主要区别在于数据的组织方式和用途。 横表(宽表): 横表是一种常见的表结构,其特点是每一行数据包含所有相关属性,字段通常作为列出现。横表中的每行代表…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...

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

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

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...