前言

在上次记录中,后台调用的http://demo-user/demouser/user/test并不是一个直接可用的地址,Ribbon将其拦截拉取eureka的服务列表,然后选择其中一个地址进行请求。

负载均衡流程

当接口调用通过@LoadBalanced注解是,会进入RibbonLoadBalancerClient,向DynamicServerListLoadBalancer传服务的id(服务名),然后从eureka注册中心拉取服务列表,DynamicServerListLoadBalancer获取服务列表后通过IRule的策略选择一条返回给RibbonLoadBalancerClient,然后修改最初的url为ip和port的形式进行请求提供方。

负载均衡策略

负载均衡策略
内置负载均衡 规则描述
RoundRobinRule 简单轮询服务列表。他是Ribbon默认的负载均衡规则。
AvailabilityFilteringRule

对以下两种服务器进行忽略:

(1)在默认情况下,这台服务器如果3次连接失败,着他服务器就会被设置为“短路”状态。短路状态将持续30s,如果再次连接失败,短路的持续时间就会几何级的增加.

(2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了此规则将会被忽略。并发连接数上限,可以由客户端的<clientName><cllientConfigNameSpace>ActiveConnetionsLimit属性进行配置。

WeightedResponseTimeRule 为每一个服务器授予一个权重值。服务器的响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。
ZoneAvoidanceRule(默认) 以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房,一个机架等,然后对Zone里面的呢多个服务进行轮询
BestAvailableRule 忽略那些短路的服务器,并选择并发数低的服务器。
RandomRule 随机选择一个可用的服务器。
RetryRule 重试机制的选择逻辑。

调整负载均衡的规则

代码实现

在代码中定义新的IRule,过程中发现IRule引入失败,需要在pom中添加以下依赖

        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.netflix.ribbon/ribbon -->
<dependency>
<groupId>com.netflix.ribbon</groupId>
<artifactId>ribbon</artifactId>
<version>2.7.18</version>
</dependency>

如果将默认策略设置为随机策略,则在启动类中完成以下代码:

    @Bean
public IRule randomRule(){
return new RandomRule();
}

这种方案作用于全局

配置文件实现

在application中配置如下:

demo-user: #服务名
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #策略

然后将启动类的代码注释,重启order服务,当调用接口是报错java.lang.NoSuchMethodError,因为之前IRule没有引入成功,所以在pom中另外引用了ribbon依赖,所以现在在匹配配置文件时出现冲突,此时代码不需要此依赖,将上方的依赖删除即可成功。

这种方案作用域单独的服务。

饥饿加载

Ribbon默认采用懒加载,即第一次访问时创建LoadBalanceClient,请求时间过长。

饥饿加载会在项目启动时创建,降低第一次访问的耗时,通过以下配置开启饥饿加载:

ribbon:
eager-load:
enabled: true
clients:
- demo-user

结语

配置可能不生效,因为依赖引不进来

和springboot以及cloud版本有关,可以试试这对版本

   <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.9.RELEASE</version>
<relativePath/>
</parent>
...
<!-- springCloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR10</version>
<type>pom</type>
<scope>import</scope>
</dependency>

学习spring cloud记录5-Ribbon负载均衡的更多相关文章

  1. Spring Cloud微服务Ribbon负载均衡/Zuul网关使用

    客户端负载均衡,当服务节点出现问题时进行调节或是在正常情况下进行 服务调度.所谓的负载均衡,就是当服务提供的数量和调用方对服务进行 取舍的调节问题,在spring cloud中是通过Ribbon来解决 ...

  2. spring cloud: zuul(三): ribbon负载均衡配置

    zuul的routes配置下path/url组合不支持负载均衡 下面介绍zuul的routes配置下的path/serviceId负载均衡配置 spring-boot-user微服务开启了:7901, ...

  3. 使用 Spring Cloud LoadBalancer 实现客户端负载均衡

    使用 Spring Cloud LoadBalancer 实现客户端负载均衡 作者:Grey 原文地址: 博客园:使用 Spring Cloud LoadBalancer 实现客户端负载均衡 CSDN ...

  4. Spring Cloud 客服端负载均衡 Ribbon

    一.简介   Spring Cloud Ribbon 是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的.它不像服务注册中心.配置中心.API网关那样独立部署, ...

  5. SpringCloud学习笔记(2):使用Ribbon负载均衡

    简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具,在注册中心对Ribbon客户端进行注册后,Ribbon可以基于某种负载均衡算法,如轮询(默认 ...

  6. SpringCloud的入门学习之概念理解、Ribbon负载均衡入门

    1.Ribbon负载均衡,Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端.负载均衡的工具. 答:简单的说,Ribbon是Netflix发布的开源项目,主要功能 ...

  7. spring cloud学习笔记三 Feign与Ribbon负载均衡的区别

    一.Feign的介绍 Feign一般比较书面的解释是:Feign是一个声明式的WebService客户端,使用Feign编写的WebService客户端更加简单,他的使用方法是定义一个接口,然后在上线 ...

  8. 2.【Spring Cloud Alibaba】实现负载均衡-Ribbon

    负载均衡的两种方式 如何实现负载均衡 目前已经实现让A总能找到B,如何实现负载均衡 负载均衡的两种方式 服务器端负载均衡 客户端负载均衡 使用Ribbo实现负载均衡 Ribbon是什么 ==Netfl ...

  9. Spring Cloud ---- 服务消费与负载均衡(Rest + Ribbon )

    上一篇主要写了基于Eurake的服务的注册,主要就是创建注册中心,创建服务者,将服务者注册到注册中心,完成服务的暴露.这一篇主要写服务的消费与服务消费的负载均衡. 服务的调用方式有两种,Rest + ...

  10. 4.Spring Cloud初相识--------Feign负载均衡

    前言: 在上一节里,我们学习了ribbon的使用. 我们了解到ribbon是一个客户端负载均衡机制. 而我们今天要讲的Feign呢,也是一款客户端负载均衡机制. 或者这样说,Feign封装了ribbo ...

随机推荐

  1. Packet Chasing:通过缓存侧信道监视网络数据包

    摘要 本文介绍了一种对网络的攻击--Packet Chasing,这种攻击不需要访问网络,无论接收数据包的进程的特权级别如何,都能发挥作用.一个间谍进程可以很容易地探测和发现网络驱动程序使用的每个缓冲 ...

  2. AutoFac(三)——装配扫描(批量注册之扫描类型)

    一.装配扫描 Autofac允许通过常规组装的方式去注册组件(构造方法.实例.lambda表达式等),您可以扫描和注册单个类型,也可以具体的扫描Autofac模块去注册. 1.扫描类型 除了已知的的常 ...

  3. C#/.NET/.NET Core技术前沿周刊 | 第 36 期(2025年4.21-4.27)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  4. 17.8K star!完美超越宝塔的产品,像呼吸一样部署应用,这款开源神器绝了!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 Dokploy是一个强大的开源平台,旨在简化全栈 Web 应用的开发和部署.通过其直观的界面 ...

  5. 电脑ocr软件

    天若ocr 体积小,可以隐藏任务栏,但有时候识别度不好,停止更新了,新项目为树洞ocr github: https://github.com/AnyListen/tianruoocr/releases ...

  6. 首发 最新AWVS/Acunetix Premium V24.8高级版漏洞扫描器(最新版)Windows/Linux下载

    前言 Acunetix Premium 是一种 Web 应用程序安全解决方案,用于管理多个网站.Web 应用程序和 API 的安全.集成功能允许您自动化 DevOps 和问题管理基础架构. Acune ...

  7. 信息资源管理综合题之“某国企投资IT应用人员减少但生成率没有实质性变化的IT黑洞问题”

    一.某大型国企在IT应用上投资了2000万美元,虽然蓝领工人数量大幅减少,但实际生产率并未有实质性变化 1.企业在IT应用上的巨额投资并未达到预期目标的这种现象被称为什么? 2.产生这现象的原因有哪些 ...

  8. 马尔柯夫的"概率转换和市场份额和概率矩阵"

    案例一 案例二 分析转移概率矩阵求法 分析求9月份各厂家分别拥有的市场份额  案例3 案例4 分析先算第二年,再根据第二年算第三年 问题2的解法:根据第二年市场份额算第三年的市场份额 案例5:确定平衡 ...

  9. vue3 基础-全局组件和局部组件

    组件和页面的关系可以理解为, 组件是页面的一部分. 形象地理解组件 就和盖房子一样的, 可以将房子粗略拆分3个组件(组成部分) 房顶, 房身, 地基. 同时房顶又可以拆分 ..... 这样在极限的情况 ...

  10. vue3 学习-初识体验-组件 component

    组件可以简单理解为 "页面构成的一部分". 组件化是 Vue 最为重要的设计理念之一吧. 早期的前端页面基本上就拆分为一个个的html, css, js 文件, 然后不断" ...