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

简介: 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我们下一篇文章再来细细讲解。


相关文章
|
12月前
|
负载均衡 Java Nacos
Spring Cloud五大组件
Spring Cloud五大组件
|
监控 负载均衡 Java
5 大 SpringCloud 核心组件详解,8 张图彻底弄懂
本文图文详解 Spring Cloud 的五大核心组件,帮助深入理解和掌握微服务架构。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
5 大 SpringCloud 核心组件详解,8 张图彻底弄懂
|
前端开发 JavaScript
React 步骤条组件 Stepper 深入解析与常见问题
步骤条组件是构建多步骤表单或流程时的有力工具,帮助用户了解进度并导航。本文介绍了在React中实现简单步骤条的方法,包括基本结构、状态管理、样式处理及常见问题解决策略,如状态管理库的使用、自定义Hook的提取和CSS Modules的应用,以确保组件的健壮性和可维护性。
384 17
|
11月前
|
负载均衡 前端开发 Java
SpringCloud调用组件Feign
本文深入探讨微服务Spring体系中的Feign组件。Feign是一个声明式Web服务客户端,支持注解、编码器/解码器,与Spring MVC注解兼容,并集成Eureka、负载均衡等功能。文章详细介绍了SpringCloud整合Feign的步骤,包括依赖引入、客户端启用、接口创建及调用示例。同时,还涵盖了Feign的核心配置,如超时设置、拦截器实现(Basic认证与自定义)和日志级别调整。最后,总结了`@FeignClient`常用属性,帮助开发者更好地理解和使用Feign进行微服务间通信。
910 1
|
索引
【Flutter 开发必备】AzListView 组件全解析,打造丝滑索引列表!
在 Flutter 开发中,AzListView 是实现字母索引分类列表的理想选择。它支持 A-Z 快速跳转、悬浮分组标题、自定义 UI 和高效性能,适用于通讯录、城市选择等场景。本文将详细解析 AzListView 的核心参数和实战示例,助你轻松实现流畅的索引列表。
588 7
|
负载均衡 算法 Java
除了 Ribbon,Spring Cloud 中还有哪些负载均衡组件?
这些负载均衡组件各有特点,在不同的场景和需求下,可以根据项目的具体情况选择合适的负载均衡组件来实现高效、稳定的服务调用。
1290 61
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
传感器 监控 安全
智慧工地云平台的技术架构解析:微服务+Spring Cloud如何支撑海量数据?
慧工地解决方案依托AI、物联网和BIM技术,实现对施工现场的全方位、立体化管理。通过规范施工、减少安全隐患、节省人力、降低运营成本,提升工地管理的安全性、效率和精益度。该方案适用于大型建筑、基础设施、房地产开发等场景,具备微服务架构、大数据与AI分析、物联网设备联网、多端协同等创新点,推动建筑行业向数字化、智能化转型。未来将融合5G、区块链等技术,助力智慧城市建设。
661 1
|
前端开发 UED
React 文本区域组件 Textarea:深入解析与优化
本文介绍了 React 中 Textarea 组件的基础用法、常见问题及优化方法,包括状态绑定、初始值设置、样式自定义、性能优化和跨浏览器兼容性处理,并提供了代码案例。
451 10
|
负载均衡 监控 网络协议
SpringCloud之Ribbon使用
通过以上步骤,就可以在Spring Cloud项目中有效地使用Ribbon来实现服务调用的负载均衡,提高系统的可靠性和性能。在实际应用中,根据具体的业务场景和需求选择合适的负载均衡策略,并进行相应的配置和优化,以确保系统的稳定运行。
619 15

推荐镜像

更多
  • DNS