博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ribbon使用方法
阅读量:6855 次
发布时间:2019-06-26

本文共 3673 字,大约阅读时间需要 12 分钟。

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

你可能感兴趣的文章
laravel package 推荐,数据备份
查看>>
Synchronized锁在Spring事务管理下,为啥还线程不安全?
查看>>
环境变量PATH cp命令 mv命令 文档查看cat/more/less/head/tail
查看>>
阿里云亮相2019联通合作伙伴大会,边缘计算等3款云产品助力5G时代产业数字化转型...
查看>>
dubbo源码分析-服务端发布流程-笔记
查看>>
阿里云发布Apsara SA系列混合云存储阵列
查看>>
GoJS教程:链接模版
查看>>
QListWidget方式显示缩略图
查看>>
金三银四:蚂蚁金服JAVA后端面试题及答案之二面
查看>>
Ubuntu 外网不通解决方案
查看>>
OSChina 周六乱弹 —— 历史总是惊人的相似
查看>>
MySQL 大小写
查看>>
Lync 2013部署图片赏析-证书服务安装配置
查看>>
HTML5 本地缓存 (web存储)
查看>>
tomcat redis session共享(包含redis安全设置)
查看>>
iptables中DNAT、SNAT和MASQUERADE的作用
查看>>
kvm命令学习记录
查看>>
小菜鸡进阶之路-First week
查看>>
ORACLE 10g SYSAUX表空间快速增长之WRH$_ACTIVE_SESSION_HISTORY篇
查看>>
我的友情链接
查看>>