Spring Cloud 五大核心组件解析之Ribbon组件IRule详解(上)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
网络型负载均衡 NLB,每月750个小时 15LCU
简介: Spring Cloud 五大核心组件解析之Ribbon组件IRule详解(上)


前言:
在上一篇文章中,我们简单介绍了Ribbon和他的几个重要组件,但是理解一项技能,光知道他的表面是远远不够的,下面,我们就来深入了解一下Ribbon的IRule。


1.IRule 简介
IRule接口代表负载均衡的策略,其中不同的实现类代表了不同的负载策略,一般分为4个子类分支,分别是RandomRule,RoundRobinRule,ClientConfigEnabledRoundRobinRule以及RetryRule

2.RandomRule
介绍:
RandomRule表示随机策略,他将从服务清单中随机选择一个服务实例。
工作原理:
首先,我们会获取upListAllList,用AllList的size获取一个随机数,通过这个随机数做为索引,取出upList中的可用实例并进行返回。

3.RoundRobinRule
介绍:
RoundRobinRule表示轮询策略,他将从服务清单中轮询选择一个服务实例。

工作原理:
同样,他将获取可用实例与全部实例。但是这里他会通过AtomicInteger.get()方法获取当前的位置值。

再通过AtomicInteger.compareAndSet(xx,xxx) 比较2个值 ,如果不相同,则后边的值覆盖当前值。
拿到当前值和list的总值进行取模处理,获取本次的索引值。
每次完成操作,当前索引值nextServerCyclicCounter会+1,当nextServerCyclicCounter长度为list的size时,则nextServerCyclicCounter归0,重新开始轮询,轮询操作不满足,最多会等待10次。10次之后就会使用采用父类的choose。
注意:这里为什么要选择10次呢?这里有两个原因:


1. 轮询结果相互影响导致差错,可能你每次请求出来的都是同一个实例或者是一个有问题的实例来回请求。  
2. 集群很大时,遍历整个集群判断效率低,我们假设集群中健康的实例要比不健康的多,如果10次找不到,就用父类的choose,这也是一种快速失败机制。


4.ClientConfigEnabledRoundRobinRule


介绍:
ClientConfigEnabledRoundRobinRule是一个很特殊的策略,因为它本身并没有实现什么特殊的处理逻辑,但是他的子类可以实现一些高级策略。当一些本身的策略无法实现某些需求的时候,它也可以做为父类帮助实现某些策略。我们可以挑一个最为典型的策略BestAvailableRule进行解读一下。
5.BestAvailableRule


BestAvailableRule做为ClientConfigEnabledRoundRobinRule的子类,它可以选择出最空闲的实例,也就是请求数最少的实例进行返回。
工作原理:
当loadBalancerStats为空,采用父类的线性轮询,不为空时,则利用loadBalancerStats保存的实例统计信息来选择满足要求的实例,然后遍历负载均衡器中维护的所有满足要求服务实例,过滤掉正在负载的实例,找出其中请求数目最小的实例,进行返回。
6.RetryRule


介绍:
RetryRule是对选定的负载均衡策略上重试机制。
工作原理:
在一个配置好的时间段内(默认500ms),当选择实例不成功,则一直尝试使用subRule的方式选择一个可用的实例。如果没有配置负载策略,默认轮询。
下期预告

好了 ,本篇文章介绍了IRule的几种负载策略,篇幅所限,还剩下3种,分别是WeightedResponseTimeRule,ZoneAvoidanceRule,AvailabilityFilteringRule我们下一篇文章再来细细讲解。


相关文章
|
22天前
|
前端开发 JavaScript
React 步骤条组件 Stepper 深入解析与常见问题
步骤条组件是构建多步骤表单或流程时的有力工具,帮助用户了解进度并导航。本文介绍了在React中实现简单步骤条的方法,包括基本结构、状态管理、样式处理及常见问题解决策略,如状态管理库的使用、自定义Hook的提取和CSS Modules的应用,以确保组件的健壮性和可维护性。
59 17
|
9天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
28天前
|
前端开发 UED
React 文本区域组件 Textarea:深入解析与优化
本文介绍了 React 中 Textarea 组件的基础用法、常见问题及优化方法,包括状态绑定、初始值设置、样式自定义、性能优化和跨浏览器兼容性处理,并提供了代码案例。
53 8
|
2月前
|
Java 开发者 Spring
深入解析:Spring AOP的底层实现机制
在现代软件开发中,Spring框架的AOP(面向切面编程)功能因其能够有效分离横切关注点(如日志记录、事务管理等)而备受青睐。本文将深入探讨Spring AOP的底层原理,揭示其如何通过动态代理技术实现方法的增强。
76 8
|
2月前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
135 2
|
2月前
|
前端开发 Java Spring
探索Spring MVC:@Controller注解的全面解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序的基石之一。它不仅简化了控制器的定义,还提供了一种优雅的方式来处理HTTP请求。本文将全面解析`@Controller`注解,包括其定义、用法、以及在Spring MVC中的作用。
58 2
|
2月前
|
前端开发 Java Maven
深入解析:如何用 Spring Boot 实现分页和排序
深入解析:如何用 Spring Boot 实现分页和排序
60 2
|
2月前
|
Java 开发者 Spring
Spring AOP深度解析:探秘动态代理与增强逻辑
Spring框架中的AOP(Aspect-Oriented Programming,面向切面编程)功能为开发者提供了一种强大的工具,用以将横切关注点(如日志、事务管理等)与业务逻辑分离。本文将深入探讨Spring AOP的底层原理,包括动态代理机制和增强逻辑的实现。
48 4
|
2月前
|
前端开发 Java 开发者
Spring MVC中的控制器:@Controller注解全解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序控制层的核心。它不仅简化了控制器的定义,还提供了灵活的请求映射和处理机制。本文将深入探讨`@Controller`注解的用法、特点以及在实际开发中的应用。
96 0
|
2月前
|
负载均衡 监控 网络协议
SpringCloud之Ribbon使用
通过以上步骤,就可以在Spring Cloud项目中有效地使用Ribbon来实现服务调用的负载均衡,提高系统的可靠性和性能。在实际应用中,根据具体的业务场景和需求选择合适的负载均衡策略,并进行相应的配置和优化,以确保系统的稳定运行。
84 15

推荐镜像

更多