SpringCloudRibbon中的七种负载均衡策略
英语学习网站有哪些
负载均衡通器常有两种实现⼿段,⼀种是服务端负载均衡器,另⼀种是客户端负载均衡器,⽽我们今天的主⾓ Ribbon 就属于后者——客户端负载均衡器。
服务端负载均衡器的问题是,它提供了更强的流量控制权,但⽆法满⾜不同的消费者希望使⽤不同负载均衡策略的需求,⽽使⽤不同负载均衡策略的场景确实是存在的,所以客户端负载均衡就提供了这种灵活性。然⽽客户端负载均衡也有其缺点,如果配置不当,可能会导致服务提供者出现热点,或者压根就拿不到任何服务的情况,所以我们本⽂就来了解⼀下这 7 种内置负载均衡策略的具体规则。
illustrationRibbon 介绍
Ribbon 是 Spring Cloud 技术栈中⾮常重要的基础框架,它为 Spring Cloud 提供了负载均衡的能⼒,⽐如 Fegin 和 OpenFegin 都是基于 Ribbon 实现的,就连 Nacos 中的负载均衡也使⽤了 Ribbon 框架。
Ribbon 框架的强⼤之处在于,它不仅内置了 7 种负载均衡策略,同时还⽀持⽤户⾃定义负载均衡策略,所以其开放性和便利性也是它得以流⾏的主要原因。
服务端负载均衡器和客户端负载均衡器的区别如下图所⽰:
客户端负载均衡器的实现原理是通过注册中⼼,如 Nacos,将可⽤的服务列表拉取到本地(客户端),再通过客户端负载均衡器(设置的负载均衡策略)获取到某个服务器的具体 ip 和端⼝,然后再通过 Http 框架请求服务并得到结果,其执⾏流程如下图所⽰:
负载均衡设置
四级听力满分多少分
以 Nacos 中的 Ribbon 负载均衡设置为例,在配置⽂件 l 中设置如下配置即可:
1springcloud-nacos-provider: # nacos中的服务id
2 ribbon:
3 NFLoadBalancerRuleClassName: flix.loadbalancer.RoundRobinRule #设置负载均衡策略
因为 Nacos 中已经内置了 Ribbon,所以在实际项⽬开发中⽆需再添加 Ribbon 依赖了,这⼀点我们在 Nacos 的依赖树中就可以看到,如下图所⽰:
cloud是什么意思Ribbon 默认的负载均衡策略是轮询模式,我们配置 3 个服务提供者的执⾏结果如下图所⽰:
然后,我们再将 Ribbon 负载均衡策略设置为随机模式,配置内容如下:
springcloud-nacos-provider: # nacos中的服务id
ribbon:
NFLoadBalancerRuleClassName: flix.loadbalancer.RandomRule #设置随机负载均衡
重启客户端,执⾏结果如下图所⽰:
七种负载均衡策略
1、轮询策略yard
轮询策略:RoundRobinRule,按照⼀定的顺序依次调⽤服务实例。⽐如⼀共有 3 个服务,第⼀次调⽤服务 1,第⼆次调⽤服务 2,第三次调⽤服务3,依次类推。此策略的配置设置如下:
1springcloud-nacos-provider: # nacos中的服务id
2 ribbon:
郑州留学中介排名
3 NFLoadBalancerRuleClassName: flix.loadbalancer.RoundRobinRule #设置负载均衡
2、权重策略化妆基础教程
权重策略:WeightedResponTimeRule,根据每个服务提供者的响应时间分配⼀个权重,响应时间越长,权重越⼩,被选中的可能性也就越低。它的实现原理是,刚开始使⽤轮询策略并开启⼀个计时器,每⼀段时间收集⼀次所有服务提供者的平均响应时间,然后再给每个服务提供者附上⼀个权重,权重越⾼被选中的概率也越⼤。此策略的配置设置如下:
1springcloud-nacos-provider: # nacos中的服务id
2 ribbon:
带英文的网名3 NFLoadBalancerRuleClassName: flix.loadbalancer.WeightedResponTimeRule
star movies
3、随机策略
随机策略:RandomRule,从服务提供者的列表中随机选择⼀个服务实例。此策略的配置设置如下:
1springcloud-nacos-provider: # nacos中的服务id
2 ribbon:
3 NFLoadBalancerRuleClassName: flix.loadbalancer.RandomRule #设置负载均衡
4、最⼩连接数策略
最⼩连接数策略:BestAvailableRule,也叫最⼩并发数策略,它是遍历服务提供者列表,选取连接数最⼩的⼀个服务实例。如果有相同的最⼩连接数,那么会调⽤轮询策略进⾏选取。此策略的配置设置如下:
1springcloud-nacos-provider: # nacos中的服务id
high maintenance2 ribbon:
3 NFLoadBalancerRuleClassName: flix.loadbalancer.BestAvailableRule #设置负载均衡
5、重试策略
重试策略:RetryRule,按照轮询策略来获取服务,如果获取的服务实例为 null 或已经失效,则在指定的时间之内不断地进⾏重试来获取服务,如果超过指定时间依然没获取到服务实例则返回 null。此策略的配置设置如下:
1ribbon:
2 ConnectTimeout: 2000 # 请求连接的超时时间
3 ReadTimeout: 5000 # 请求处理的超时时间
4springcloud-nacos-provider: # nacos 中的服务 id
5 ribbon:
6 NFLoadBalancerRuleClassName: flix.loadbalancer.RandomRule #设置负载均衡
6、可⽤性敏感策略
可⽤敏感性策略:AvailabilityFilteringRule,先过滤掉⾮健康的服务实例,然后再选择连接数较⼩的服务实例。此策略的配置设置如下:
1springcloud-nacos-provider: # nacos中的服务id
2 ribbon:
3 NFLoadBalancerRuleClassName: flix.loadbalancer.AvailabilityFilteringRule
7、区域敏感策略
区域敏感策略:ZoneAvoidanceRule,根据服务所在区域(zone)的性能和服务的可⽤性来选择服务实例,在没有区域的环境下,该策略和轮询策略类似。此策略的配置设置如下:
1springcloud-nacos-provider: # nacos中的服务id
2 ribbon:
3 NFLoadBalancerRuleClassName: flix.loadbalancer.ZoneAvoidanceRule
总结
Ribbon 为客户端负载均衡器,相⽐于服务端负载均衡器的统⼀负载均衡策略来说,它提供了更多的灵活性。Ribbon 内置了 7 种负载均衡策略:轮询策略、权重策略、随机策略、最⼩连接数策略、重试策略、可⽤性敏感策略、区域性敏感策略,并且⽤户可以通过继承RoundRibbonRule 来实现⾃定义负载均衡策略。
最新2021整理收集的⼀些⾼频⾯试题(都整理成⽂档),有很多⼲货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,⾯试题整理等,需要获取这些内容的朋友点【关注】私信回复555即可免费领取!
感谢阅读