Ribbon简单入门
Ribbon是什么
- Ribbon是一个客户端负载均衡器并结合RestTemplate实现RPC远程调用。
- Eureka Client端之所以能够循环负载均衡的原因是因为引入了Ribbon
- Ribbon和Eureka Client结合使用时,Ribbon可以自动地从Eureka Server中获取服务注册列表,然后根据负载均衡算法调用具体服务实例
IRule接口
-
IRule是Ribbon的核心算法接口,提供了7个具体的算法规则
类名 说明 RoundRobinRule 默认轮询 RandomRule 随机 RetryRule 先轮询获取服务,如果获取失败则会在指定时间内进行重试获取可用的服务 WeightedResponseTimeRule 对轮询的扩展,响应速度越快权重越高,越容易被选中 BestAvailableRule 跳过带有“跳闸”断路器的服务器,并选择并发请求最少的服务器 AvailabilityFilteringRule 过滤掉故障实例,再选择并发较小的实例 ZoneAvoidanceRule
Ribbon负载规则替换
- 注入Bean的方式:增加配置类指定算法规则
@Configuration public class TestRule { @Bean public IRule setIRule(){ return new RandomRule();//随机负载均衡算法 } }
配置类不能放在@ComponentScan扫描的包及子包下面!!!
- 修改主启动类
/** * RibbonClient * name:服务名称 * configuration:自定义的算法负载均衡器 */ @SpringBootApplication @EnableEurekaClient @RibbonClient(name = "EUREKA-CLIENT-SERVICE",configuration = TestRule.class) public class EurekaClient80 { public static void main(String[] args) { SpringApplication.run(EurekaClient80.class,args); } }
- 访问80服务
http://127.0.0.1/eat
没有Eureka集群环境的请点击Eureka集群环境链接
Ribbon默认负载均衡原理
- 负载均衡算法公式
第几次请求数 % 服务器集群总数 = 实际调用服务器的下标
服务重启后请求数会从1开始重新计算假如服务列表中有2个服务 List[0] = 127.0.0.1:8011 List[1] = 127.0.0.1:8012 按照轮询算法可以做以下推算 第一次请求 1 % 2 = 1 即List[1] = 127.0.0.1:8012 第二次请求 2 % 2 = 0 即List[0] = 127.0.0.1:8011 第三次请求 3 % 2 = 1 即List[1] = 127.0.0.1:8012 第四次请求 4 % 2 = 0 即List[0] = 127.0.0.1:8011 第五次请求 5 % 2 = 1 即List[1] = 127.0.0.1:8012