美文网首页
Ribbon-负载均衡策略

Ribbon-负载均衡策略

作者: 七喜丶 | 来源:发表于2022-04-23 21:32 被阅读0次

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

服务端负载均衡器的问题是,它提供了更强的流量控制权,但无法满足一同的消费者希望使用不同负载均衡策略的需求,而使用不同负载均衡策略的场景确实是存在的,所以客户端负载均衡就提供了这种灵活性。然而客户端负载均衡也有其缺点,如果配置不当,可能会导致服务提供者出现热点,或者压根就拿不到任何服务的情况。及了解一下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默认的负载均衡策略是轮询模式

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

总结

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

相关文章

  • Ribbon-负载均衡策略

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

  • Ribbon-负载均衡

    我们的服务都需要部署多实例的,然后实现负载均衡 负载均衡的两种方式 服务器端的负载均衡 客户端侧负载均衡 服务器端...

  • Nginx负载均衡配置

    基于轮询(Round Robin)的负载均衡配置 Nginx的负载均衡策略默认就是轮询。 Nginx负载均衡策略支...

  • spring cloud ribbon 客户端负载均衡策略

    负载均衡策略 AbstractLoadBalancerRule 负载均衡策略的抽象类,在该类中定义了负载均衡器IL...

  • SpringCloud系列之负载均衡Ribbon·5-配置负载均

    针对于服务的负载均衡策略优先级是最高的image.png 1.全局负载均衡策略--采取随机策略 下面的负载均衡策略...

  • dubbo负载均衡策略

    在集群负载均衡时,Dubbo提供了多种均衡策略,缺省为random随机调用。 可以自行扩展负载均衡策略,参见:负载...

  • 负载均衡

    负载均衡图例负载均衡.png 负载均衡策略 轮询 ip_hash 均衡参数 down 表示当前的服务不参与负载均衡...

  • Nginx负载均衡小知识

    Nginx 负载均衡配置Nginx 重试次数限制Nginx 超时重试 Nginx 负载均衡 负载均衡策略 roun...

  • Dubbo的负载均衡

    在集群负载均衡时,Dubbo 提供了多种均衡策略,缺省为 random 随机调用。 负载均衡策略 Random L...

  • 【深入浅出SpringCloud】I'm Ribbon

    【微服务>>>负载均衡】 一、简介 Ribbon是一个负载均衡组件,具有丰富的负载均衡策略...

网友评论

      本文标题:Ribbon-负载均衡策略

      本文链接:https://www.haomeiwen.com/subject/odzaertx.html