当前位置: 首页 > 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蓝…...

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

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

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

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

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

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案

一、延迟敏感行业面临的DDoS攻击新挑战 2025年,金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征: AI驱动的自适应攻击:攻击流量模拟真实用户行为,差异率低至0.5%,传统规则引…...