Ribbon 核心组件 IRule|学习笔记

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 快速学习 Ribbon 核心组件 IRule

开发者学堂课程【微服务框架 Spring Cloud 快速入门Ribbon 核心组件 IRule】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/614/detail/9356


Ribbon核心组件IRule

 

目录:

一、上节总结

二、Ribbon 核心组件 IRule

 

一、上节总结

总结:Ribbon 其实就是一个软负载均衡的客户端组件,

他可以和其他所需请求的客户端结合使用,和 eureka 结合只是其中的一个实例

 

二、Ribbon 核心组件 IRule

lRule:根据特定算法中从服务列表中选取一个要访问的服务

其实就是 ribbon 的架构图:

Ribbon 在工作时分成两步

第一步先选择 EurekaServer ,它优先选择在同一个区域内负载较少的 server.

第二步再根据用户指定的策略,在从 server 取到的服务注册列表中选择一个地其中 Ribbon 提供了多种策略:比如轮询、随机和根据响应时间加权。

这里提到 ribbon 提供了很多侧列其实就是 Ribbon 默认自带的七种算法:

1. RoundRobinRule 轮询

默认规则,复合判断 server 所在区域的性能和 server 的可用性选择服务器

因为 ribbon 主要负责 ribbon-loadbalancer 此时里面有 irule.java 此时说明 ribbon 的负载均衡算法自定义了一套策略:只要能实现她的接口就能定义自己的算法。lLoadBalapcer.java 这个接口里面的 service,可得到所有的服务列表。

public Service choose(ILoadBalancer lb,0bject key) 这个service为了得到一个算法

int nextServerIndex = incrementAndGetModulo(serverCount);server = allServers.get(nextServerIndex);

这里有一个方法

List allServers = lb.getA11Servers();

得到有效的微服务

这里又得到server = allServers.get(nextServerIndex) ;

这里的源码体现了轮询。

2. RandomRule 随机

@Bean

public IRule(固定的接口) myRule()

{

//return new RoundRobinRule();(此时还是轮询)

return new RandoTRule(;//达到的目的,用我们重新选择的随机算法替代默认的轮询。

}

这里就是如果没有声明会默认使用轮询算法

(每启动一个微服务都要 run as)

3.AvailabilityFilteringRule

会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,

还有并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问

4. WeightedResponseTimeRul

根据平均响应时间计算所有服务的权重,响应时间越快服务权重越大被选中的概率越高。刚启动时如果统计信息不足,则使用 RoundRobinRule 策略,等统计信息足够,会切换到 WeightedResponseTimeRule

5. RetryRule

先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试,获取可用的服务

如果故意让一个微服务故障,此时默认轮询,内部机制在一定时间内跳过这个故障的微服务并显示 error page。

@Bean

public IRule myRule()

{

Return new retryrule

}

6. BestAvailableRule

会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务

7.ZoneAvoidanceRule

默认规则,每合询断 server 所在区域的性能和 server 的可用性选择服务器

需要哪种算法只需要切换 return new+对应名称。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
开发框架 负载均衡 Java
Spring Cloud 介绍及负载均衡Ribbon、服务容错Hystrix 组件使用详解
Spring Cloud 介绍及负载均衡Ribbon、服务容错Hystrix 组件使用详解
216 0
|
1月前
|
负载均衡 算法 Java
除了 Ribbon,Spring Cloud 中还有哪些负载均衡组件?
这些负载均衡组件各有特点,在不同的场景和需求下,可以根据项目的具体情况选择合适的负载均衡组件来实现高效、稳定的服务调用。
59 5
|
4月前
|
缓存 负载均衡 Java
OpenFeign最核心组件LoadBalancerFeignClient详解(集成Ribbon负载均衡能力)
文章标题为“OpenFeign的Ribbon负载均衡详解”,是继OpenFeign十大可扩展组件讨论之后,深入探讨了Ribbon如何为OpenFeign提供负载均衡能力的详解。
OpenFeign最核心组件LoadBalancerFeignClient详解(集成Ribbon负载均衡能力)
|
5月前
|
负载均衡 Java API
通用快照方案问题之Feign添加请求拦截器如何解决
通用快照方案问题之Feign添加请求拦截器如何解决
36 1
|
负载均衡 Java 索引
Spring Cloud 五大核心组件解析之Ribbon组件IRule详解(上)
Spring Cloud 五大核心组件解析之Ribbon组件IRule详解(上)
|
7月前
|
负载均衡 算法 Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(四)Ribbon的使用
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(四)Ribbon的使用
150 0
|
7月前
|
负载均衡 算法 Java
SpringCloud负载均衡源码解析 | 带你从表层一步步剖析Ribbon组件如何实现负载均衡功能
SpringCloud负载均衡源码解析 | 带你从表层一步步剖析Ribbon组件如何实现负载均衡功能
168 0
|
负载均衡 Java 数据库连接
原来Nacos、OpenFeign、Ribbon、loadbalancer组件是这么协调工作的
大家好,我是三友~~ 前几天有个大兄弟问了我一个问题,注册中心要集成SpringCloud,想实现SpringCloud的负载均衡,需要实现哪些接口和规范。
原来Nacos、OpenFeign、Ribbon、loadbalancer组件是这么协调工作的
|
Java 调度 Spring
Spring Cloud 五大核心组件解析之Ribbon组件IRule详解(下)
Spring Cloud 五大核心组件解析之Ribbon组件IRule详解(下)
|
负载均衡 算法 网络协议
Spring Cloud 五大核心组件解析之Ribbon简介
Spring Cloud 五大核心组件解析之Ribbon简介