SpringCloud - Ribbon

【springcloud 微服务】Spring Cloud Ribbon 负载均衡使用策略详解 springcloud中ribbon负载均衡策略总结 阅读详情

1、负载均衡

1.1 负载均衡简介

负载均衡就是将负载(工作任务,访问请求)进行分摊到多个操作单元(服务器,组件)上进行执行。
根据负载均衡发生位置的不同,一般分为服务端负载均衡和客户端负载均衡:
① 服务端负载均衡指的是发生在服务提供者一方,比如常见的nginx负载均衡。
② 客户端负载均衡指的是发生在服务请求的一方,也就是在发送请求之前已经选好了由哪个实例处理请求。
在这里插入图片描述

如spring cloud中的ribbon,客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法选择 一个服务器,然后进行访问,这是客户端负载均衡;即在客户端就进行负载均衡算法分配。
在这里插入图片描述

1.2 实现负载均衡

1.2.1 起一个不同端口的服务

我们需要借助IDEA再启一个服务,这个服务也是ShopProductServer,但是他的端口是不同的。
在VM option中输入需要指定的端口号即可:

-Dserver.port=8081

在这里插入图片描述
在这里插入图片描述

1.2.2 修改实现类代码实现负载均衡
 @Override
  public Order getById(Long oid, Long pid) {
    // 从nacos中获取服务
    List<ServiceInstance> instances = discoveryClient.getInstances("product-service");
    // 定义一个随机数
    int index = new Random().nextInt(instances.size());
    // 随机获取一个服务
    ServiceInstance serviceInstance = instances.get(index);
    String url = serviceInstance.getHost() + ":" + serviceInstance.getPort();
    Product product = restTemplate
        .getForObject("http://"+url+"/product?productId=" + pid, Product.class);
    Order order = orderDao.getOne(oid);
    order.setUsername(order.getUsername()+",data form "+serviceInstance.getPort());
    return order;
  }

2、基于Ribbon实现负载均衡

2.1.1 Ribbon是什么

Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。**Ribbon就是简化了上面代码的组件,其中提供了更多的负载均衡算法。**它是Spring Cloud的一个组件,它可以让我们使用一个注解就能轻松的搞定负载均衡。

2.1.2 Ribbon实现负载均衡

Ribbon如何去做负载均衡操作,调用接口用的最底层的HttpURLConnection。

2.1.2.1 引入依赖、添加注解

1)引入依赖

<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring‐cloud‐starter‐netflix‐ribbon</artifactId>
</dependency>

nacos-discovery依赖了ribbon,可以不用再引入ribbon依赖
在这里插入图片描述
2)添加@LoadBalanced
我们需要在RestTemplate的生成方法上添加一个注解:@LoadBalance,这个注解是一个增强注解,它可以增强RestTemplate ,使他可以实现负载均衡。

@Configuration 
public class RestConfig {
 @Bean 
 @LoadBalanced 
 public RestTemplate restTemplate() {
   return new RestTemplate(); 
    } 
 }
2.1.2.2 修改productService实现类的代码

为了更直观,我们直接将application.yml中的端口号设置到实现类中

  @Value("${server.port}")
  private String port;

  @Override
  public Product findById(Long productId) {
    Product product = productDao.findById(productId).get();
    product.setPname(product.getPname()+",data form"+port);
    return product;
  }
2.1.2.3 修改OrderService实现类的代码
  @Override
  public Order getById(Long oid, Long pid) {
    Product product = restTemplate
        .getForObject("http://product-service/product?productId=" + pid, Product.class);
    Order order = orderDao.getOne(oid);
    order.setPname(product.getPname());
    return order;
  }
2.1.2.4 实现原理

Ribbon原理
在这里插入图片描述

为什么使用服务的名称替代url就可以实现负载均衡了呢?
1、通过反射获取到你传递过来的参数(假设传进来1),此时的url变成了:http://product-service/product?productId=1
2、按照规则进行切割,将product-service切割出来
3、根据从注册中心拉去过来的服务列表对应着的节点信息,假设1product-service对应着192.168.10.180:8081和192.168.10.180:8083。
4、根据你1配置的负载均衡的策略去选择一个信息节点,将服务名称替换成对应的ip和端口。假设此时url变成了:
http://192.168.10.180:8081/product?productId=1.
5、使用RestTemplate去发送请求
注意:一定要在RestTemplate的生成方法上添加@LoadBalance注解,这个注解表示将RestTemplate进行加强,只有进行了加强才会去实现上述的步骤,不然是无法实现负载均衡的。

3、Ribbon支持的负载均衡策略

Ribbon内置了多种负载均衡策略,内部负载均衡的顶级接口为com.netflix.loadbalancer.IRule,他具体支持的负载均衡策略有:
在这里插入图片描述
我们可以通过修改配置来调整Ribbon的负载均衡策略,在Shop-order-server项目的application.yml中增加如下配置:

product-service: # 调用的提供者的名称
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
基于迁移学习的花卉识别系统 本研究采用了预训练的经典深度学习模型,包括ResNet、AlexNet和VGG,通过微调的方式在Oxford-102数据集和一个自制花卉数据集上进行训练,并对图像进行了多种数据增强操作,以提高模型的泛化能力,致力于实现花卉的高效分类。 阅读详情

相关推荐

SLG项目开发经验二_大地图设计与实现

本文深入探讨了SLG游戏大地图设计与实现的关键技术,包括网格化业务框架、AOI系统优化、边界处理方案以及行军系统实现。通过Unity引擎的实践案例,详细解析了大地图性能优化的核心策略,如分块加载、GPU Instancing和差异同步协议,为SLG项目开发提供宝贵经验。

weixin_29001419的博客 216

Spring Cloud Ribbon 详解

Spring Cloud Ribbon 知识点: Ribbon介绍(3点) 使用方法 负载均衡策略和自定义负载均衡策略 Ping机制 Ribbon配置 1、介绍 Spring Cloud Ribbon 是一套基于 Netflix Ribbon 实现的客户端负载均衡和服务调用工具。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独

FanGer的博客 6552

工业4.0 底层逻辑

工业4.0 的概念已经被滥用了,它与物联网,工业物联网等概念一样,几乎什么都往里面装。演变成了一句口号和愿景。许多人并不清楚工业4.0的底层逻辑到底是什么?如何遵循工业4.0 的思想构建新一代智能制造系统?并没用清晰地展示工业4.0的技术路线图。

姚家湾博客 1993

springcloud Ribbon的详解

Ribbon是Netflix发布的开源项目,Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的框架。

tian830937的专栏 2736

LabVIEW 调用MATLAB 进行图像处理的实现

程机械及设备的变形、振动、冲击、粗糙度、刚度和强度等特性,还可用在土木结构、水利设施的变形测量[4][5]。因此,该技术在机械、土木、水利、电器、航空航天、兵器工业及生物医学等领域的检测中具有非常重要的地位。将物面前方空间的散斑用摄像设备记录下来,当物体运动或由于受力而变形时,这些随机分布的散斑图也随之在空间按一定的规律运动,因此能用记录的散斑图在计算机上分析物体的运动和变形,这就是电子散斑技术。当物体的漫反射表面被激光照射时,漫反射的光波在物体表面的前方相互干涉,由于漫反射光的。

qq_37971227的博客 3873

最小二乘法(看完即会)

其中,X是数据矩阵,每一行是一个数据点,每一列是一个自变量(包括截距项),Y是观测值向量,β是待求的系数向量。为了找到使S最小的a和b的值,我们需要对S求关于a和b的偏导数,并令它们等于零。最小二乘法的数学公式通常用于线性回归问题,其中目标是找到一条直线(或更高维度的超平面),使得这条直线与给定数据点的误差平方和最小。同样地,通过求偏导数和令偏导数等于零,我们可以得到一个线性方程组,解这个方程组可以找到最优的b_0, b_1, …+ b_m*x_m,其中b_0是截距,b_1到b_m是各个自变量的系数。

qlkaicx的博客 2万+

SpringCloud--负载均衡

Spring Cloud Ribbon是Spring Cloud生态系统中的一部分,是一套基于 Netflix Ribbon 实现的客户端负载均衡工具,由于Spring Cloud对其进行二次封装,可以将面向服务的Rest模板(RestTemplate)请求转换成客户端负载均衡的服务调用。且无需单独部署,只需要在项目中引入相关依赖,并在项目配置文件中进行相关配置后,便可以在客户端进行请求的负载均衡调用了。Ribbon也允许开发者通过实现IRule接口来自定义负载均衡规则。

qq_33807380的博客 2051

Linux之GTK系列教程

00、背上行囊1——程序员学习之道 01、背上行囊2——为什么要学习GTK 02、背上行囊3——GUI概述 03、背上行囊4——GTK简介 04、背上行囊5——GTK环境搭建( Linux ) 05、背上行囊6——GTK环境搭建( windows ) 06、踏上旅途1——一个简单的空白窗口 07、踏上旅途2——控件的添加 08、踏上旅途3——布局容器之水平布局 09、踏上旅途

每天积累一点点 2万+

【微服务 SpringCloud】实用篇 · Ribbon负载均衡

本文主要讲解Ribbon组件的负载均衡策略IRule,原理(查看部分源码);以及饥饿加载!

Carefree_State的博客 5323

论文阅读笔记--Grid Anchor based Image Cropping: A New Benchmark and An Efficient Model

基于网格锚的图片裁剪:一种新的标准和高效的模型摘要1.介绍2.相关工作2.1 图像裁剪数据集和评估指标 摘要 图像裁剪的目的是通过去除图像中无关的内容来改善图像的组成和美学质量。现有的图像裁剪数据库大多只提供一个或多个人工标注的边界框作为基准,难以反映实际中图像裁剪的非唯一性和灵活性。 采用IoU等评价指标也不能可靠地反映裁剪模型的真实性能。本文回顾了图像裁剪的问题,并通过考虑图像裁剪的特殊特性和要求(如局部冗余、内容保存、高宽比),提出了基于网格锚的公式。 我们的公式将候选裁剪窗口的搜索空间从数百万减少到

qq_22565865的博客 2948

SAPGUI excel 导出时遇到的运行时错误:STRING_SIZE_TOO_LARGE

当报表导出需求远超单一 XLSX 文件的物理承载力时,与其在 SAPGUI 中硬拼 2 GB 限制,不如把分页、过滤、流式写入作为设计前提。掌握 ABAP2XLSX 或 CSV + Power Query 等工具链,既能满足审计合规,又能让应用服务器远离的噩梦。祝你在下一次导出海量数据时,既高效又优雅。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 638

Spring Cloud源码分析(二)Ribbon

在之前介绍使用Ribbon进行服务消费的时候,我们用到了RestTemplate,但是熟悉Spring的同学们是否产生过这样的疑问:RestTemplate不是Spring自己就有的吗?跟Ribbon的客户端负载均衡又有什么关系呢?下面在本文,我们来看RestTemplate和Ribbon是如何联系起来并实现客户端负载均衡的。 首先,回顾一下之前的消费者示例:我们是如何实现客户端负载均衡...

小飞侠的博客 407

康复训练监测系统:基于YOLOv8的患者动作规范识别

本文系统介绍了基于YOLOv8的康复训练动作规范识别系统,从理论背景、数据准备、模型训练、推理应用到UI界面,提供了完整技术链条及代码示范。希望对康复领域的智能监测应用提供参考和借鉴。

YOLO 453

SpringCloud的Fegin,Ribbon详解

SpringCloud的Fegin,Ribbon详解 大家好,我是酷酷的韩~ 下面将继续分享springcloud中的feign和ribbon。 一.fegin简介? 1.feign是netflix开发的声明式,模板化的HTTP客户端,Feign可以帮我们更快捷,优雅的调用HTTP API 2.feign采用的是基于接口的注解 3.feign整合了ribbon,具有负载均衡的能力。 4.整合了h...

韩金群的博客 9199

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【SpringCloud】SpringCloud之Ribbon及Feign介绍

文章目录前言一、负载均衡介绍1.1 集中式LB和进程内LB1.2 Ribbon本地负载均衡 VS Nginx服务端负载均衡1.3 SpringCloud整合Ribbon使用1.4 Ribbon之轮询算法原理1.5 Ribbon中进行负载规则替换二、RestTemplate介绍三、Feign和OpenFeign介绍3.1 Feign3.2 OpenFeign四、总结 前言 在上篇文章SpringCloud整合Eurea注册中心基础知识中,我们介绍了Eureka,并利用SpringCloud进行了整合,其中进行

时光、疏离了记忆づ童话的博客 1422

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Spring Cloud_8_SpringCloud与Ribbon

SpringCloud与Ribbon SpringCloud中使用Ribbon 在SpringCloud_7_Ribbon负载均衡器中,主要讲解Ribbon负载均衡机制 SpringCloud集成了Ribbon,结合Eureka,可实现客户端的负载均衡 在SpingCloud_4_Eureka集群中所使用RestTemplate(被@LoadBalancer修饰),都已经拥有负载均衡功能 本小...

Java晋升指北 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SpringCloud之Ribbon

前面学习了IDEA之搭建SpringCloud项目,只是大概知道分布式的项目是什么搭建的。 分布式项目只是简单的将一个系统根据功能切割吗? 如果单个功能的服务器宕机了,那是不是只能等这个功能的服务重新启动? 如果我单个功能的服务器有多个,那不就可以在对应服务宕机的时候还能用吗?而且平时还可以分摊用户。 就好比你去银行柜台办理业务,有几个柜台能办理一样的业务,这个柜台人多,那就去其他的柜台 目录一、ribbon的作用二、设计2.1 注册中心2.2 服务提供者2.3 服务消费者三、测试四、源码 一、ri

jc_hook的博客 1630

SpringCloud组件之Ribbon

Spring Cloud Ribbon 是一个基于 Http 和 TCP 的客服端负载均衡工具,它是基于 Netflix Ribbon 实现的。客户端负载均衡即是当浏览器向后台发出请求的时候,客户端会向 Eureka Server 读取注册到服务器的可用服务信息列表,根据设定的负载均衡策略(没有设置即用默认的),选择向哪台服务器发送请求 本文将介绍Ribbon的工作原理以及如何在项目中使用 一、R...

阿靖的博客 648

springcloud-集成Ribbon

Ribbon 是一个基于客户端的负载均衡器,能够通过配置的方式将流量分配到多个服务实例上。与传统的服务器端负载均衡不同,Ribbon 是在客户端侧实现的,即由服务调用者在客户端进行负载均衡决策。这种方式使得系统更灵活且可以更好地适应微服务架构。

Flying_Fish_roe的博客 1781

【SpringCloud】【Hoxton】Ribbon

1 基础环境准备 2 一文读懂Eureka 3 Zookeeper注册中心 4 Consule注册中心 1 Ribbon介绍 Spring Cloud Ribbon是基于 Netflix Ribbon实现的一套客户端负载均衡的工具。简单的说, Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负載均衡算法和服务调用。 Ribbon客户端组件提供一系列完善的配置项如连接超时,重...

qq_34125999的博客 3849

SpringCloud——Ribbon

一、概述   LB,即负载均衡(Load Balance),在微服务或分布式集群中经常用的一种应用。负载均衡简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用)。常见的负载均衡有软件Nginx,LVS,硬件 F5等。相应的在中间件,例如:dubbo和SpringCloud中均给我们提供了负载均衡,SpringCloud的负载均衡算法可以自定义。   负载均衡分为集中式LB和...

如不來的博客 1052

【SpringCloud】SpringCloud Ribbon详解

SpringCloud详解之Ribbon实战

酷酷的馫博客 1406

SpringCloud-Ribbon

server:spring:eureka:client:register-with-eureka: false #由于我们目前创建的应用是一个服务注册中心,而不是普通的应用,默认情况下,这个应用会向注册中心(也是它自己)注册它自己,设置为false表示禁止这种自己向自己注册的默认行为fetch-registry: false #由于我们目前创建的应用是一个服务注册中心,而不是普通的应用,默认情况下,这个应用会向注册中心(也是它自己)注册它自己,设置为false表示禁止这种自己向自己注册的默认行为。

vengu733的博客 1387

SpringCloud Netflix复习之Ribbon

Ribbon的核心功能,上手实战和源码验证

bazhuayu_1203的博客 1108

SpringCloud-02-Ribbon

Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将NetFlix的中间层服务连接在一起.Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等.简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器.我们也很容易使用Ribbon实现自定义的负载均衡算法. 1. 负载均衡 1.1 服务端负载均衡 服务端负载均衡一般是指 Nginx 或者 F5 之类的..

qq_20633779的博客 1365
上一篇: SpringCloud - Nacos详解
下一篇: SpringCloud - OpenFeign使用
程序员老石
博客等级 码龄8年 286粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值