1、ribbon 负载均衡策略:
策略类 | 命名 | 描述 |
RandomRule | 随机策略 | 随机选择server |
RoundRobinRule | 轮询策略 | 轮询选择, 轮询index,选择index对应位置的Server; |
RetryRule | 重试策略 | 对选定的负载均衡策略机上重试机制,在一个配置时间段内当选择Server不成功,则一直尝试使用subRule的方式选择一个可用的server; |
BestAvailableRule | 最低并发策略 | 逐个考察server,如果server断路器打开,则忽略,再选择其中并发链接最低的server |
AvailabilityFilteringRule | 可用过滤策略 | 过滤掉一直失败并被标记为circuit tripped的server,过滤掉那些高并发链接的server(active connections超过配置的阈值)或者使用一个AvailabilityPredicate来包含过滤server的逻辑,其实就就是检查status里记录的各个Server的运行状态; |
ResponseTimeWeightedRule | 响应时间加权重策略 | 根据server的响应时间分配权重,响应时间越长,权重越低,被选择到的概率也就越低。响应时间越短,权重越高,被选中的概率越高,这个策略很贴切,综合了各种因素,比如:网络,磁盘,io等,都直接影响响应时间 |
ZoneAvoidanceRule | 区域权重策略 | 综合判断server所在区域的性能,和server的可用性,轮询选择server并且判断一个AWS Zone的运行性能是否可用,剔除不可用的Zone中的所有server |
2、ribbon 继承关系:
3、ribbon 配置方式:
1、 配置类的方式:用户选择配置类的方式选择已有的负载均衡策略,配置类不能放在@ComponentScan所扫描的当前包以及子包下,否则会全局覆盖为当前的负载均衡策略。
@Configuration
public class RibbonConnfig {
@Bean
public IRule iRule(){
return new NacosRule(); // 新建已有的负载均衡类或者自定义的负载均衡类
}
}
2、配置文件的方式:
服务名:
ribbon:
NFLoadBalanceRuleCLassName:负载均衡全类名
server:
port:8080
stock-service:
ribbon:
NFLoadBalancerRuleClassName:com.alibaba.cloud.nacos.ribbon.NacosRule
以上配置方式选择一种即可。
4、实现ribbon:
启动类添加注解:可以针对每一个服务调用不同的负载均衡策略。
@SpringBootApplication
@RibbonClients(value = {@RibbonClient(name = "stock-service",configuration = RibbonConnfig.class)}) // ribbon 注解,name 掉用的服务名称,configuration 调用的ribbon策略
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class,args);
}
@Bean
@LoadBalanced // 添加负载均衡的机制,默认使用的是轮询策略
public RestTemplate restTemplate(RestTemplateBuilder builder){
return builder.build();
}
}