Spring Cloud Ribbon负载均衡策略自定义配置

2022-06-21 12:55:56

Spring Cloud Ribbon负载均衡策略自定义配置

上一篇文章Spring Cloud Ribbon 消费服务 实现客户端负载均衡中使用ribbon实现了客户端负载均衡,我们知道ribbon默认负载均衡算法是轮询,ribbon实际上提供了很多负载均衡算法,本篇文章简单介绍一下。

一,负载均衡算法种类

Ribbon的核心组件是IRule,是所有负载均衡算法的父接口,其子类有:
这里写图片描述
这里写图片描述
idea快速查看子类或实现类的快捷键:CTRL+ALT+B。
每一个类就是一种负载均衡算法

  • RoundRobinRule 轮询
  • RandomRule 随机
  • AvailabilityFilteringRule 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数超过阈值的服务,然后对剩余的服务列表进行轮询
  • WeightedResponseTimeRule 权重 根据平均响应时间计算所有服务的权重,响应时间越快服务权重越大被选中的概率越高。刚启动时,如果统计信息不足,则使用轮询策略,等信息足够,切换到 WeightedResponseTimeRule
  • RetryRule 重试 先按照轮询策略获取服务,如果获取失败则在指定时间内重试,获取可用服务
  • BestAvailableRule 选过滤掉多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
  • ZoneAvoidanceRule 符合判断server所在区域的性能和server的可用性选择服务

    二,自定义配置负载均衡算法

    配置很简单,在自定义配置类里面如下配置即可

@ConfigurationpublicclassConfigBeans {@Bean@LoadBalanced
    RestTemplate restTemplate() {returnnew RestTemplate();
    }/**自定义配置ribbon负载均衡算法
     * @return
     */@Beanpublic IRulemyRule(){//return new RoundRobinRule();//轮询//return new RetryRule();//重试returnnew BestAvailableRule();
    }
}

很具业务需求选择合适的算法即可,当然可以根据具体业务需求自己写一个算法类

三,个性化定制不同微服务策略

如果要自定义Ribbon配置, 则需要把这个配置类放在@SpringBootApplication扫不到的包中(@ComponentScan),因为如果可以扫到自定义的Ribbon配置类的话,那么会对所有的Riboon都生效,也就是说这种情况下所有的微服务的负载均衡算法都是相同的。

3.1 配置类实现负载均衡策略

独立新建包,创建配置类

//独立的包,不在主启动类的包及其子包里package com.ribbon;import org.springframework.cloud.netflix.ribbon.RibbonClient;import org.springframework.context.annotation.Configuration;import com.baosight.config.MyConfiguration;/**
 * 使用RibbonClient,为特定name的Ribbon Client自定义配置.
 * 使用@RibbonClient的configuration属性,指定Ribbon的配置类.
 */@Configuration@RibbonClient(name ="springboot-eureka-clent", configuration = MyConfiguration.class)publicclassServiceProviderConfig {

}

3.2 使用配置文件实现负载均衡策略

创建配置类的方式虽然能够实现个性化定义,但是当有大量这类配置的时候,对各个RibbonClient 的配置信息都将分散在这些配置类中,使得修改和管理都变得非常麻烦。在Camden版本中,Spring Cloud Ribbon对 RibbonClient 的个性化配置做了进一步优化,可以通过.ribbon.=的形式进行配置。配置如下

#注册中心集群
eureka.client.service-url.defaultZone=http://10.25.25.92:8080/eureka/,http://10.25.25.24:8080/eureka/,http://10.25.25.39:8080/eureka/
server.port=8764
spring.application.name=service-ribbon
springboot-eureka-clent.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

ribbon配置优先级:Ribbon配置的优先级:属性配置 > JAVA配置>Netflix Ribbon默认配置

四,不依赖eureka实现Ribbon负载均衡

前面实现的负载均衡都是依赖eureka实现的,当然ribbon可以脱离eureka实现负载均衡。配置如下

#取消Ribbon使用Eureka
ribbon.eureka.enabled=false#配置Ribbon能访问 的微服务节点,多个节点用逗号隔开
microservice-provider-user.ribbon.listOfServers=localhost:8001,localhost:8002
  • 作者:工学院
  • 原文链接:https://blog.csdn.net/u010816545/article/details/80461957
    更新时间:2022-06-21 12:55:56