什么是负载均衡?
IRule
根据特定的算法中从服务列表中选取一个要访问的服务
- com.netflix.loadbalancer.RoundRobinRule-轮询
- com.netflix.loadbalancer.RandomRule -随机
- com.netflix.loadbalancer.RetryRule -先按照RoundRobinrule的策略获取服务,如果获取服务失败则在指定时间内会进行重新选择
- WeightedResponseTimeRule -对roundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易别选择
- BestAvailableRule-会先过滤出掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
- AvailabilityFilteringRule-会先过来掉故障实例,在选择并发较小的实例
- ZoneAvoidanceRule-默认规则,复合判断server所在区域的性能和server的可用性选择服务器
注意:
配置Ribbon的负载均衡算法的自定义配置类不能放在@ComponentScan所扫描的当前包下以及其子包下否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,达不到特殊化定制的目的。 @ComponentScan所扫描的包,一般为Application类所在的包
Ribbon默认负载轮询算法原理:
负载均衡算法:
rest接口第几次请求数 % 服务器集群总数量=实际调用服务器位置下标,每次服务重启后rest接口计数从1开始。
List instances =dicoveryClient.getInstances(“CLOUD-PAYMENT_SERVICE”) //instance则为服务的实例数量
List[0] instances=127.0.0.1:8002 List[1] instances=127.0.0.1:8001
重写Ribbon负载轮询算法:
1、编写LoadBalancer接口
public interface LoadBalancer