1. 程式人生 > 其它 >微服務 —— 斷路器設計

微服務 —— 斷路器設計

熔斷機制是應對雪崩效應的一種微服務鏈路保護機制。當鏈路的某個微服務出錯不可用或者響應時間太長時,會進行服務的降級,進而熔斷該節點微服務的呼叫,快速返回錯誤的響應資訊。當檢測到該節點微服務呼叫響應正常後,恢復呼叫鏈路。服務斷路器的設計架構圖如下:

1 斷路器狀態

服務呼叫方為每一個呼叫服務 (呼叫路徑) 維護一個狀態機,在這個狀態機中有3種狀態:

  • CLOSED:預設狀態。斷路器觀察到請求失敗比例沒有達到閾值,斷路器認為被代理服務狀態良好

  • OPEN:斷路器觀察到請求失敗比例已經達到閾值,斷路器認為被代理服務故障,開啟開關,請求不再到達被代理的服務,而是快速失敗

  • HALF OPEN:斷路器開啟後,為了能自動恢復對被代理服務的訪問,會切換到半開放狀態,去嘗試請求被代理服務以檢視服務是否已經故障恢復。如果成功,會轉成CLOSED

    狀態,否則轉到OPEN狀態

2 熔斷策略

  • 指定時間內失敗率超過指定閾值

  • 指定時間內失敗次數超過指定閾值

  • 可跟進熔斷等級,適當調整熔斷超時時間

3 恢復策略

  • 指定時間內失敗率低於指定閾值

  • 指定時間內失敗次數低於指定閾值

4 拒絕策略

  • 直接丟擲指定異常

  • 呼叫降級策略進行處理

5 常見問題

使用斷路器需要考慮一些問題:

  • 針對不同的異常,定義不同的熔斷後處理邏輯

  • 設定熔斷的時長,超過這個時長後切換到HALF OPEN進行重試

  • 記錄請求失敗日誌,供監控使用

  • 主動重試,比如對於connection timeout造成的熔斷,可以用非同步執行緒進行網路檢測,比如telenet

    ,檢測到網路暢通時切換到HALF OPEN進行重試

  • 補償介面,斷路器可以提供補償介面讓運維人員手工關閉

  • 重試時,可以使用之前失敗的請求進行重試,但一定要注意業務上是否允許這樣做

6 使用場景

  • 服務故障或者升級時,讓客戶端快速失敗

  • 失敗處理邏輯容易定義

  • 響應耗時較長,客戶端設定的read timeout會比較長,防止客戶端大量重試請求導致的連線、執行緒資源不能釋放

更多JAVA、高併發、微服務、架構、解決方案、中介軟體的總結在:https://github.com/yu120/lemon-guide