Ribbon介绍
Ribbon是由Netflix公司推出的开源软件,是基于HTTP和TCP协议的,其主要功能是实现客户端软件的负载均衡算法。
Spring Cloud中Ribbon就是基于Netflix公司的Ribbon实现的。它不需要单独部署,但是却存在于整个微服务中。前面学习的Eureka里面有Ribbon,后面学习的OpenFeign也是基于Ribbon实现的。
Ribbon原理
内部基于ILoadBalancer实现的(代码层面)的继承关系如下:
Ribbon的Maven依赖如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
Ribbon负载均衡策略:
RoundRobinRule --轮询 默认的不需要配置剩下都需要手动配置
WeightedResponseTimeRule --权重轮询策略,根据响应时间来判断比例,常用
RandomRule --随机策略
BestAvailableRule --最小并发数策略,性能好的服务器执行的比较多
RetryRule --重试策略,正常负载均衡选中的服务死了也就返回死的,而他就会再轮询要么全部失败,要么直到成功
AvailabilityFilteringRule --可用性敏感策略,他会过滤两种比较差的服务,一个是一直连接失败的,一个是服务并发高的有局限性可能都连不上
ZoneAvoidDanceRule --区域敏感性策略,策略跟可用性敏感很像,他会抛弃响应较差的服务器,但这个不是单个了,而是区域,过段时间又会使用
Ribbon全局负载均衡策略设置:
@Configuration
public class RibbonConfig {
/**
* 设置全局负载均衡策略:随机策略
*/
@Bean
public IRulerule() {
return new RandomRule();
}
}
Ribbon配置文件配置:
#全局配置
ribbon:
ConnectTimeout: 5000#请求连接的超时时间 默认的时间为1秒
ReadTimeout: 5000#请求处理的超时时间
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule#随机轮询
#局部配置
# service-provicer 是需要调用的服务名称
service-provicer:
ribbon:
OkToRetryOnAllOperations: true#对所有请求都进行重试
MaxAutoRetries: 2#对当前实例的重试次数
MaxAutoRetriesNextServer: 0#切换实例的重试次数
ConnectTimeout: 3000#请求连接的超时时间
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule#随机轮询
ribbon.NFLoadBalancerClassName 指负载均衡器类路径
ribbon:NFLoadBalancerRuleClassName 指定负载均衡算法类路径
ribbom:NFLoadBalancerPingClassName 指定检测服务存活的类路径
ribbon:NIWSServerListClassName 指定获取服务列表的实现类路径
ribbon:NIWSServerListFilterClassName 指定服务的 Filter 实现类路径
提示:前面加服务名就是局部