面試官:熔斷和降級(jí)有什么區(qū)別?
熔斷和降級(jí)都是系統(tǒng)自我保護(hù)的一種機(jī)制,但二者又有所不同,它們的區(qū)別主要體現(xiàn)在以下幾點(diǎn):
- 概念不同
- 觸發(fā)條件不同
- 歸屬關(guān)系不同
1.概念不同
1.1 熔斷概念
“熔斷”一詞早期來(lái)自股票市場(chǎng)。熔斷(Circuit Breaker)也叫自動(dòng)停盤機(jī)制,是指當(dāng)股指波幅達(dá)到規(guī)定的熔斷點(diǎn)時(shí),交易所為控制風(fēng)險(xiǎn)采取的暫停交易措施。比如 2020 年 3 月 9 日,紐約股市開盤出現(xiàn)暴跌,隨后跌幅達(dá)到 7% 上限,觸發(fā)熔斷機(jī)制,停止交易 15 分鐘,恢復(fù)交易后跌幅有所減緩。
而熔斷在程序中,表示“斷開”的意思。如發(fā)生了某事件,程序?yàn)榱苏w的穩(wěn)定性,所以暫時(shí)(斷開)停止服務(wù)一段時(shí)間,以保證程序可用時(shí)再被使用。
如果沒有熔斷機(jī)制的話,會(huì)導(dǎo)致聯(lián)機(jī)故障和服務(wù)雪崩等問(wèn)題,如下圖所示:
1.2 降級(jí)概念
降級(jí)(Degradation)降低級(jí)別的意思,它是指程序在出現(xiàn)問(wèn)題時(shí),仍能保證有限功能可用的一種機(jī)制。
比如電商交易系統(tǒng)在雙 11 時(shí),使用的人比較多,此時(shí)如果開放所有功能,可能會(huì)導(dǎo)致系統(tǒng)不可用,所以此時(shí)可以開啟降級(jí)功能,優(yōu)先保證支付功能可用,而其他非核心功能,如評(píng)論、物流、商品介紹等功能可以暫時(shí)關(guān)閉。
所以,從上述信息可以看出:降級(jí)是一種退而求其次的選擇,而熔斷卻是整體不可用。
2.觸發(fā)條件不同
不同框架的熔斷和降級(jí)的觸發(fā)條件是不同的,本文咱們以經(jīng)典的 Spring Cloud 組件 Hystrix 為例,來(lái)說(shuō)明觸發(fā)條件的問(wèn)題。
2.1 Hystrix 熔斷觸發(fā)條件
默認(rèn)情況 hystrix 如果檢測(cè)到 10 秒內(nèi)請(qǐng)求的失敗率超過(guò) 50%,就觸發(fā)熔斷機(jī)制。之后每隔 5 秒重新嘗試請(qǐng)求微服務(wù),如果微服務(wù)不能響應(yīng),繼續(xù)走熔斷機(jī)制。如果微服務(wù)可達(dá),則關(guān)閉熔斷機(jī)制,恢復(fù)正常請(qǐng)求。
2.2 Hystrix 降級(jí)觸發(fā)條件
默認(rèn)情況下,hystrix 在以下 4 種條件下都會(huì)觸發(fā)降級(jí)機(jī)制:
- 方法拋出 HystrixBadRequestException
- 方法調(diào)用超時(shí)
- 熔斷器開啟攔截調(diào)用
- 線程池或隊(duì)列或信號(hào)量已滿
雖然 hystrix 組件的觸發(fā)機(jī)制,不能代表所有的熔斷和降級(jí)機(jī)制,但足矣說(shuō)明此問(wèn)題。
3.歸屬關(guān)系不同
熔斷時(shí)可能會(huì)調(diào)用降級(jí)機(jī)制,而降級(jí)時(shí)通常不會(huì)調(diào)用熔斷機(jī)制。因?yàn)槿蹟嗍菑娜殖霭l(fā),為了保證系統(tǒng)穩(wěn)定性而停用服務(wù),而降級(jí)是退而求其次,提供一種保底的解決方案,所以它們的歸屬關(guān)系是不同(熔斷 > 降級(jí))。
題外話
當(dāng)然,某些框架如 Sentinel,它早期在 Dashboard 控制臺(tái)中可能叫“降級(jí)”,但在新版中新版本又叫“熔斷”,如下圖所示:
但在兩個(gè)版本中都是通過(guò)同一個(gè)異常類型 DegradeException 來(lái)監(jiān)聽的,如下代碼所示:
所以,在 Sentinel 中,熔斷和降級(jí)功能指的都是同一件事,也側(cè)面證明了“熔斷”和“降級(jí)”概念的相似性。但我們要知道它們本質(zhì)上是不同的,就像兩個(gè)雙胞胎,不能因?yàn)樗麄冮L(zhǎng)得像,就說(shuō)他們是同一個(gè)人。
總結(jié)
熔斷和降級(jí)都是程序在我保護(hù)的一種機(jī)制,但二者在概念、觸發(fā)條件、歸屬關(guān)系上都是不同的。熔斷更偏向于全局視角的自我保護(hù)(機(jī)制),而降級(jí)則偏向于具體模塊“退而請(qǐng)其次”的解決方案。
參考 & 鳴謝
??https://blog.csdn.net/BiandanLoveyou/article/details/118067224??
??https://cloud.tencent.com/developer/article/1600700??
作者介紹
磊哥,14 年編程和框架從業(yè)經(jīng)驗(yàn),前 360 技術(shù)專家、CSDN 簽約作者、阿里云專家博主、拉勾網(wǎng)簽約作者、掘金優(yōu)秀作者、慕課網(wǎng)講師等。期待與你相遇,一起探討和分享技術(shù)的樂(lè)趣。