Ribbot

241 阅读3分钟

Ribbot

Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具.

Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们很容易使用Ribbon实现自定义的负载均衡算法。

比如在上一篇文章Eureka中就是用了Ribbon的负载均衡,在客户模块中提到了RestTemplate

RestTemplate

  • 帮助文档
  • 简单的说它就是调用第三方接口的工具类,比如:我们在项目中经常要使用第三方的 Rest API 服务,比如短信、快递查询、天气预报等等。这些第三方只要提供了 Rest Api ,你都可以使用 RestTemplate 来调用它们。
  • 常用·方法 getForObject方法/getForEntity方法,返回对象为响应体中数据转化成的对象,基本上可以理解为Json 返回对象为ResponseEntity对象,包含了响应中的一些重要信息,比如响应头、响应状态码、响应体等

负载均衡的RestTemplate

在上一篇中我们使用注解 @LoadBalanced让 RestTemplate进行负载均衡的才可以调用Eureka中的暴露的接口,那问什么没有用到ribbon就已经实现的负载均衡呢,那我要ribbon有什么用呢?

打开maven依赖包

ribbot.jpg 原来Eureka已经帮我集成的ribbon包。

Ribbon

Ribbon在工作时分成两步第一步先选择 EurekaServer ,它优先选择在同一个区域内负载较少的server.第二步再根据用户指定的策略,在从server取到的服务注册列表中选择一个地址。其中Ribbon提供了多种策略:比如轮询、随机和根据响应时间加权。

IRule:根据特定算法中从服务列表中选取一个要访问的服务

  • com.netflix.loadbalancer.RoundRobinRule 轮询

  • com.netflix.loadbalancer.RandomRule 随机

  • com.netflix.loadbalancer.RetryRule 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试,获取可用的服务

  • WeightedResponseTimeRule 对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被

  • BestAvailableRule

    ​ 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务

  • AvailabilityFilteringRule 先过滤掉故障实例,再选择并发较小的实例

  • ZoneAvoidanceRule 默认规则,复合判断server所在区域的性能和server的可用性选择服务器

我们定义一个规则测试一下就用RoundRobinRule轮询,这里要注意这个自定义配置类不能放在@ComponentScan所扫描的当前包下以及子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,达不到特殊化定制的目的了。

ribbon1.jpg

@Configuration
public class RunRobin {

    @Bean
    public IRule myRule(){
        return new RoundRobinRule();
    }
}
  • 测试

    启动 7001->8001->8002->80记得将之前的集群修改为单机哦

    测试你会发现8001/8002会轮换进行调用,有兴趣可以尝试一下其他的。

有兴趣一定要看看源代码,研究研究算法