什麼是服務熔斷

2022-09-14 18:47:30 字數 1798 閱讀 1969

**自 漫畫:什麼是服務熔斷

什麼是服務熔斷?

熔斷這一概念**於電子工程中的斷路器(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秒),熔斷器會進入半熔斷狀態。所謂半熔斷就是嘗試恢復服務呼叫,允許有限的流量呼叫該服務,並監控呼叫成功率。如果成功率達到預期,則說明服務已恢復,進入熔斷關閉狀態;如果成功率仍舊很低,則重新進入熔斷關閉狀態。

三個狀態的轉化關係如下圖:

什麼是服務的熔斷降級

很多同學知道我在美團點評負責穩定性保障平台的研發,平台中的功能之一就有服務的熔斷降級,提起熔斷降級,大家可能熟悉的是netflix的開源元件hystrix,但是我們並沒有在它的基礎上進行二次開發,而是重新擼了乙個,可能有人說,重複造輪子不是浪費時間嗎?那如果造出的輪子更好用 跑的更快呢,所以不要怕造...

服務降級和服務熔斷的區別 什麼是服務的熔斷降級?

很多同學知道我在美團點評負責穩定性保障平台的研發,平台中的功能之一就有服務的熔斷降級,提起熔斷降級,大家可能熟悉的是netflix的開源元件hystrix,但是我們並沒有在它的基礎上進行二次開發,而是重新擼了乙個,可能有人說,重複造輪子不是浪費時間嗎?那如果造出的輪子更好用 跑的更快呢,所以不要怕造...

服務熔斷 服務降級

當某個微服務不可用或者響應時間太長時,會進行服務的降級,進而熔斷該節點微服務的呼叫,快速返回錯誤的響應資訊。當檢測到該節點微服務呼叫響應正常後,恢復呼叫鏈路。當伺服器壓力劇增的情況下,根據實際業務情況及流量,對一些服務和頁面有策略的不處理或換種簡單的方式處理,從而釋放伺服器資源以保證核心交易正常運作...