
一、概念
- Spring Cloud Ribbon 是 客户端的软件负载均衡算法和服务调用。 Ribbon 客户端就是在配置 文件中 列出 LoadBalancer(简称 LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如 简单轮询、随机连接等)去连接这些机器。
二、负载均衡策略
- 轮询(默认):***.***flix.loadbalancer.RoundRobinRule
- 随机:***.***flix.loadbalancer.RandomRule
- 轮询基础上添加重试: ***.***flix.loadbalancer.RetryRule
- 轮询基础上权重越大越容易被选择:***.***flix.loadbalancer.WeightedResponseTimeRule
- 选择并发较小的实例:***.***flix.loadbalancer.BestAvailableRule
- 过滤掉宕机服务后选择并发较小的:***.***flix.loadbalancer.AvailabilityFilteringRule
- 过滤掉不在同一时区并且宕机的服务后选择并发较小的:***.***flix.loadbalancer.ZoneAwareLoadBalancer
三、基础代码
@Bean
@LoadBalanced //赋予RestTemplate 具有Ribbon负载均衡
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Resource private DiscoveryClient discoveryClient;
@PostConstruct
public void initDiscovery() {
discoveryClient.getInstances("order"); //根据服务注册名称获取服务信息
}
@Bean
public IRule myRule(){ return new RandomRule();}
- 基本调用
- ip调用:restTemplate.getForObject(“http://192.168.1.12:8066/api/user/get” + id, User.class)
- 服务名调用:restTemplate.getForObject(“http://zzx-user/api/user/get” + id, User.class)
四、配置文件
ribbon:
eager-load:
enabled: true # 饥饿加载(eager-load)模式
MaxAutoRetries: 1 # 对当前实例的重试次数
MaxAutoRetriesNextServer: 2 # 切换实例的重试次数
ConnectTimeout: 10000 # 连接超时时间
ReadTimeout: 20000 # 读取数据超时
#也可以为每个Ribbon客户端设置不同的超时时间, 通过服务名称(order)进行指定:
order.ribbon.ConnectTimeout=2000
order.ribbon.ReadTimeout=5000
ribbon.MaxTotalConnections=500 # 最大连接数
ribbon.MaxConnectionsPerHost=500# 每个host最大连接数
# 使用ribbon自带重试,对某一个服务重试
# order.ribbon.NFLoadBalancerRuleClassName=***.***flix.loadbalancer.RetryRule
ribbon:
OkToRetryOnAllOperations: true #对超时请求启用重试机制
MaxAutoRetriesNextServer: 1 #切换重试实例的最大个数
MaxAutoRetries: 1 # 切换实例后重试最大次数
NFLoadBalancerRuleClassName: ***.***flix.loadbalancer.RoundRobinRule #可以自定义轮询方法
五、原理解析