Spring Cloud 组件原理系列(二)Hystrix篇

SpringCloud——Hystrix详解 目录 一、Hystrix介绍 1、分布式系统面临问题 2、Hystrix概念 3、Hystrix作用 (1)服务降级 (2)服务熔断 二、服务降级案例 1、搭建Eureka服务端 (1)创建maven工程 (2)导入依赖 (3)配置application.yml (4)创建主启动类 (5)启动Eureka注册中心 2、搭建服务提供者Provider80 (1)创建maven工程 (2)导入依赖 (3)配置application.yml (4)创建启动类 (5)创建con 阅读详情

1. Hystrix 简介

Hystrix 是 Netflix 开源的一款容错系统,能帮助使用者码出具备强大的容错能力和鲁棒性的程序。Hystrix 具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包(request collapsing,即自动批处理,译者注),以及监控和配置等功能。

Hystrix 源于 Netflix API 团队在 2011 年启动的弹性工程工作,而目前它在 Netflix 每天处理着数百亿的隔离线程以及数千亿的隔离信号调用。Hystrix 是基于 Apache License 2.0 协议的开源的程序库,目前托管在 GitHub 上。

为什么用Hystrix?什么情况下用?

分布式系统中,或者说微服务,各个系统错综复杂,一个系统依赖的服务比较多,而且会有多级依赖。当其中某一个服务出现问题,在高并发的情况下都有可能导致整个系统的瘫痪,蝴蝶效应在这里表现明显。

也许你会问为什么会这样?如上图,假如服务I出现较严重延迟,这时上层应用访问量tps比较大时, 首先上层应用资源会被占满,并且一般网络请求(http/rpc)都有重试机制,服务I的压力会更大,严重时则会导致应用宕机。

d6f9ad10-fea7-11e7-806c-257f5e05f705.jpg

2. Hystrix 设计理念

在复杂的分布式系统中通常有很多依赖,如果一个应用不能对来自依赖故障进行隔离,那么应用本身就处于被拖垮的风险中。在一个高流量的网站中,某一个单一后端一旦发生延迟,将会在数秒内导致所有的应用资源被耗尽,这也就是我们常说的雪崩效应。

比如在电商系统的下单业务中,在订单服务创建订单后同步调用库存服务进行库存的扣减,假如库存服务出现了故障,那么会导致下单请求线程会被阻塞,当有大量的下单请求时,则会占满应用连接数从而导致订单服务无法对外提供服务。

容错设计的理念

  • 凡是依赖都有可能会失败。
  • 凡是资源都有限制,比如 CPU、Memory、Threads、Queue。
  • 网络并不可靠,可能存在网络抖动等其他问题。
  • 延迟是应用稳定的杀手,延迟会占据大量的资源。

容错限流的手段

  • 限流:限制最大并发数。
  • 熔断:错误数达到阈值时,类似于保险丝熔断。
  • 隔离:隔离不同的依赖调用。
  • 服务降级:资源不足时进行服务降级。
  • 主动超时:在调用依赖时尽快的超时,可以设置比较短的超时时间,防止长时间的等待。

3. Hystrix 核心概念

Hystrix是Netflix公司开源的一款容错框架。 它可以完成以下几件事情:

  • 熔断器:当请求失败率达到一定的阈值时,会打开断路器开关,直接拒绝后续的请求,并且具有弹性机制,在后端服务恢复后,会自动关闭断路器开关。
  • 资源隔离:包括线程池隔离和信号量隔离,避免某个依赖出现问题会影响到其他依赖。
  • 降级回退:当断路器开关被打开,服务调用超时/异常,或者资源不足(线程、信号量)会进入指定的fallback降级方法。
  • 请求合并:可以实现将一段时间内的请求合并,然后只对后端服务发送一次请求。
  • 请求结果缓存:hystrix实现了一个内部缓存机制,可以将请求结果进行缓存,那么对于相同的请求则会直接走缓存而不用请求后端服务。

3.1. 熔断器

断路器工作原理如下:

2591074-4188ce088305a4e5.webp

Hystrix 是基于滚筒式来处理,每一秒会产生一个 buckets,每产生一个新的 buckets 就会移除一个最老的 buckets,默认是 10 秒一个窗口。buckets 在内存中就是一种数据结构,每个 buckets 会记录 Metrics 的相关数据,比如 成功、失败、超时、拒绝。

当一个 HystrixCommand 进来后,会先通过 allowRequest() 方法判断是否允许通过该次请求,allowRequest() 方法会通过 isOpen 判断断路器是否打开。断路器关闭,则允许通过该次请求;断路器打开,则会判断是否过了睡眠周期。没有过睡眠周期则返回 false,拒绝通过该次请求,过了睡眠周期则会尝试放行。

isOpen() 方法会按照 (failure) / (success+failure) 公式计算出失败率,如果失败率大于阈值,则会触发熔断。公式中的成功、失败的数据就来源于每10秒中一个窗口的滚筒数据。对于一个依赖调用,要么调用成功,要么调用失败(包括异常、超时、拒绝),这些调用结果都会记录到 buckets 中。对于调用成功结果来说,还会判断断路器开关是否打开,如果是打开状态的话,则会关闭断路器并重置相关的计数器。

线路的开路闭路详细逻辑如下:

  1. 假设线路内的容量(请求QPS)达到一定阈值(通过HystrixCommandProperties.circuitBreakerRequestVolumeThreshold()配置)
  2. 同时,假设线路内的错误率达到一定阈值(通过HystrixCommandProperties.circuitBreakerErrorThresholdPercentage()配置)
  3. 熔断器将从『闭路』转换成『开路』
  4. 若此时是『开路』状态,熔断器将短路后续所有经过该熔断器的请求,这些请求直接走『失败回退逻辑』
  5. 经过一定时间(即『休眠窗口』,通过HystrixCommandProperties.circuitBreakerSleepWindowInMilliseconds()配置),后续第一个请求将会被允许通过熔断器(此时熔断器处于『半开』状态),若该请求失败,熔断器将又进入『开路』状态,且在休眠窗口内保持此状态;若该请求成功,熔断器将进入『闭路』状态,回到逻辑1循环往复。

3.2. 资源隔离

资源隔离的思想参考上述的舱壁隔离模式,在 hystrix 中提供了两种资源隔离策略:线程池

Spring Cloud微服务功能及其组件详细讲解 微服务是一种架构风格,它强调将大型复杂的系统功能根据业务需求切分为一系列小型、独立的服务。每个服务都专注于满足某个具体的业务需求,并且能够独立部署、运行和扩展。这种架构风格使得系统更加灵活、可维护,并且能够更好地应对业务变化和技术挑战。虽然微服务在初始阶段可能会增加开发和维护的难度,因为它要求团队具备更高的分布式系统开发和运维能力。但是,从长远来看,微服务带来的好处是显而易见的。它使得系统更加易于扩展,因为每个服务都可以独立地进行水平扩展,以满足不断增长的业务需求。 阅读详情

相关推荐

Spring Cloud 中的 Hystrix 断路器:原理、实战与应用

在微服务架构盛行的今天,分布式系统中的服务之间相互调用频繁,而网络的不稳定性、服务自身的故障等问题都可能导致调用失败。一旦某个服务出现故障,可能会引发连锁反应,最终导致整个系统瘫痪。Spring Cloud 中的 Hystrix 断路器正是为解决这类问题而生,它能有效防止服务雪崩,保障系统的稳定性和可用性。本文将深入探讨 Hystrix 断路器的原理,并结合实际案例展示其在 Spring Cloud 项目中的应用。

weixin_42593797的博客 981

springcloud hystrix入门简介(一)

Hystrix是Spring Cloud提供的熔断框架,用于解决微服务间调用故障问题。它通过熔断机制防止因单个服务故障导致系统级联崩溃,类似电路中的保险丝。主要功能包括服务降级、熔断、线程隔离等,能在服务不可用时快速失败并返回预设响应,避免线程阻塞和资源耗尽。Hystrix基于Netflix实现,适用于高并发场景,当检测到连续错误时会暂时切断故障服务,并通过fallback机制返回默认值,待服务恢复后自动重试,从而提升分布式系统的稳定性和容错能力。

ywl470812087的博客 8万+

豪猪的刺长在哪里:Hystrix隔离舱、熔断状态机、请求缓存合并与线程池推算的源码推演

Hystrix虽已进入维护模式,但它把隔离、熔断、降级、请求缓存、请求合并与监控组合成一套完整的容错范式,至今仍是理解微服务韧性的最佳样本。本文先从慢依赖耗尽线程的雪崩推演出发,拆解命令模式与九道执行关口,结合源码剖析线程池与信号量隔离、三态熔断状态机与五百毫秒二十桶的健康统计、请求上下文缓存与定时节拍合并,并用虚拟时间仿真量化隔离、熔断与合并的收益和代价,最后给出线程池与超时推算、配置优先级、线程上下文传递等生产实践要点,以及向Resilience4j和Sentinel迁移的思想演进对照。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 168万+

SpringCloud之Hystrix:全方位掌握服务稳定性保障利器!

在分布式系统中,服务之间的依赖关系错综复杂,任何一个服务的故障或延迟都可能导致整个系统的瘫痪。为了防止这种“雪崩效应”,Netflix 开发了 Hystrix,一个用于管理分布式系统中的服务依赖和容错的工具。Hystrix 通过隔离策略和熔断机制,确保系统在部分服务出现故障时,不会影响到整个系统的稳定性。当服务调用超时或失败时,Hystrix 可以立即中断这些调用,防止故障在系统中传播。

邓邓子的博客 2089

Spring Cloud :Hystrix实现优雅的服务容错

作为Spring Cloud体系内实现熔断机制的关键组件,Hystrix承担着服务容错保护的重要职责。它由Netflix开源,旨在为分布式系统提供延迟处理和容错解决方案。其核心作用在于引入延迟容忍与容错逻辑,精细管理分布式服务间的交互,确保系统的高可用性和鲁棒性。在复杂分布式系统环境中,往往涉及数十个应用,这些应用依赖于多个项目。不可避免地,每个依赖项目都有可能在某个时刻遭遇失败并触发故障。若未对这些故障实施有效隔离措施,整个分布式系统可能面临崩溃风险。

布说在见的博客 2627

spring cloud hystrix原理介绍及使用

spring cloud hystrix通过服务隔离、熔断、降级等手段控制依赖服务的延迟与失败。

openstack卷分离异常问题处理

对于 2023-05-10 之后的所有 OpenStack 版本,需要将Nova 配置为向 Cinder 发送服务令牌,然后 Cinder 接收该令牌。cinder.conf处添加service_token_role配置。1.修改nova的config文件添加如下配置。确定service role 是否存在。有关详细信息,请参阅。重启nova cinder 服务。nova-compute日志。cinder-api日志。

weixin_43391291的博客 477

CSRT跟踪算法的使用

Fu Xianjun. All Rights Reserved. 文章目录 前言 一、CSRT跟踪算法是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、CSRT跟踪算法是什么? 在具有通道和空间可靠性的判别相关滤波器(DCF-CSR)中,我们使用空间可靠性图将滤波器支持调整为从帧中选择区.

sinat_53821602的博客 7906

VS2022下OSG+OSGEARTH开发环境一键配置指南(Win10 x64+CMake自动化构建)

本文详细介绍了在VS2022环境下配置OSG和OSGEARTH开发环境的完整指南,包括软件下载、CMake自动化构建、编译实战及环境验证。通过一键配置脚本和常见问题解决方案,帮助开发者快速搭建3D开发环境,提升开发效率。

weixin_28828243的博客 406

泛微E10 eBuilder低代码平台避坑指南:新手最容易犯的5个错误及解决方案

本文针对泛微E10 eBuilder低代码平台的新手开发者,总结了5个最常见错误及解决方案,包括表单联动配置、流程设计权限、动作流时序、数据加工类型转换和权限管理过度配置等问题。通过实战经验和代码示例,帮助开发者避开常见陷阱,提升开发效率。

weixin_30919429的博客 540

保姆级教程:用GEE(Google Earth Engine)复现CASA模型计算NPP,附完整数据集清单与Python代码

本文提供了一份详细的保姆级教程,指导如何使用GEE(Google Earth Engine)复现CASA模型计算NPP(净初级生产力)。教程涵盖环境准备、关键数据集获取与处理、Python代码实现全流程,以及结果验证与常见问题解决方案,帮助生态学研究者高效完成NPP计算。

weixin_28707365的博客 334

深度可分离卷积(DepthwiseSeparableConvolution):Depthwise卷积与Pointwise卷积

深度可分离卷积不用多说,在轻量级网络架构方面是一个绕不开的话题,只要接触深度学习多多少少会接触。深度可分离卷积即DepthwiseSeparableConvolution,该卷积将一个常规卷积过程划分成两个完成Depthwise卷积和Pointwise卷积,在保证输出一样时,计算量大大降低。首先来看,一个常规卷积是怎么实现的。其示意图如果我们从通道数变换的角度来看,卷积就是将3通道的tensor变为了4通道的tensor,我们来看看深度可分离卷积是怎么实现通道的变化的。...

xu.hyj 1万+

Unity 面试篇|(二)Unity基础篇 【全面总结 | 持续更新】

在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足。一个程序在运行(执行)的过程中所需要的硬件和软件环境运行时的主要作用是提供程序运行所需要的环境和基础设施,通过为程序提供内存分配、线程管理、类型检查、对象实例化和垃圾回收等操作来支持程序的运行公共语言运行时(Common Language Runtime,CLR)是整个.NET框架的核心,它为.NET应用程序提供了一个托管的代码执行环境。

游戏开发小Y的博客 13万+

Linux存储软件栈剖析之第5篇:F2FS文件系统

F2FS是三星专为NAND闪存设计的开源文件系统,通过异地更新、磨损均衡等机制优化闪存特性。其架构采用层次化存储管理(Block→Segment→Section→Zone)和多日志区域设计,基于数据热度分类(热/温/冷数据)提升性能。核心创新包括节点地址表(NAT)解决级联更新问题,以及基于成本的垃圾回收算法。F2FS通过检查点机制确保崩溃一致性,并利用并行访问能力充分发挥闪存性能优势,显著降低写放大效应,延长设备寿命。

指尖动听知识库 199

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: 6万字《Spring框架从入门到精通》(建议收藏)
下一篇: RabbitMQ 高可用之如何确保消息成功消费
java111112313213
博客等级 码龄5年 15粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值