当前位置: 首页 > 后端技术 > Java

面试官:熔断和降级有什么区别?_0

时间:2023-04-01 20:39:30 Java

熔断和降级都是系统自我保护的机制,但又有所区别。它们的区别主要体现在以下几点:概念不同,触发条件不同,从属关系不同1.概念不同1.1“熔断机制”的概念又称为自动停牌机制,是指当股指波动达到规定的熔断点时,交易所为控制风险而采取的暂停交易措施。例如,2020年3月9日,纽约股票交易所大盘开盘暴跌,随后跌幅达到7%上限,触发熔断机制,停盘15分钟,复牌后跌幅放缓。程序中,fuse意为“断开”.如果某个事件发生,程序为了整体的稳定性,暂时(断开)服务一段时间,以保证程序可用时可以再次使用。如果没有熔断机制,会导致上线失败、服务雪崩等问题,如下图:1.2降级概念降级是指降低等级,指的是一个程序仍然可以保证有限的可用性出现问题时发挥作用。机制。比如电商交易系统,双11的时候用的人很多,如果这个时候全部功能都打开,系统可能会不可用。因此,此时可以启用降级功能,优先考虑支付功能,保证支付功能可用,而其他非核心功能,评论、物流、商品介绍等功能可以暂时关闭。因此,从以上信息可以看出,降级是次优选择,但熔断机制一般不可用。2、触发条件不同不同的框架对于熔断和降级的触发条件不同。在本文中,我们以经典的SpringCloud组件Hystrix为例来说明触发条件。2.1Hystrix断路器触发条件默认情况下,如果hystrix在10秒内检测到请求失败率超过50%,就会触发断路器机制。之后,每隔5秒尝试再次请求微服务。如果微服务无法响应,继续使用熔断机制。如果微服务可达,则关闭熔断机制,恢复正常请求。2.2Hystrix降级触发条件默认情况下,hystrix会在以下四种情况下触发降级机制:methodthrowsHystrixBadRequestExceptionmethodcalltimeoutfuseoninterceptioncallthreadpoolorqueueorsemaphoreisfull虽然hystrix组件的触发机制不能代表所有熔断机制和降级机制,却足以说明问题。3、降级机制可能在不同的隶属关系时被调用,但熔断机制通常不会在降级时被调用。因为断路器从大局出发,禁用服务是为了保证系统的稳定性,而降级是退而求其次提供有保障的解决方案,所以他们的隶属关系是不同的(断路器>降级)。题外当然,有些框架如Sentinel早期在Dashboard控制台可能会被称为“降级”,但在新版本中,新版本也被称为“熔断”,如下图所示:但是在两个版本中,都是通过同一个异常类型DegradeException来监听,如下代码所示:因此,在Sentinel中,熔断和降级函数指的是同一个东西,这也证明了概念的相似性“融合”和“降级”。但我们要知道,他们本质上是不同的,就像两个双胞胎一样,不能因为长得像就说他们是同一个人。综上所述,熔断和降级在我看来都是一种程序保护机制,只是概念、触发条件、隶属关系不同。Fusing更偏向于全局视角的自我保护(机制),而downgrading则偏向于解决特定模块“退为二”的问题。Reference&Acknowledgmentshttps://blog.csdn.net/Biandan...https://cloud.tencent.com/dev...本文已收录在Gitee开源仓库《Java 面试指南》,其中包含:Redis,JVM,Concurrency,Concurrency,MySQL,Spring,SpringMVC,SpringBoot,SpringCloud,MyBatis,DesignPatterns,MessageQueue等模块。Java面试就够了:超全Java常见面试题,持续更新中...