Ribbon内置负载均衡算法

1、 RoundRobinRule
    轮询策略:Ribbon 默认采用的策略。若经过一轮轮询没有找到可用的provider,其最多轮询 10 轮(代码中写死的,不能修改)。若还未找到,则返回 null。
  2、RandomRule
    随机策略:从所有可用的 provider 中随机选择一个。
  3、RetryRule
    重试策略:先按照 RoundRobinRule 策略获取 server,若获取失败,则在指定的时限内重试。默认的时限为 500 毫秒。
  4、BestAvailableRule
    最可用策略:选择并发量最小的 provider,即连接的消费者数量最少的provider。其会遍历服务列表中的每一个server,选择当前连接数量minimalConcurrentConnections 最小的server。
  5、AvailabilityFilteringRule
可用过滤算法:该算法规则是过滤掉处于熔断状态的 server 与已经超过连接极限的server,对剩余 server 采用轮询策略。

更换内置策略

若要更换负载均衡策略,则首先要了解负载均衡策略的定义接口 IRule。Ribbon 默认采用的是 RoundRobinRule,即轮询策略。但通过修改消费者工程的配置文件,或修改消费者的启动类或 JavaConfig 类可以实现更换负载均衡策略的目的。

1、修改配置文件
    修改配置文件,在其中添加如下内容,指定要使用的负载均衡策略 . .NFLoadBalancerRuleClassName。该方式的好处是,可以为不同的微服务指定相应的负载均衡策略

provider001Nacosconfig:#服务提供者name
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

2、修改JavaConfig类
    在 JavaConfig 类中添加负载 Bean 方法。全局所有feign对应服务都可以生效。

@Configuration
public class FeignConfiguration {
    /**
     * 配置随机的负载均衡策略
     * 特点:对所有的服务都生效
     */
    @Bean
    public IRule loadBalancedRule() {
        return new RandomRule();
    }
}

负载均衡器SpringCloudLoadBalancer

由于 Netflix 对于 Ribbon 的维护已经暂停,所以 Spring Cloud 对于负载均衡建议使用由其自己定义的 Spring Cloud LoadBalancer。对于Spring Cloud LoadBalancer 的使用非常简单。
1、关闭Ribbon的负载均衡器

spring:
  application:
    name: consumer-name
  cloud:
    loadbalancer:
      # 关闭Ribbon的负载均衡器
      ribbon:
        enabled: false

2、pom中添加LoadBalancer依赖

 <!--spring cloud loadbalancer 依赖--> 
 <dependency> 
      <groupId>org.springframework.cloud</groupId> 
      <artifactId>spring-cloud-starter-loadbalancer</artifactId>
      <version>2.2.3.RELEASE</version>
  </dependency>
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐