Spring Cloud Ribbon原理解析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud Ribbon原理解析相关的知识,希望对你有一定的参考价值。
参考技术A 客户端负载均衡,指调用者自己决策调用哪个服务,类似于我们买票时,自行决定去哪个窗口,我们就可以做到自己观察哪个窗口人少,然后就去哪个窗口排队。这就要求客户端自带负载均衡器,而且可以获取到当前被调用服务的状态列表。服务器端负载均衡,指所有调用者都先指向一个公共的负载均衡器,然后由负载均衡器经过一定算法对请求进行导向和分流,类似于银行办理业务时,抽号排队。
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套 客户端 负载均衡工具,Ribbon客户端组件提供一系列完善的配置,如超时,重试等。通过Load Balance获取到服务器提供的所有机器实例,Ribbon会自动基于某种算法去调用这些服务,Ribbon 也可以实现自定义负载均衡算法。
由于Eureka 已经集成了Ribbon,所以可以结合Eureka使用也可以单独使用Ribbon 的 Starter。
使用@LoadBalanced注解添加在RestTemplate。
然后通过application 的配置修改可以改变轮询算法。
servicename.ribbon.NFLoadBalanceRuleClassName = com.netflix.loadbalancer.randomrule
<clientName>.ribon.<key> = <value>
key value 可以在propertiesFactors查看。
服务器端之所以可以不指定IP,而通过指定server name 来完成RPC调用,是因为客户端已经可以获取到服务器端的列表,其实是客户端缓存了所有的服务器列表,然后通过替换servername 到 ip地址实现的hhttp请求访问,Ribbon的工作原理,就是使用拦截器将缓存中的服务列表经过一定算法对server name 进行替换。
(1)RoundRobinRule:轮询;
(2)RandomRule:随机;
(3)AvailabilityFilteringRule:会先过滤掉由于多次访问故障而处于断路器状态的服务,还有并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问;
(4)WeightedResponseTimeRule:根据平均响应时间计算所有服务的权重,响应时间越快的服务权重越大被选中的概率越大。刚启动时如果统计信息不足,则使用RoundRobinRule(轮询)策略,等统计信息足够,会切换到WeightedResponseTimeRule;
(5)RetryRule:先按照RoundRobinRule(轮询)策略获取服务,如果获取服务失败则在指定时间内进行重试,获取可用的服务;
(6)BestAvailableRule:会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务;
(7)ZoneAvoidanceRule:复合判断Server所在区域的性能和Server的可用性选择服务器;
1.在主启动类加入@RibbonClient(name = “所要使用当前算法的微服务名称”,configuration = MySelfRule.class)
代表使用自定义的java文件
2.在其他的包下建立算法类,需要符合IRule类的规则,需要extends AbstractLoadBalancerRule
3.复写Irule 接口的choose方法,将自己的算法写进去。
以上是关于Spring Cloud Ribbon原理解析的主要内容,如果未能解决你的问题,请参考以下文章
撸一撸Spring Cloud Ribbon的原理-负载均衡策略