微服务入门 雪崩 降级与熔断

微服务-API网关-熔断降级 介绍 在微服务架构中,各个服务之间往往是级联在一起的,一个服务发生故障时可能会造成以下灾难: 服务依赖方调用超时,导致任务队列打满,引起链式反应,最终导致整个集群雪崩。 服务依赖方调用返回失败,引起链式反应,最终导致整个集群不可用。 所以需要在微服务不可用时切断故障服务与其他服务的通讯。 熔断是对服务提供者说的,由于某些原因(比如网络不通、服务挂了、请求处理不过来)造成服务提供者不能提供服务时,服务提供者就需要切断和服务调用者的连接,不然就造成资源浪费或者队列打满,从而导致链式反应。 降级是对服务调用者 阅读详情

一服务雪崩
假设存在此调用链
在这里插入图片描述
此时,Service A的流量波动很大,流量经常会突然性增加!那么在这种情况下,就算Service A能扛得住请求,Service B和Service C未必能扛得住这突发的请求。
此时,如果Service C因为抗不住请求,变得不可用。那么Service B的请求也会阻塞,慢慢耗尽Service B的线程资源,Service B就会变得不可用。紧接着,Service A也会不可用,这一过程如下图所示在这里插入图片描述
如上图所示,一个服务失败,导致整条链路的服务都失败的情形,我们称之为服务雪崩(面试装13必备)。
那么,服务熔断和服务降级就可以视为解决服务雪崩的手段之一。

服务熔断
什么是服务熔断呢?
服务熔断:当下游的服务因为某种原因突然变得不可用或响应过慢,上游服务为了保证自己整体服务的可用性,不再继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用。

需要说明的是熔断其实是一个框架级的处理,那么这套熔断机制的设计,基本上业内用的是断路器模式,如Martin Fowler提供的状态转换图如下所示
在这里插入图片描述

1. 最开始处于closed状态,一旦检测到错误到达一定阈值,便转为open状态;
2. 这时候会有个 reset timeout,到了这个时间了,会转移到half open状态;
3. 尝试放行一部分请求到后端,一旦检测成功便回归到closed状态,即恢复服务;

业内目前流行的熔断器很多,例如阿里出的Sentinel,以及最多人使用的Hystrix
在Hystrix中,对应配置如下

//滑动窗口的大小,默认为20
circuitBreaker.requestVolumeThreshold 
//过多长时间,熔断器再次检测是否开启,默认为5000,即5s钟
circuitBreaker.sleepWindowInMilliseconds 
//错误率,默认50%
circuitBreaker.errorThresholdPercentage

每当20个请求中,有50%失败时,熔断器就会打开,此时再调用此服务,将会直接返回失败,不再调远程服务。直到5s钟之后,重新检测该触发条件,判断是否把熔断器关闭,或者继续打开。

这些属于框架层级的实现,我们只要实现对应接口就好
服务升级
那么,什么是服务降级呢?
这里有两种场景:

当下游的服务因为某种原因响应过慢,下游服务主动停掉一些不太重要的业务,释放出服务器资源,增加响应速度!
当下游的服务因为某种原因不可用,上游主动调用本地的一些降级逻辑,避免卡顿,迅速返回给用户!
其实乍看之下,很多人还是不懂熔断和降级的区别!

其实应该要这么理解:

服务降级有很多种降级方式!如开关降级、限流降级、熔断降级!
服务熔断属于降级方式的一种!
可能有的人不服,觉得熔断是熔断、降级是降级,分明是两回事啊!其实不然,因为从实现上来说,熔断和降级必定是一起出现。因为当发生下游服务不可用的情况,这个时候为了对最终用户负责,就需要进入上游的降级逻辑了。因此,将熔断降级视为降级方式的一种,也是可以说的通的!

我撇开框架,以最简单的代码来说明!上游代码如下

try{
 //调用下游的helloWorld服务
 xxRpc.helloWorld();
}catch(Exception e){
 //因为熔断,所以调不通
 doSomething();
}

注意看,下游的helloWorld服务因为熔断而调不通。此时上游服务就会进入catch里头的代码块,那么catch里头执行的逻辑,你就可以理解为降级逻辑!

服务降级大多是属于一种业务级别的处理。当然这里讲的是另一种降级方式,也就是开关降级!这也是我们生产上常用的另一种降级方式!

做法很简单,做个开关,然后将开关放配置中心!在配置中心更改开关,决定哪些服务进行降级。至于配置变动后,应用怎么监控到配置发生了变动,这就不是本文该讨论的范围。

那么,在应用程序中部下开关的这个过程,业内也有一个名词,称为埋点!

那接下来最关键的一个问题,哪些业务需要埋点?

一般有以下方法

(1)简化执行流程
自己梳理出核心业务流程和非核心业务流程。然后在非核心业务流程上加上开关,一旦发现系统扛不住,关掉开关,结束这些次要流程。

(2)关闭次要功能
一个微服务下肯定有很多功能,那自己区分出主要功能和次要功能。然后次要功能加上开关,需要降级的时候,把次要功能关了吧!

(3)降低一致性
假设,你在业务上发现执行流程没法简化了,愁啊!也没啥次要功能可以关了,桑心啊!那只能降低一致性了,即将核心业务流程的同步改异步,将强一致性改最终一致性!

可是这些都是手动降级,有办法自动降级么?

我们在生产上没弄自动降级!因为一般需要降级的场景,都是可以预见的,例如某某活动。假设,平时真的有突发事件,流量异常,也有监控系统发邮件通知,提醒我们去降级!

当然,这并不代表自动降级不能做,因此以下内容可以认为我在胡说八道,个人建议,如果让我来做自动降级我会怎么实现:

(1)自己设一个阈值,例如几秒内失败多少次,就启动降级
(2)自己做接口监控(有兴趣的可以了解一下Rxjava),达到阈值就走推送逻辑。怎么推呢?比如你配置是放在git上,就用jgit去改配置中心的配置。如果配置放数据库,就用jdbc去改。
(3)改完配置中心的配置后,应用就可以自动检测到配置的变化,进行降级!(这句不了解的,了解一下配置中心的热刷新功能)

欢迎点击关注,后续会发布更多JAVA方面的文章

Oracle数据库安装及配置(Oracle19c) Windows 10安装Oracle 19c教程 阅读详情

相关推荐

长期换衣行人重识别(Long-Term Clothes-Changing Person Reid)数据集汇总

长期换衣行人重识别任务中目前常用的数据集总览目前换衣数据集的主要问题数据集换衣/总体情况集统计DeepChange(2021)LaST(2021)COCAS(2020)VC-Clothes(2020)LTCC(2020)PRCC(2019)Celebrities-reID(2019) 总览 在长期换衣行人重识别的任务当中,数据集的获取(尤其是对于学术环境下)是一个难点,主要的困难有以下几点: 采集大规模的数据集比较困难。 采集不同的衣服的数据集比较困难。 采集不同衣服不同角度的数据集比较困难。 目前也有

KingsMan666的博客 8378

谈谈服务雪崩、降级与熔断

引言 首先,之所以谈这个话题呢,是发现现在很多人对微服务的设计缺乏认识,所以写一篇扫盲文。当然,考虑到目前大多微服务的文章都是口水文,烟哥争取将实现方式讲透,点清楚,让大家有所收获! OK,我要先说明一下,我有很长一段时间将服务降级和服务熔断混在一起,认为是一回事! 为什么我会有这样的误解呢? 针对下面的情形,如图所示: 当 Service A调用 Service B,失败多次达到一定阀值, Service A不会再去调 Service B,而会去执行本地的降级方法! 对于这么一套机制:在Spri.

wdquan19851029的专栏 535

标准工时精益化管理:理论、方法与技巧

ECRS工时分析软件是一款综合性软件,包含了IE软件、IE改善软件、工业工程软件、作业改善/业务改善软件、动作分析软件、作业分析软件、ECRS分析法、ECRS改善手法、时间测量软件、工时测量软件、标准工时计算软件等功能。理论上,标准工时是指在标准的工作环境下,完成一道加工工序所需要花费的人工时间。不同企业、不同工序需要的辅助作业时间和损耗时间各不相同,因此企业需要灵活运用标准工时公式进行计算。总之,标准工时的制定需要综合考虑多种因素,企业可以灵活运用本文介绍的方法和技巧来优化制定流程。

VIOOVI_ECRS的博客 846

微服务篇之雪崩、降级和熔断

一个服务失败,导致整条链路的服务都失败的情形。

冲鸭的博客 1391

Jetson AGX Orin边缘AI实战:用YOLOv8做目标检测,我的环境配置踩坑与优化记录

本文详细记录了在Jetson AGX Orin上部署YOLOv8目标检测模型的环境配置与优化过程。从JetPack版本确认、PyTorch安装陷阱到Torchvision编译技巧,再到YOLOv8部署和系统级优化,提供了完整的实战指南。特别针对边缘AI设备的特性,分享了CUDA加速、内存管理等性能调优经验,帮助开发者高效完成工业级AI应用部署。

weixin_30839881的博客 375

软考嵌入式 第五讲 嵌入式Linux系统技术

5.1 inittab配置文件 Linux实时操作系统开机引导时首先启动内核,由内核检查和初始化硬件设备,载入设备的驱动程序模块,安装root文件系统,然后内核将启动一个名为init的进程,它是系统运行的第一个进程,进程号为1。在init运行完成并启动其他必要的后续进程后,系统开始运行,引导过程结束。 在任何时候,可以在文件inittab中添加新的记录项。重新检查inittab文件时,可以通过命令:init q/ Q使init进程立即重新读取并处理文件inittab。 5.1.1 inittab文件记录

Leon的博客 526

07.服务雪崩、熔断与降级

服务雪崩、熔断与降级前言服务雪崩概念原因服务熔断概念熔断过程服务降级概念服务熔断和降级总结1.共同点2.不同点3.总结 前言 前面我们已经学习了Eureka、consul、Ribbon与OpenFeign,后面我们要学习服务熔断利器Hystrix。学习Hystrix之前我们首先要明确三个概念:服务雪崩、服务熔断、服务降级 服务雪崩 概念 在微服务之间进行服务调用时由于某一个服务故障,导致级联服务故障的现象,称为雪崩效应。雪崩效应描述的是提供方不可用,导致消费方不可用并将不可用逐渐放大的过程。 原因 假如存在

潮汐先生的专栏 506

深入解析:武汉光庭信息技术 Android CarPlay 开发岗位的技术要求与面试准备(大连)

武汉光庭信息大连分部招聘Android CarPlay开发工程师,要求专科以上学历及2年以上Android开发经验,需精通CarPlay集成技术与车载系统开发。该职位涉及Android底层框架修改、CarPlay协议实现及车规级系统开发,需处理USB/HID驱动、图形合成等技术难点,并确保通过Apple严格认证。求职者需具备扎实的Android开发能力,熟悉车载环境特殊性,包括系统稳定性保障、人机交互适配等技术要点。文章深度解析了职位技术内涵,并提供面试问题与参考答案,帮助求职者全面准备这一复合型技术岗位。

郑伟强dev的专栏 400

熔断机制hystrix

熔断机制hystrix一、问题产生雪崩效应:是一种因服务提供者的不可用导致服务调用者的不可用,并将不可用逐渐放大的过程  正常情况下的服务:某一服务出现异常,拖垮整个服务链路,消耗整个线程队列,造成服务不可用,资源耗尽:         形成过程:           1)服务提供者不可用                                 a)硬件故障:硬件损坏造成的服务器主机宕机,...

smillest的专栏 1万+

2026年经纬恒润嵌入式笔试试卷带答案

2026年经纬恒润嵌入式笔试试卷涵盖车规MCU选型(如TriCore)、Cortex-M启动流程、指针数组区别、AUTOSAR OS任务调度(静态优先级抢占)、CAN总线特性(终端电阻必要性)、PID控制原理、SOME/IP协议应用等核心知识点。试题聚焦汽车电子系统设计,强调功能安全与实时性要求,涵盖中断处理、Bootloader升级机制、内存布局及可靠性设计(如看门狗、ECC校验)。多选题考察通信协议分层应用,填空题强化基础概念(如MSP初始值、SOME/IP、积分项作用)。整体体现车载嵌入式开发对底层原

Open 76

机器学习笔记:估算模型训练所需的样本量的方法

相反,如果训练得分高而交叉验证得分低,那么模型可能存在过拟合问题,需要更多的样本来提高泛化能力。本文将介绍一些常用的方法来估算模型训练所需的样本量,并提供相应的源代码。除了经验法则和学习曲线法,还有一些统计学方法可以用于估算模型训练所需的样本量。学习曲线是一种通过绘制模型性能与样本量之间的关系曲线来估算样本量的方法。需要注意的是,这些方法仅提供了估算样本量的指导,具体的样本量仍然需要根据实际情况进行调整和优化。通过合理估算样本量,可以提高机器学习模型的性能和泛化能力,从而更好地应用于实际问题中。

HnrzLinux的博客 2732

浅谈服务雪崩、降级、熔断(快速了解概念)

首先,之所以谈这个话题呢,是发现现在很多人对微服务的设计缺乏认识,所以写一篇扫盲文。当然,考虑到目前大多微服务的文章都是口水文,烟哥争取将实现方式讲透,点清楚,让大家有所收获!OK,我要先说明一下,我有很长一段时间将和混在一起,认为是一回事!为什么我会有这样的误解呢?针对下面的情形,如图所示当Service A调用Service B,失败多次达到一定阀值,Service A不会再去调Service B,而会去执行本地的降级方法!

一个平平无奇的搬砖人 1242

Unity Shader之路(一)什么是Unity Shader?

Unity Shader前言什么是UnityShaderUnity Shader和材质的关系 前言 众所周知,要想当游戏开发工程师,Unity中的Shader编写不得不摸,这一系列文章我将描写我的Shader学习之路,致敬冯乐乐的书Unity Shader入门精要,此篇什么是Unity Shader?希望能给后人一点方向 我们刚开始接触Unity的时候,总是会遇到材质,但是不了解材质都是什么,为什么可以在很多材质中选择,为什么有时候选择了其他材质后就不能达到我们想要的结果,为什么资源商店有那么多的材质,山.

TurboQ珞珈 2237

Hystrix:服务熔断

文章目录服务雪崩 服务雪崩 ​ 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务,这就是所谓的“扇出”,如果扇出的链路上某个微服务的调用响应时间过长,或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”。 ​ 对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几十秒内饱和。比失败更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多的级联故障,

qq_44058265的博客 375

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SpringCloud-Netflix-07-Hystrix 服务熔断

七、Netflix Hystrix 服务熔断 7.1 Hystrix 简介 7.1.1 雪崩效应 7.1.2 Hystrix 简介 7.2 Hystrix 快速入门 7.2.1 测试方法降级 7.2.2 超时降级 7.3 Hystrix处理高并发策略 7.3.1 准备测试环境 7.3.2 JMeter测试工具 7.3.2.1 JMeter简介 7.3.2.2 JMeter的使用 7.4 服务隔离 7.4.1 线程池隔离 7.4.2 信号量隔离 7.4.3 小结 7.5 Hystrix Dashboard 7

緑水長流*z 893

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Gateway之限流、熔断

Gateway之限流、熔断

weixin_67677668的博客 3177

浅谈微服务Spring Cloud(面试必备):服务雪崩、降级与熔断

浅谈微服务Spring Cloud(面试必备):服务雪崩、降级与熔断 前言 今天博主将为大家分享浅谈微服务Spring Cloud(面试必备):服务雪崩、降级与熔断,不喜勿喷,如有异议欢迎讨论! 我要先说明一下,我有很长一段时间将服务降级和服务熔断混在一起,认为是一回事! 为什么我会有这样的误解呢? 当Service A调用Service B,失败多次达到一定阀值,Service A不会再去...

Mr_chen的博客 5069

什么是服务的雪崩、熔断、降级的解释以及Hystrix和Sentinel服务熔断器的解释、比较

服务熔断是微服务架构中的容错机制,用于保护系统免受服务故障或异常的影响。当某个服务出现故障或异常时,服务熔断可以快速隔离该服务,确保系统稳定可用。它通过监控服务的调用情况,当错误率或响应时间超过阈值时,触发熔断机制,后续请求将返回默认值或错误信息,避免资源浪费和系统崩溃。服务熔断还支持自动恢复,重新尝试对故障服务的请求,确保服务恢复正常后继续使用。服务降级是也是一种微服务架构中的容错机制,用于在系统资源紧张或服务故障时保证核心功能的可用性。

TLOVEYOUTOO的博客 2238

服务降级与服务熔断区别

服务降级:系统有限的资源的合理协调 概念: 服务降级一般是指在服务器压力剧增的时候,根据实际业务使用情况以及流量,对一些服务和页面有策略的不处理或者用一种简单的方式进行处理,从而释放服务器资源的资源以保证核心业务的正常高效运行。 原因: 服务器的资源是有限的,而请求是无限的。在用户使用即并发高峰期,会影响整体服务的性能,严重的话会导致宕机,以至于某些重要服务不可用。故高峰期为了保证核心功能服务的可用性,就需要对某些服务降级处理。可以理解为舍小保大 应用场景: 多用于微服务架构中,一般当整个微服务架构整体的负

weixin_41882200的博客 7283

【微服务~Sentinel】Sentinel降级、限流、熔断

Sentinel降级、限流、熔断

少年你真的要止步于此嘛。 4415

微服务保护之熔断降级

在微服务架构中,服务之间的调用是通过网络进行的,网络的不确定性和依赖服务的不可控性,可能导致某个服务出现异常或性能问题,进而引发整个系统的故障,这被称为 微服务雪崩。为了防止这种情况发生,常用的一些保护措施包括超时处理、熔断降级、限流、线程池隔离和信号量隔离等。

cyt涛的博客 1889

微服务熔断、降级——Hystrix

一、概述 1、服务雪崩 分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个基础服务。如下图,对于同步调用,当库存服务不可用时,商品服务请求线程被阻塞,当有大批量请求调用库存服务时,最终可能导致整个商品服务资源耗尽,无法继续对外提供服务。并且这种不可用可能沿请求调用链向上传递,这种现象被称为雪崩效应。 雪崩效应常见场景 1)硬件故障:如服务器宕机,机房断电,光纤被挖断等。 2)流量激增:如异常流量,重试加大流量等。 3)缓存穿透:一般发生在应用重启,所有缓存失效时,以及短时间内大量缓存失效

IT__learning的博客 4941

服务熔断降级简介

背景   在微服务中,当一切正常时,请求流看起来是这样的:   当其中有一个服务(例如服务I)有延迟时,它可能阻塞整个用户请求:   在高流量的情况下,一个依赖服务的延迟可能导致服务器上的所有资源在数秒内饱和,这也意味着后续再有请求将无法立即提供服务: 解决方案   当使用熔断降级框架时,框架会包装每个依赖项,原有架构会发生变化,每个依赖项相互隔离,当延迟发生时,它会被限制在资源中,并包含回...

博学de叫兽 5557

如何应对服务雪崩?详解 服务降级与服务熔断

摘要:在分布式系统中,服务雪崩是指因下游服务异常导致连锁故障的现象。为增强系统韧性,需采用服务降级和熔断机制。服务降级通过牺牲非核心功能保证系统存活,包括预案式人工降级和基于指标的自动降级。服务熔断则在下游错误率过高时主动断路,防止故障扩散,包含关闭、打开和半开三种状态。两者协同工作:熔断决定何时停止调用,降级提供替代方案。正确实施这些机制能有效预防系统崩溃,但需避免超时过长、重试过多等错误做法。

Muyu1uz的博客 757

【深入理解SpringCloud微服务】了解微服务的熔断、限流、降级,手写实现一个微服务熔断限流器

我们通过SpringAOP扫描被@Protected注解修饰的方法,给它们生成代理对象,并且通过SpringAOP的@Around注解定义了环绕增强逻辑,当请求被@Protected注解修饰的接口方法接收时,就会进入这里的增强逻辑,增强逻辑做的自然就是熔断、限流、降级等这些事情。当调用一个接口方法时,如果被流控,或者断路器处于打开状态,或者执行目标方法时超时或抛出异常,并且接口设置了降级回调,那么执行对应Fallback实现类的降级处理方法。限流也叫流控,也就是流量控制,作用是限制流入服务接口的流量大小。

weixin_43889578的博客 2050

微服务降级、熔断与雪崩

本人博客网址:https://www.wzbjsz.cn 在微服务中,当持续的请求大量的失败时,线程堆积导致服务器不堪重负,就会出现雪崩事件,这时候我们就要采取措施,进行熔断与服务降级,下面先说这三者的概念 雪崩 假如有三个微服务A、B、C,一个请求的执行过程是A->B->C,当B请求C出现大量错误(即错误)到达一定的阈值,服务不堪重负C服务崩溃了,那么B任然在不停地请求C,就会有...

wzbjsz的博客 917
上一篇: 详解Redis入门(面试)姿势
下一篇: 网易云音乐19年网络重大布局------消息队列改造之路
Formor_
博客等级 码龄7年 7粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值