SpringCloud Ribbon中的7种负载均衡策略!

article/2025/10/28 13:31:31

91c9e8fd07d2e0998d0d9c6f70b1d0d0.png

作者 | 磊哥

来源 | Java中文社群(ID:javacn666)

转载请联系授权(微信ID:GG_Stone)

负载均衡通器常有两种实现手段,一种是服务端负载均衡器,另一种是客户端负载均衡器,而我们今天的主角 Ribbon 就属于后者——客户端负载均衡器。

服务端负载均衡器的问题是,它提供了更强的流量控制权,但无法满足不同的消费者希望使用不同负载均衡策略的需求,而使用不同负载均衡策略的场景确实是存在的,所以客户端负载均衡就提供了这种灵活性。然而客户端负载均衡也有其缺点,如果配置不当,可能会导致服务提供者出现热点,或者压根就拿不到任何服务的情况,所以我们本文就来了解一下这 7 种内置负载均衡策略的具体规则。

Ribbon 介绍

Ribbon 是 Spring Cloud 技术栈中非常重要的基础框架,它为 Spring Cloud 提供了负载均衡的能力,比如 Fegin 和 OpenFegin 都是基于 Ribbon 实现的,就连 Nacos 中的负载均衡也使用了 Ribbon 框架。

Ribbon 框架的强大之处在于,它不仅内置了 7 种负载均衡策略,同时还支持用户自定义负载均衡策略,所以其开放性和便利性也是它得以流行的主要原因。

服务端负载均衡器和客户端负载均衡器的区别如下图所示:b0fcd17cadce04ff7d8d4228141c1865.png客户端负载均衡器的实现原理是通过注册中心,如 Nacos,将可用的服务列表拉取到本地(客户端),再通过客户端负载均衡器(设置的负载均衡策略)获取到某个服务器的具体 ip 和端口,然后再通过 Http 框架请求服务并得到结果,其执行流程如下图所示:48ef6c3443f888b4eb4a8a3c4b967c18.png

负载均衡设置

以 Nacos 中的 Ribbon 负载均衡设置为例,在配置文件 application.yml 中设置如下配置即可:

springcloud-nacos-provider: # nacos中的服务idribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #设置负载均衡策略

因为 Nacos 中已经内置了 Ribbon,所以在实际项目开发中无需再添加 Ribbon 依赖了,这一点我们在 Nacos 的依赖树中就可以看到,如下图所示:b355e3db7b87201d0a5ceab509adab7c.pngRibbon 默认的负载均衡策略是轮询模式,我们配置 3 个服务提供者的执行结果如下图所示:3d1c6ed4ae6c54294dafaf4ee491d6a1.gif然后,我们再将 Ribbon 负载均衡策略设置为随机模式,配置内容如下:

springcloud-nacos-provider: # nacos中的服务idribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #设置随机负载均衡

重启客户端,执行结果如下图所示:bffb76e400c263e4aec79eb1382f9931.gif

7种负载均衡策略

1.轮询策略

轮询策略:RoundRobinRule,按照一定的顺序依次调用服务实例。比如一共有 3 个服务,第一次调用服务 1,第二次调用服务 2,第三次调用服务3,依次类推。此策略的配置设置如下:

springcloud-nacos-provider: # nacos中的服务idribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #设置负载均衡

2.权重策略

权重策略:WeightedResponseTimeRule,根据每个服务提供者的响应时间分配一个权重,响应时间越长,权重越小,被选中的可能性也就越低。它的实现原理是,刚开始使用轮询策略并开启一个计时器,每一段时间收集一次所有服务提供者的平均响应时间,然后再给每个服务提供者附上一个权重,权重越高被选中的概率也越大。此策略的配置设置如下:

springcloud-nacos-provider: # nacos中的服务idribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule

3.随机策略

随机策略:RandomRule,从服务提供者的列表中随机选择一个服务实例。此策略的配置设置如下:

springcloud-nacos-provider: # nacos中的服务idribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #设置负载均衡

4.最小连接数策略

最小连接数策略:BestAvailableRule,也叫最小并发数策略,它是遍历服务提供者列表,选取连接数最小的⼀个服务实例。如果有相同的最小连接数,那么会调用轮询策略进行选取。此策略的配置设置如下:

springcloud-nacos-provider: # nacos中的服务idribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.BestAvailableRule #设置负载均衡

5.重试策略

重试策略:RetryRule,按照轮询策略来获取服务,如果获取的服务实例为 null 或已经失效,则在指定的时间之内不断地进行重试来获取服务,如果超过指定时间依然没获取到服务实例则返回 null。此策略的配置设置如下:

ribbon:ConnectTimeout: 2000 # 请求连接的超时时间ReadTimeout: 5000 # 请求处理的超时时间
springcloud-nacos-provider: # nacos 中的服务 idribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #设置负载均衡

6.可用性敏感策略

可用敏感性策略:AvailabilityFilteringRule,先过滤掉非健康的服务实例,然后再选择连接数较小的服务实例。此策略的配置设置如下:

springcloud-nacos-provider: # nacos中的服务idribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.AvailabilityFilteringRule

7.区域敏感策略

区域敏感策略:ZoneAvoidanceRule,根据服务所在区域(zone)的性能和服务的可用性来选择服务实例,在没有区域的环境下,该策略和轮询策略类似。此策略的配置设置如下:

springcloud-nacos-provider: # nacos中的服务idribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.ZoneAvoidanceRule

项目源码

https://gitee.com/mydb/spring-cloud-alibaba-example

总结

Ribbon 为客户端负载均衡器,相比于服务端负载均衡器的统一负载均衡策略来说,它提供了更多的灵活性。Ribbon 内置了 7 种负载均衡策略:轮询策略、权重策略、随机策略、最小连接数策略、重试策略、可用性敏感策略、区域性敏感策略,并且用户可以通过继承 RoundRibbonRule 来实现自定义负载均衡策略。

是非审之于己,毁誉听之于人,得失安之于数。

公众号:Java中文社群

Java面试合集:https://gitee.com/mydb/interview

d8dff3f2ff6b63b0b366ece6bbf3b06e.gif

往期推荐

638eee8fadc051933a4f452dc4b4225d.png

SpringCloud Nacos + Ribbon 调用服务的 2 种方法!


6525d82546ba15c381dccab0407f6b72.png

Spring Cloud Alibaba Nacos 的 2 种健康检查机制!


6d2b5dd6b786b94e7cf5ddfc8bcf49f0.png

芭比扣了!Nacos中服务删除不了,肿么办?


77a707551d48d4f4c5eb6e1e29871a6b.gif


http://chatgpt.dhexx.cn/article/WspKdaag.shtml

相关文章

gateway网关负载均衡策略

前言 之前作业是使用 nacos注册中心来搭建有一个微服务,消费者必然要用到gateway网关来操作路由,并且配置负载均衡策略。 搭建微服务-文章链接:快速搭建微服务-Nacos_一码超人的博客-CSDN博客_微服务搭建nacos 添加一个gateway模块 配置文…

OpenFeign修改负载均衡策略

文章目录 前言一、如何实现二、实现步骤1. 创建一个配置类来把选择的负载均衡策略注册进容器2. 主启动类添加注解 总结 前言 在SpringCloud中,Ribbon可以实现服务调用和负载均衡,而OpenFeign基于注解加接口的服务调用方式比Ribbon看起来更加简洁&#x…

负载均衡策略 -- 轮询

我们可以先来看一下,现在我们在工地上,老板呢找了三个人来搬砖。 由于我们是使用的是轮询的策略,所以我们是这三个工地上的人在搬砖的时候,他们其实工作量是平均分配的。 比如说我们有砖头来第一块,我们会交给第一个…

【运维篇】负载均衡策略

文章目录 集中式负载均衡、进程内负载均衡几种常见的四层负载均衡的工作模式。(凤凰架构)负载均衡策略一、四层、七层负载均衡简介1、四层负载均衡2、七层负载均衡3.四到七层负载均衡区别 二、四层负载均衡实现:kube-proxy三、七层负载均衡实…

负载均衡及常见解决策略

负载均衡及常见解决策略 什么是负载均衡(Load Balance) 分布式系统中一个非常重要的概念,当访问的服务具有多个实例时,需要根据某种“均衡”的策略决定请求发往哪个节点,这就是所谓的负载均衡,原理是将数据…

面试官:什么是负载均衡?常见的负载均衡策略有哪些?

点击关注公众号:互联网架构师,后台回复 2T获取2TB学习资源! 上一篇:Alibaba开源内网高并发编程手册.pdf 一、负载均衡 负载均衡是云计算的基础组件,是网络流量的入口,其重要性不言而喻。 什么是负载均衡呢&…

Ribbon负载均衡策略

目录 1.基于Ribbon方式的负载均衡,Netflix默认提供了七种负载均衡策略, 2. LoadBalanced 1.基于Ribbon方式的负载均衡,Netflix默认提供了七种负载均衡策略, 对于SpringCloud Alibaba解决方案中又提供了NacosRule策略&#xff0…

nginx - 负载均衡配置-负载均衡策略

目录 知识点1:网站流量分析指标 什么是pv? 什么是uv? 什么是IP? 知识点2:正向代理和反向代理 知识点3:负载均衡实验 什么是负载均衡? IP地址规划: 实验拓扑图 知识点4&…

负载均衡

流量负载均衡介绍 1 负载均衡产生的背景 LB(Load Balance,负载均衡)是一种集群技术,它将特定的业务(网络服务、网络流量等)分担给多台网络设备(包括服务器、防火墙等)或多条链路&a…

Ribbon七种负载均衡策略详解

Ribbon是什么? 主要负责请求分发,例如一个服务节点集群:六台服务器部署着订单服务,用户请求过来了就要根据不同的负载策略分发请求到不同机器上,起到一个缓解请求压力的作用。其自身不会发起请求,这个在源…

负载均衡有哪些常见策略?

分析&回答 轮循 Round Robin 这种方法会将收到的请求循环分配到服务器集群中的每台机器,即有效服务器。如果使用这种方式,所有的标记进入虚拟服务的服务器应该有相近的资源容量 以及负载相同的应用程序。如果所有的服务器有相同或者相近的性能那么选…

负载均衡策略-七种策略

LoadBalancer LoadBalancer下面更底层的7种内置的负载均衡策略 RandomRule - 随性而为 RoundRobinRule - 按部就班 RandomRule是随性而为挑选节点,RobinRule却按部就班从一个节点一步一步地向后选取节点,既不会跳过一个,也不会原地踏步&am…

【Nginx】Nginx服务器之负载均衡策略(6种)

一、关于Nginx的负载均衡 在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器。 二、Nginx负载均衡策略 负载均衡用于从“upstream”模块…

负载均衡策略图文详解

一、「负载均衡」是什么 正如题图所示的这样,由一个独立的统一入口来收敛流量,再做二次分发的过程就是「负载均衡」,它的本质和「分布式系统」一样,是「分治」。 如果大家习惯了开车的时候用一些导航软件,我们会发现…

常用负载均衡及策略图解

文章目录 一、负载均衡二、负载均衡模型分类三、CDN负载均衡四、LVS负载均衡4.1 LVS 支持的三种模式4.1.1 DR 模式4.1.2 TUN 模式4.1.3 NAT 模式 4.2 LVS 基于 Netfilter 的框架实现 五、负载均衡策略是什么六、常用负载均衡策略图解6.1 轮询6.2 加权轮询6.3 最少连接数6.4 最快…

关于0范数、1范数和无穷范数

若 则p范数 p取0时对应0范数,p取1时对应1范数,p取无穷大时对应无穷范数 //LaTeX真的好用 【注意理解】当p取无穷大时,最终只与元素中绝对值最大的元素有关,证明如下:

向量和矩阵的 1范数、2范数

1.向量的范数:0范数,向量中非零元素的个数。 1范数,为绝对值之和。 2范数,就是通常意义上的模。 无穷范数,就是取向量的最大值。 但是向量的范数和矩阵的范数关系不大,百度了好久也没看到狠心的东西&…

向量的范数norm:1范数、2范数、无穷范数;矩阵的行范数、列范数

0范数: 向量中非零元素的个数。1范数: 为绝对值之和。2范数: 通常意义上的模。无穷范数:取向量的最大值。 转自:范数对于数学的意义?1范数、2范数、无穷范数

向量的1范数,2范数,无穷范数,KNN中的Lp距离

L-0范数:用来统计向量中非零元素的个数。 L-1范数:向量中所有元素的绝对值之和。 L-2范数:欧式距离。 L-∞范数:计算向量中的最大值。 你也可以这样理解 1-范数: ║ x ║ 1 │ x 1 │ │ x 2 │ … │ x n │ ║…