Ribbon算法
1.Ribbon核心组件IRule
1.1 IRule:根据特定算法中从服务列表中选取一个要访问的服务
IRule接口主要的实现类:AbstractLoadBalancerRule
- com.netflix.loadbalancer.RoundRobinRule 轮询
- com.netflix.loadbalancer.RandomRule 随机
- com.netflix.loadbalancer.RetryRule 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内进行重试,获取可用的服务
- WeightedResponseRimeRule 对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被选择
- BestAvailableRule 会先过滤由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量小的服务
- AvailabilityFilteringRule 先过滤掉故障实例,在选择并发量较小的实例
- ZoneAvoidanceRule 默认规则,复合判断server所在区域的性能和server的可用性选择服务器
1.2 Ribbon负载规则替换
官方文档给出明确警告
这个自定义配置类不能放在@ComponentScan所扫描的当前包及子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,达不到特殊化定制的目的了.
-
-
写配置类
package com.atguigu.myrule; import com.netflix.loadbalancer.IRule; import com.netflix.loadbalancer.RandomRule; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MySefRule { @Bean public IRule myRule(){ return new RandomRule(); } }
-
在启动类添加@RibbonClient(name=“CLOUD-PAYMENT-SERVICE”,configuration = MySefRule.class)注解,name是你要调用的服务名称,configuration是你的配置类名称
1.3 负载均衡算法
1.3.1 轮询算法
rest接口第几次请求数 % 服务集群总数量 = 实际调用服务器位置下表 , 每次服务重启后rest接口计数从1开始.