0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

jf_78858299 来源:Java中文社群 作者:磊哥 2023-05-11 17:32 次阅读

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

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

Ribbon 介绍

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

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

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

负载均衡设置

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

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

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

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

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

7种负载均衡策略

1.轮询策略

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

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

2.权重策略

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

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

3.随机策略

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

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

4.最小连接数策略

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

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

5.重试策略

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

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

6.可用性敏感策略

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

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

7.区域敏感策略

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

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

项目源码

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

总结

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

阿Q说代码专注于后端威廉希尔官方网站 栈分享:文章风格多变、配图通俗易懂、故事生动有趣

90篇原创内容

公众号

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • spring
    +关注

    关注

    0

    文章

    340

    浏览量

    14341
  • 负载均衡器
    +关注

    关注

    0

    文章

    18

    浏览量

    2583
收藏 人收藏

    评论

    相关推荐

    路由器负载均衡怎么配置

    路由器负载均衡是一重要的网络威廉希尔官方网站 ,它能够将多个网络连接的流量分配到多个路由器上,以提高网络的性能和稳定性。本文将详细介绍路由器负载均衡的配
    的头像 发表于 12-13 11:17 3335次阅读

    电池管理系统均衡及管理策略

    各设计了一简单的的控制策略,供大家学习理解之用。被动型均衡被动型均衡原理:被动均衡又称有损均衡
    发表于 04-07 10:43

    结构化P2P自适应混合负载均衡策略

    本文在深入研究已有负载均衡策略的基础上,提出了一建立在结构化P2P 上基于Chord 的自适应高可用性混合负载
    发表于 08-14 16:25 17次下载

    基于应用层负载均衡策略的分析

    基于应用层负载均衡策略的分析
    发表于 03-26 08:28 8次下载

    HBase负载均衡分析及优化策略

    HBase负载均衡分析及优化策略_黄伟建
    发表于 01-03 17:41 0次下载

    面向软件即服务的负载均衡策略建模与分析

    为提高软件即服务( SaaS)应用中资源的访问效率,提出支持SaaS服务重要特征的负载均衡策略。首先,结合SaaS服务的多租户和高度可伸缩两大特性,提出一基于租户请求分流、在局部和全
    发表于 12-07 14:14 0次下载

    基于数据热点的MongoDB负载均衡策略

    平衡.但是在实际的生产环境,节点之间数据访问热度不同也会导致负载失衡,特别是出现节点过热的情况.针对这一问题,引入Markov随机过程,提出一基于Markov预测模型的负载
    发表于 01-04 15:31 0次下载
    基于数据热点的MongoDB<b class='flag-5'>负载</b><b class='flag-5'>均衡</b><b class='flag-5'>策略</b>

    基于负载转移的节点带宽资源均衡策略

    针对采用了网络编码威廉希尔官方网站 的对等网( P2P)流媒体系统应用,提出一基于负载转移的节点带宽资源均衡策略,尽可能避免节点选择邻居节点并请求带宽资源的随意性形成的节点过载。在
    发表于 01-08 16:42 0次下载
    基于<b class='flag-5'>负载</b>转移的节点带宽资源<b class='flag-5'>均衡</b><b class='flag-5'>策略</b>

    全面剖析HAProxy 负载均衡

    HAProxy是什么 HAProxy 是一个免费的负载均衡软件,可以运行于大部分主流的 Linux 操作系统上。 HAProxy 提供了L4(TCP)和L7(HTTP)两
    的头像 发表于 06-28 09:22 2296次阅读
    全面剖析HAProxy <b class='flag-5'>负载</b><b class='flag-5'>均衡</b>器

    解密负载均衡威廉希尔官方网站 和负载均衡算法

    负载均衡器是一软件或硬件设备,它起到了将网络流量分散到一组服务器的作用,可以防止任何一台服务器过载。负载均衡算法就是
    的头像 发表于 11-12 09:16 1132次阅读

    Nacos、OpenFeign、Ribbon组件协调工作的原理

        Nacos 如何进行服务自动注册? Ribbon OpenFeign 总结 前几天有个大兄弟问了我一个问题,注册中心要集成SpringCloud,想实现SpringCloud负载
    的头像 发表于 05-22 10:46 1031次阅读
    Nacos、OpenFeign、<b class='flag-5'>Ribbon</b>组件协调工作的原理

    负载均衡策略有哪些? 负载均衡的三方式?

    负载均衡策略有哪些? 负载均衡策略有如下: 轮询(Round Robin):按照请求的顺序轮
    的头像 发表于 07-25 14:13 2549次阅读

    如何确定适合的负载均衡比例

    路由器的负载均衡是一应用于网络的威廉希尔官方网站 ,它可以平衡网络流量的分配,提高网络的性能和稳定性。在配置路由器的负载
    的头像 发表于 12-15 10:36 1573次阅读

    天翼云弹性负载均衡介绍

    负载均衡(Load Balancing)是一优化资源分配的威廉希尔官方网站 ,主要用于在网络环境中分散工作负载,以提高系统的响应速度、吞吐量以及可靠性。在互联网服务
    的头像 发表于 10-25 16:20 549次阅读
    天翼云弹性<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>介绍

    华纳云:什么是负载均衡?优化资源利用率的策略

    负载均衡是现代计算机网络架构不可或缺的一部分,它通过智能分配请求和任务,确保系统资源的高效利用。本文将探讨负载均衡的概念、工作原理、优化资
    的头像 发表于 10-28 16:07 152次阅读