什么是服务熔断,什么是服务降级?

什么是服务熔断,什么是服务降级?什么是服务熔断 nbsp 熔断这一概念来源于电子工程中的断路器 CircuitBreak 在互联网系统中 当下游服务因访问压力过大而响应变慢或失败 上游服务为了保护系统整体的可用性 可以暂时切断对下游服务的调用 nbsp 这种牺牲局部 保全整体的措施就叫做熔断 nbsp 如果不采取熔断措施 我们的系统会怎样呢 我们来看一个栗子 nbsp 当前系统中有 A B C 三个服务 服务 A 是上游 服务 B

什么是服务熔断?

 

熔断这一概念来源于电子工程中的断路器(Circuit Breaker)。在互联网系统中,当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用。

 

这种牺牲局部,保全整体的措施就叫做熔断。

 

如果不采取熔断措施,我们的系统会怎样呢?我们来看一个栗子。

 

当前系统中有A,B,C三个服务,服务A是上游,服务B是中游,服务C是下游。它们的调用链如下:

 

 

什么是服务熔断,什么是服务降级?

 

 

一旦下游服务C因某些原因变得不可用,积压了大量请求,服务B的请求线程也随之阻塞。线程资源逐渐耗尽,使得服务B也变得不可用。紧接着,服务A也变为不可用,整个调用链路被拖垮。

 

 

什么是服务熔断,什么是服务降级?

像这种调用链路的连锁故障,叫做雪崩。

 

 

正所谓刮骨疗毒,壮士断腕。在这种时候,就需要我们的熔断机制来挽救整个系统。熔断机制的大体流程和刚才所讲的考试策略如出一辙:

 

 

 

什么是服务熔断,什么是服务降级?

 

 

这里需要解释两点:

 

1.开启熔断

在固定时间窗口内,接口调用超时比率达到一个阈值,会开启熔断。进入熔断状态后,后续对该服务接口的调用不再经过网络,直接执行本地的默认方法,达到服务降级的效果。

 

2.熔断回复

熔断不可能是永久的。当经过了规定时间之后,服务将从熔断状态回复过来,再次接受调用方的远程调用。

 

 

 

什么是服务熔断,什么是服务降级?

 

 

 

什么是服务熔断,什么是服务降级?

 

 

服务熔断的实际应用

 

什么是服务熔断,什么是服务降级?

 

Spring Cloud Hystrix是基于Netflix的开源框架Hystrix实现,该框架实现了服务熔断、线程隔离等一系列服务保护功能。

 

对于熔断机制的实现,Hystrix设计了三种状态:

 

1.熔断关闭状态(Closed)

服务没有故障时,熔断器所处的状态,对调用方的调用不做任何限制。

 

 

2.熔断开启状态(Open)

在固定时间窗口内(Hystrix默认是10秒),接口调用出错比率达到一个阈值(Hystrix默认为50%),会进入熔断开启状态。进入熔断状态后,后续对该服务接口的调用不再经过网络,直接执行本地的fallback方法。

 

 

3.半熔断状态(Half-Open)

在进入熔断开启状态一段时间之后(Hystrix默认是5秒),熔断器会进入半熔断状态。所谓半熔断就是尝试恢复服务调用,允许有限的流量调用该服务,并监控调用成功率。如果成功率达到预期,则说明服务已恢复,进入熔断关闭状态;如果成功率仍旧很低,则重新进入熔断关闭状态。

 

 

三个状态的转化关系如下图:

 

什么是服务熔断,什么是服务降级?

 

什么是服务熔断,什么是服务降级?

 

 

 

什么是服务熔断,什么是服务降级?

 

——————— 本文来自 茅坤宝骏氹 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/moakun/article/details/?utm_source=copy

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179322.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午3:51
下一篇 2026年3月26日 下午3:51


相关推荐

  • 大数加法运算 c语言_大数加法运算

    大数加法运算 c语言_大数加法运算前言:本篇博客将分为4到5篇来和大家一块讨论大数的加减乘除,然后再将运算做成一个大数运算库。其中除法较为棘手,但如果作完前三个运算后就没有什么难度了。虽然大多主流的编程语言如java,c++,都有大数运算库,可是c语言标准库并没有提供的大数运算,网上的c语言大数运算大多散而不周或过于复杂,所以本人决定写博客做一些简单的介绍,由于本人水平有限,如有错误或者bug请大家批评指正我会第一时间更正。开发

    2022年10月7日
    9
  • datagrip 激活码最新2021破解方法

    datagrip 激活码最新2021破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    60
  • 你了解System.out.println()的真正含义吗?

    你了解System.out.println()的真正含义吗?在Java编程中,我们常常用 System.out.println(); 来输出字符串,也许我们都已经猜到println()是方法名,但System是什么,out又是什么呢?  其实System是java.lang里面的一个类,如下图:     而out就是System里面的一个静态数据成员,而且这个成员是java.io.PrintStream类的引用。如下图,被关键字static修饰的成员可…

    2025年7月24日
    6
  • linux ln 软连接_ln命令建立软链接

    linux ln 软连接_ln命令建立软链接举例:1.对某个文件创建一个连接[root@www.linuxidc.com~]#ln-s/home/kk/ss.sh~#如果不写目标地址,即在当前目录建接立链接[root@www.linuxidc.com~]#lsCentOS-Base.repo.oldboyanaconda-ks.cfginstall.loginstall.log.syslogss.sh…

    2022年9月30日
    4
  • 连不上docker mysql_docker跨主机通信

    连不上docker mysql_docker跨主机通信宿主机连接docker中的mysqldokcer安装mysqldockerrun\–namemysql\-v$PWD/mysql:/var/lib/mysql\-p3306:3306\-eMYSQL_ROOT_PASSWORD=123456\-dmysql:5.7宿主机连接docker中的mysql错误的连接方式$mysql-uroot-pEnterpasswor…

    2022年8月21日
    8
  • ringbuffer是什么_Buffer

    ringbuffer是什么_BufferRingBuffer的高级用法(类似内核KFIFO)环形缓冲区(ringbuffer),环形队列(ringqueue)多用于2个线程之间传递数据,是标准的先入先出(FIFO)模型。一般来说,对于多线程共享数据,需要使用mutex来同步,这样共享数据才不至于发生不可预测的修改/读取,然而,mutex的使用也带来了额外的系统开销,ringbuffer/queue的引入,就是为了有效地解…

    2025年10月24日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号