一、什么是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
```