⾼可⽤:降级和熔断有什么区别?
若有收获,就点个赞吧
上⼀篇
⾼性能:有哪些常⻅的 SQL 优化⼿
段?
下⼀篇
⾼可⽤:灰度发布和回滚有什么⽤?
注册 或 登录 语雀进⾏评论
加⼊语雀,参与知识分享与交流
或 语雀进⾏评论
%
关于语雀 使⽤帮助 数据安全 服务协议 English 快速注册
降级是从系统功能优先级的⻆度考虑如何应对系统故障。
服务降级指的是当服务器压⼒剧增的情况下,根据当前业务情况及流量对⼀些服务和
⻚⾯有策略的降级,以此释放服务器资源以保证核⼼任务的正常运⾏。
降级服务的特征如下 :
1. 原因:整体负荷超出整体负载承受能⼒。
2. ⽬的:保证重要或基本服务正常运⾏,⾮重要服务延迟使⽤或暂停使⽤
3. ⼤⼩:降低服务粒度,要考虑整体模块粒度的⼤⼩,将粒度控制在合适的范围内
4. 可控性:在服务粒度⼤⼩的基础上增加服务的可控性,后台服务开关的功能是⼀
项必要配置(单机可配置⽂件,其他可领⽤数据库和缓存),可分为⼿动控制和
⾃动控制。
5. 次序:⼀般从外围延伸服务开始降级,需要有⼀定的配置项,重要性低的优先降
级,⽐如可以分组设置等级 1-10,当服务需要降级到某⼀个级别时,进⾏相关配
置
延迟服务:⽐如发表了评论,重要服务,⽐如在⽂章中显示正常,但是延迟给⽤
户增加积分,只是放到⼀个缓存中,等服务平稳之后再执⾏。
在粒度范围内关闭服务(⽚段降级或服务功能降级):⽐如关闭相关⽂章的推
荐,直接关闭推荐区
⻚⾯异步请求降级:⽐如商品详情⻚上有推荐信息/配送⾄等异步加载的请求,如
果这些信息响应慢或者后端服务有问题,可以进⾏降级;
⻚⾯跳转(⻚⾯降级):⽐如可以有相关⽂章推荐,但是更多的⻚⾯则直接跳转
到某⼀个地址
写降级:⽐如秒杀抢购,我们可以只进⾏ Cache 的更新,然后异步同步扣减库存
到 DB,保证最终⼀致性即可,此时可以将 DB 降级为 Cache。
读降级:⽐如多级缓存模式,如果后端服务有问题,可以降级为只读缓存,这种
⽅式适⽤于对读⼀致性要求不⾼的场景。
降级按照是否⾃动化可分为:
⾃动开关降级(超时、失败次数、故障、限流)
⼈⼯开关降级(秒杀、电商⼤促等)
⾃动降级分类⼜分为 :
1. 超时降级:主要配置好超时时间和超时重试次数和机制,并使⽤异步机制探测回
复情况
2. 失败次数降级:主要是⼀些不稳定的 api,当失败调⽤次数达到⼀定阀值⾃动降
级,同样要使⽤异步机制探测回复情况
3. 故障降级:⽐如要调⽤的远程服务挂掉了(⽹络故障、DNS 故障、http 服务返回
错误的状态码、rpc 服务抛出异常),则可以直接降级。降级后的处理⽅案有:默
认值(⽐如库存服务挂了,返回默认现货)、兜底数据(⽐如⼴告挂了,返回提
前准备好的⼀些静态⻚⾯)、缓存(之前暂存的⼀些缓存数据)
4. 限流降级:当我们去秒杀或者抢购⼀些限购商品时,此时可能会因为访问量太⼤
⽽导致系统崩溃,此时开发者会使⽤限流来进⾏限制访问量,当达到限流阀值,
后续请求会被降级;降级后的处理⽅案可以是:排队⻚⾯(将⽤户导流到排队⻚
⾯等⼀会重试)、⽆货(直接告知⽤户没货了)、错误⻚(如活动太⽕爆了,稍
后重试)
在⼤规模分布式系统中,经常会有成百上千的服务。在⼤促前往往会根据业务的重要
程度和业务间的关系批量降级。这就需要技术和产品提前对业务和系统进⾏梳理,根
据梳理结果确定哪些服务可以降级,哪些服务不可以降级,降级策略是什么,降级顺
序怎么样。⼤型互联⽹公司基本都会有⾃⼰的降级平台,⼤部分降级都在平台上操
作,⽐如⼿动降级开关,批量降级顺序管理,熔断阈值动态设置,限流阈值动态设置
等等。
熔断是应对微服务雪崩效应的⼀种链路保护机制,类似股市、保险丝
微服务之间的数据交互是通过远程调⽤来完成的。服务 A 调⽤服务 B,服务 B 调⽤服
务 C,某⼀时间链路上对服务 C 的调⽤响应时间过⻓或者服务 C 不可⽤,随着时间的
增⻓,对服务 C 的调⽤也越来越多,然后服务 C 崩溃了,但是链路调⽤还在,对服务
B 的调⽤也在持续增多,然后服务 B 崩溃,随之 A 也崩溃,导致雪崩效应
服务熔断是应对雪崩效应的⼀种微服务链路保护机制。例如在⾼压电路中,如果某个
地⽅的电压过⾼,熔断器就会熔断,对电路进⾏保护。同样,在微服务架构中,熔断
机制也是起着类似的作⽤。当调⽤链路的某个微服务不可⽤或者响应时间太⻓时,会
进⾏服务熔断,不再有该节点微服务的调⽤,快速返回错误的响应信息。当检测到该
节点微服务调⽤响应正常后,恢复调⽤链路。
服务熔断的作⽤类似于我们家⽤的保险丝,当某服务出现不可⽤或响应超时的情况
时,为了防⽌整个系统出现雪崩,暂时停⽌对该服务的调⽤。
熔断和降级是两个⽐较容易混淆的概念,两者的含义并不相同。
降级的⽬的在于应对系统⾃身的故障,⽽熔断的⽬的在于应对当前系统依赖的外部系
统或者第三⽅系统的故障。
Spring Cloud 官⽅⽬前推荐的熔断器组件如下:
Hystrix
Resilience4J
Sentinel
Spring Retry
我们单独拎出 Sentinel 和 Hystrix 来说⼀下(
没记错的话,Hystrix
⽬前已经没有维护
了。
)。
Hystrix 是 Netflix 开源的熔断降级组件,Sentinel 是阿⾥中间件团队开源的⼀款不光
具有熔断降级功能,同时还⽀持系统负载保护的组件。
简单来说,两者都是主要做熔断降级的 ,那么两者到底有啥异同呢?该如何选择呢?
Sentinel 的 wiki 中已经详细描述了其与 Hystrix 的区别,地址:
https://github.com/alibaba/Sentinel/wiki/Sentinel-与-Hystrix-的对⽐。
下⾯这个详细的表格就来⾃ Sentinel 的 wiki。
如果你想了解 Sentinel、Hystrix、resilience4j 三者的对⽐的话,可以查看 Sentinel
的相关 wiki :https://github.com/alibaba/Sentinel/wiki/Guideline:-从-Hystrix-迁
移到-Sentinel#功能对⽐。
服务降级⽅案
服务熔断处理
⾼并发之服务降级与熔断
揭开服务降级的⾯纱!!!
什么是降级?
降级⽅式有哪些?
●
●
●
●
●
●
服务降级有哪些分类?
●
●
⼤规模分布式系统如何降级?
什么是熔断?
降级和熔断有什么区别?
有哪些现成解决⽅案?
●
●
●
●
推荐阅读
●
●
参考
●
●
Sentinel Hystrix
隔离策略 信号量隔离 线程池隔离/信号量隔离
熔断降级策略 基于响应时间或失败⽐率 基于失败⽐率
实时指标实现 滑动窗⼝ 滑动窗⼝(基于 RxJava)
规则配置 ⽀持多种数据源 ⽀持多种数据源
扩展性 多个扩展点 插件的形式
基于注解的⽀持 ⽀持 ⽀持
限流 基于 QPS,⽀持基于调⽤关系的
限流
有限的⽀持
流量整形 ⽀持慢启动、匀速器模式 不⽀持
系统负载保护 ⽀持 不⽀持
控制台 开箱即⽤,可配置规则、查看秒级
监控、机器发现等
不完善
常⻅框架的适配 Servlet、Spring Cloud、Dubbo、
gRPC 等
Servlet、Spring Cloud Netflix
⼤纲
登录 / 注册