Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具(这里区别于nginx的负载均衡)。简单来讲,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix中间服务链接在一块儿。Ribbon客户端组件提供一系列完善的配置项如链接超时,重试等。再简单点说,就是在配置文件中列出Load Balancer后面全部的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询、随机链接等)去链接这些机器。固然,咱们也很容易使用Ribbon实现自定义的负载均衡算法。java
Ribbon官网:https://github.com/Netflix/ribbonnginx
本项目的地址:https://github.com/Simple-Coder/microservice-demo-studygit
IRule:根据特定算法从服务列表中选取一个要访问的服务,官网源码地址以下:github
https://github.com/Netflix/ribbon/blob/master/ribbon-loadbalancer/src/main/java/com/netflix/loadbalancer/IRule.java,IRule的继承关系图以下:算法
①RoundRobinRule:简单轮询数据库
②RandomRule:随机浏览器
③AvailabilityFilteringRule:先过滤掉因为屡次访问故障而处于断路器跳闸状态的服务,还有并发链接数量超过阈值的服务,而后对剩余的服务列表按照轮询策略进行访问。服务器
④WeightedResponseTimeRule:根据平均响应时间计算全部服务的权重,响应时间越快服务权重越大,被选中的几率越高,刚启动时若是统计信息不足,则使用RoundRibbonRule策略,等统计信息足够,会切换到WeightedResponseTimeRule并发
⑤RetryRule:先按照RoundRobinRule的策略获取服务,若是获取服务失败则在指定时间会进行重试,获取可用的服务负载均衡
⑥BestAvailableRule:先过滤掉因为屡次访问故障而处于断路器跳闸状态的服务,而后选择一个并发量最小的服务
⑦ZoneAvoidanceRule:默认规则,符合判断server所在区域的性能和server的可用性选择服务器
在这里要特别注意:官方文档明确给出警告,这个自定义的配置类不能放在@ComponentScan所扫描的当前包及子包下,不然咱们自定义的这个配置类就会被全部Ribbon客户端所共享,也就不能达到特殊化定制的目的了。
需求:依旧轮询策略,可是加上新的需求,每一个服务器要求被调用3次。也就是之前每台机器一次,如今每台机器5次。参考官网源码地址以下:
浏览器访问消费方提供的地址:http://localhost:7001/consumer/get/all,
不断访问该地址,确实发现每一个服务调用3次,至此自定义的负载均衡算法小练习已经完成!
①Ribbon是客户端、负载均衡的工具(区别于nginx)
②框架自带7种负载均衡算法
③自定义负载均衡算法的使用(启动类添加@RibbonClient、配置类不能在启动类扫描包下,不然全部Ribbon客户端都会生效该配置)
④本代码已经上传:https://github.com/Simple-Coder/microservice-demo-study