Ribbon使用方法

Ribbon的概述

Ribbon是Spring Cloud微服务体系的弹性拓张组件,与其他组件结合可以发挥出强大的作用。此外,它具备了丰富的负载均衡策略,重试机制。支持多协议的异步与响应模型,容错,缓存与批处理等功能可以让你很容易的构建自己的微服务架构.
复制代码

Ribbon与负载均衡

负载均衡常见的有软件负载很硬件负载,代表的产品蛋Nginx与F5;Ribbon和他们的区别就是集中式负载均衡与进程内负载均衡
的区别。集中式负载均衡是指位于因特网与服务提供者之间,并负责吧网络请求转发到各个提供单位,这个时候Nginx与F5就
可以划分为一类了,也可以成为服务端负载均衡策略。进程内负载均衡就是从一个实例库选取一个实例进行流量导入,在微
服务的范畴内,实例库一般是存储在Eureka,Consul,Zookeeper,etcd这样的注册中心。
复制代码

Ribbon负载均衡策略与自定义配置

ribbon的负载均衡策略主要包括以下几种:

策略类命名描述
RandomRule随机策略随机选择server
RoundRobinRule轮询策略按顺序选择server
RetryRule重试策略在一个配置时间段内当选择server不成功,则一直尝试选择一个可用的server
BestAvailableRule最低并发策略逐个考察server,如果server断路器打开,则忽略,在选择其中并发链接最低的server
AvailabilityFilteringRule可用过滤策略过滤掉一直链接失败并标记为circuit tripped的server,过滤掉哪些高并发链接
ResponseTimeWeightedRule响应时间加权策略根据server的响应时间分配权重。响应时间越长,权重越低,被选择到的概略就越低,权重越高,被选择到的概率就越高。
ZoneAvoidanceRule区域权衡策略综合判断server所在的区域的性能和server的可用性轮询选择server,并且判定一个AWS Zobe的运行性能是否可用,提出不可用的Zone中所有server。

全局策略设置

    @Configuration
    public class MyConfiguration{
        @Bean
        public IRule ribbonRule(){
        return new RandomRule();
        }
    }
复制代码

基于主机的策略设置

如果我们使用不想针对全局设置,那么可以针对服务源进行特殊的策略配置,可以使用@RibbonClient注解,只需稍微修改上面的代码即可,@RibbonClient注解主要用来对原服务进行约束。

    @Configuration
    @AvoidScan
    public class MyConfiguration{
        @Bean
        public IRule ribbonRule(){
        return new RandomRule();
        }
    }
在启动类里面加上如下的注解即可完成针对具体的服务源使用不同的负载均衡策略,使用@AvoidScan注解告诉Spring容器不要去扫描该注解,具体的服务源是使用特定的配置指定特定负载均衡的策略。
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@RibbonClient(name = "ribbon-client",configuration = MyConfiguration.class)
@ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,value = AvoidScan.class)})
public class RibbonBalancerApplication {
    //定义一个负载均衡的RestTemplate
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(RibbonBalancerApplication.class,args);
    }
}
复制代码

除了上面的针对服务源使用不同的策略之外,还可以使用@RibbonClients针对多个服务源进行策略的指定。

@RibbonClients(value = {
        @RibbonClient(name = "ribbon-client",configuration = MyConfiguration.class),
        @RibbonClient(name = "ribbon-client-b",configuration = MyConfiguration.class)
})
@ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,value = AvoidScan.class)})
复制代码

基于配置文件的策略设置

使用SpringBoot的优点是习惯优于配置,大多数的配置都是SpringBoot已经帮助我们配置好的,但是少数的情况下,我们可以通过少量配置文件去自义我们的字定义的配置我们的负载均衡策略,具体的语法如下:

clientname:
    ribbon:
       NFLoadBalancerRuleClassName: com.netflix.loadBalancer.RandomRule 
复制代码

Ribbon超时与重试

使用HTTP发起请求,免不了要经历极端的环境,此时对调用进行时限控制以及时限之后的重试很重要。 正常情况我们可以使用下面的代码开启ribbon重试的机制,但是F版之后就默认开启了,无需手动配置重试机制的开启,我们要做的就是要做的就是要配置时限。

使用spring.cloud.loadbalancer.retry.enabled: true开启服务重试的机制

//ribbon内部的配置类
@ConfigurationProperties("spring.cloud.loadbalancer.retry")
public class LoadBalancerRetryProperties {
    private boolean enabled = true;

    public LoadBalancerRetryProperties() {
    }

    public boolean isEnabled() {
        return this.enabled;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }
}
复制代码

具体的配置可以使用下面的配置

ribbon-client:
  ribbon:
    ConnectTimeout: 3000
    ReadTimeout: 60000
    MaxAutoRetries: 1 #对第一次请求的服务的重试次数
    MaxAutoRetriesNextServer: 1 #要重试的下一个服务的最大数量(不包括第一个服务)
    OkToRetryOnAllOperations: true
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule#
复制代码

Ribbon的饥饿加载

Ribbon在进行客户端负载均衡的时候并不是在启动的时候就加载上下文的,实在实际请求的时候才加载,有点像servlet的第一次请求的时候才去生成实例,这回导致第一次请求会比较的缓慢,甚至可能会出现超时的情况。所以我们可以指定具体的客户端名称来开启饥饿加载,即在启动的时候便加载素养的配置项的应用上下文。

ribbon:
  eager-load:
    enabled: true
    clients: ribbon-client-a, ribbon-client-b, ribbon-client-c
复制代码

转载于:https://juejin.im/post/5cce2ed0f265da039955ed51

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值