一,ribbon核心组件IRule自带的7中负载均衡算法
1,轮询 com.netflix.loadbalancer.RoundRobinRule
2,随机 com.netflix.loadbalancer.RandomRule
3,重试 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内进行重试,获取可用的服务 com.netflix.loadbalancer.RetryRule
4,对RoundRobinRule的扩展,响应速度越快的实例选择权重越多大,越容易被选择 WeightedResponseTimeRule
5,会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务 BestAvailableRule
6,先过滤掉故障实例,再选择并发较小的实例 AvailabilityFilteringRule
7,默认规则,复合判断server所在区域的性能和server的可用性选择服务器 ZoneAvoidanceRule
二,替换方法(以随机算法为例)
1,自建package(主启动类扫描的包分开放置位置)
2,新建MyRibbonRuleConfig配置类
package com.tigerhhzz.myribbonrule; import com.netflix.loadbalancer.IRule; import com.netflix.loadbalancer.RandomRule; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @author tigerhhzz * @date 2022/6/14 14:53 */ @Configuration public class MyRibbonRuleConfig { @Bean public IRule MyRibbonRuleConfig (){ //定义随机负载均衡算法 return new RandomRule(); } }
3,主启动类上加上@RibbonClient(…)注解
package com.tigerhhzz.springcloud; import com.tigerhhzz.myribbonrule.MyRibbonRuleConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.ribbon.RibbonClient; /** * @author tigerhhzz * @date 2022/6/13 9:18 */ @SpringBootApplication @EnableEurekaClient @EnableDiscoveryClient @RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MyRibbonRuleConfig.class) public class OrderMain80 { public static void main(String[] args) { SpringApplication.run(OrderMain80.class, args); } }
三,轮询负载均衡算法的原理
** 轮询算法原理:请求数/集群数 %取模(取余数)为服务器位置的下标**