Spring Cloud之Ribbon负载均衡策略及使用方法

1. 类图

类图.png

2. 策略类型描述

类名 策略 描述
RoundRobinRule 轮询策略 默认策略,轮询选择, 轮询index选择对应位置的Server;
RandomRule 随机策略 随机选择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

3. 配置方式

假设现在有2个服务提供者user-providerorder-provider

3.1. 基于注解全局配置

若使用全局配置,user-providerorder-provider服务都会采用RandomRule

@Configuration
public class ServiceConsumerConfig{

   @LoadBalanced
   @Bean
   public RestTemplate restTemplate() {
       return new RestTemplate();
   }

   @Bean
   public IRule iRule() {
       return new RandomRule();
   }
}
@SpringBootApplication
@EnableEurekaClient
public class ServiceConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceConsumerApplication.class, args);
    }
}

3.2. 基于注解为不同服务配置不同规则

user-providerorder-provider分别建立一个配置文件,此时user-provider采用RoundRobinRuleorder-provider采用RandomRule

@Configuration
@RibbonClient(name = "user-provider", configuration = UserConsumerConfig.class)
public class UserConsumerConfig{

   @LoadBalanced
   @Bean
   public RestTemplate restTemplate() {
       return new RestTemplate();
   }

   @Bean
   public IRule iRule() {
       return new RoundRobinRule();
   }
}
@Configuration
@RibbonClient(name = "order-provider", configuration = OrderConsumerConfig.class)
public class OrderConsumerConfig{

   @LoadBalanced
   @Bean
   public RestTemplate restTemplate() {
       return new RestTemplate();
   }

   @Bean
   public IRule iRule() {
       return new RandomRule();
   }
}
@SpringBootApplication
@EnableEurekaClient
public class ServiceConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceConsumerApplication.class, args);
    }

}

3.3. 基于配置文件配置

application.properties添加下面配置

user-provider.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RoundRobinRule
order-provider.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

application.yml

user-provider:
  ribbon:
    NFLoadBalanceRuleClassName: com.netflix.loadbalancer.RoundRobinRule

order-provider:
  ribbon:
    NFLoadBalanceRuleClassName: com.netflix.loadbalancer.RandomRule

3.4. 配置的优先级

配置文件的优先级 > java代码的配置方式 > Ribbon默认配置

你可能感兴趣的:(Spring Cloud之Ribbon负载均衡策略及使用方法)