Ribbon核心组件IRule及配置指定的负载均衡算法

Ribbon在工做时分为两步:git

第一步:先选择 EurekaServer,它优先选择在同一个区域内负载较少的Server;github

第二步:再根据用户指定的策略,在从Server取到的服务注册列表中选择一个地址;算法

其中Ribbon提供了多种策略,好比轮询、随机、根据响应时间加权。服务器

1、Ribbon算法的介绍

Ribbon的源码地址:https://github.com/Netflix/ribbon并发

IRule:根据特定算法中从服务器列表中选取一个要访问的服务,Ribbon默认的算法为轮询算法;负载均衡

Ribbon中的7中负载均衡算法:dom

(1)RoundRobinRule:轮询;ide

(2)RandomRule:随机;工具

(3)AvailabilityFilteringRule:会先过滤掉因为屡次访问故障而处于断路器状态的服务,还有并发的链接数量超过阈值的服务,而后对剩余的服务列表按照轮询策略进行访问;性能

(4)WeightedResponseTimeRule:根据平均响应时间计算全部服务的权重,响应时间越快的服务权重越大被选中的几率越大。刚启动时若是统计信息不足,则使用RoundRobinRule(轮询)策略,等统计信息足够,会切换到WeightedResponseTimeRule;

(5)RetryRule:先按照RoundRobinRule(轮询)策略获取服务,若是获取服务失败则在指定时间内进行重试,获取可用的服务;

(6)BestAvailableRule:会先过滤掉因为屡次访问故障而处于断路器跳闸状态的服务,而后选择一个并发量最小的服务;

(7)ZoneAvoidanceRule:复合判断Server所在区域的性能和Server的可用性选择服务器;

ribbion的负载均衡算法结构:

 

2、配置指定的负载均衡算法

一、打开消费者工程,增长以下的配置:

@Configuration public class ConfigBean { @Bean @LoadBalanced //Ribbon 是客户端负载均衡的工具;
    public RestTemplate getRestTemplate() { return new RestTemplate(); } //配置负载均衡的策略为随机,默认算法为轮询算法  @Bean public IRule myRule() { //return new RoundRobinRule(); return new RandomRule(); }   }

 二、启动类增长 @EnableEurekaClient 注解

@SpringBootApplication @EnableEurekaClient //本服务启动后自动注册到eureka中
public class DeptProvider8001_App { public static void main(String[] args) { SpringApplication.run(DeptProvider8001_App.class, args); } }

三、而后重启这个消费者服务,访问:http://localhost/consumer/dept/get/1;查看到随机访问到3个生产者服务。

相关文章
相关标签/搜索