一,负载均衡算法种类
Ribbon的核心组件是IRule,是所有负载均衡算法的父接口,其子类有:
idea快速查看子类或实现类的快捷键:CTRL+ALT+B。
每一个类就是一种负载均衡算法
RoundRobinRule 轮询
RandomRule 随机
AvailabilityFilteringRule 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数超过阈值的服务,然后对剩余的服务列表进行轮询
WeightedResponseTimeRule 权重 根据平均响应时间计算所有服务的权重,响应时间越快服务权重越大被选中的概率越高。刚启动时,如果统计信息不足,则使用轮询策略,等信息足够,切换到 WeightedResponseTimeRule
RetryRule 重试 先按照轮询策略获取服务,如果获取失败则在指定时间内重试,获取可用服务
BestAvailableRule 选过滤掉多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
ZoneAvoidanceRule 符合判断server所在区域的性能和server的可用性选择服务
二,自定义配置负载均衡算法
配置很简单,在自定义配置类里面如下配置即可
@Configurationpublic classConfigBeans {
@Bean
@LoadBalanced
RestTemplate restTemplate() {return newRestTemplate();
}/**自定义配置ribbon负载均衡算法
*@return
*/@BeanpublicIRule myRule(){//return new RoundRobinRule();//轮询//return new RetryRule();//重试
return newBestAvailableRule();
}
}
很具业务需求选择合适的算法即可,当然可以根据具体业务需求自己写一个算法类
三,个性化定制不同微服务策略
如果要自定义Ribbon配置, 则需要把这个配置类放在@SpringBootApplication扫不到的包中(@ComponentScan),因为如果可以扫到自定义的Ribbon配置类的话,那么会对所有的Riboon都生效,也就是说这种情况下所有的微服务的负载均衡算法都是相同的。
3.1 配置类实现负载均衡策略
独立新建包,创建配置类
//独立的包,不在主启动类的包及其子包里
packagecom.ribbon;importorg.springframework.cloud.netflix.ribbon.RibbonClient;importorg.springframework.context.annotation.Configuration;importcom.baosight.config.MyConfiguration;/*** 使用RibbonClient,为特定name的Ribbon Client自定义配置.
* 使用@RibbonClient的configuration属性,指定Ribbon的配置类.*/@Configuration
@RibbonClient(name= "springboot-eureka-clent", configuration = MyConfiguration.class)public classServiceProviderConfig {
}
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=8764spring.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
我这儿整理了比较全面的JAVA相关的面试资料,
需要领取面试资料的同学,请加群:473984645