一、什么是Ribbon
Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。
二、负载均衡策略
Ribbon的负载均衡规则是一个叫做IRuIe的接口来定义的,每一个子接口都是一种规则:
RandomRule:随机策略
RoundRobinRule:轮询
ZoneAvoidanceRule:默认策略
三、如何修改负载均衡的策略——IRule
上面看到了所有的负载均衡策略都是通过IRule接口实现的所以,第一种方式可以在启动类中重新定义一个IRule注入到Bean中--然后在新的类中的指定我们的新策略(这种方式是全局的一旦配置,全局将使用这种方式)
//例如:默认的负载均衡策略为轮询 我们想要改为随机 //在启动类中重新注入一个新规则 @Bean public IRule randomRule(){ return new RandomRule(); }
第二种方式:通过配置文件去配置负载均衡的规则(可以指定某个服务)
#指定某一个服务进行某一种策略 #NFLoadBalancerRuleClassName 类名 #服务名 service1: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #随机策略
四、Ribbon 饥饿加载
基于懒汉饿汉的思维
当我们使用Ribbon进行负载均衡的时候 发现 第一次的请求往往很费时间 是第二次或者后面请求时间的十几二十倍 这是为什么呢?
这是因为 Ribbon默认采用懒加载方式:即第一次访问的时候才去创建LoadBalanceClient,请求时间很长,之后的请求时间就很短
饥饿加载:饥饿加载会在项目启动时创建,降低第一次访问的耗时 配置饥饿加载——在配置文件中配置
ribbon: eager-load: enable: true #开启饥饿加载 clients: service #指定对某一个服务使用饥饿加载 #service 服务名称 ======================================================================== ribbon: eager-load: enable: true #开启饥饿加载 clients: - service1 #指定对某些服务使用饥饿加载 #service 服务名称 - service2 - service3