api-gateway實踐(13)新服務網關 - 斷路保護/熔斷機制


 

參考鏈接:SpringCloud的Hystrix(五) Hystrix機制

新需求列表

1、在線測試

 

        根據定義,生成輸入界面,

        點擊測試,

        驗證參數,發起調用,返回執行結果

2、熔斷保護

 



 

兩個實現類:

  NoOpCircuitBreakerImpl,什么也不做的斷路器實現

  HystrixCircuitBreakerImpl,實現類:

HystrixCircuitBreakerImpl

  1. HystrixCommandProperties properties
  2. HystrixCommandMetrics metrics
  3. AtomicBoolean circuitOpen
  4. AtomicLong circuitOpenedOrLastTestedTime:斷路器打開或是上一次測試時間戳

HystrixCircuitBreakerImpl的方法

  isOpen 判斷斷路器的打開/關閉狀態

           如果打開,直接返回true,表示斷路器處於打開狀態。否則,從度量指標metrics中獲取healthcounts統計對象進一步判斷(該對象記錄了一個滾動時間窗內的請求信息快照,默認時間窗為10秒)

                  如果請求總數qps在預設的閾值范圍內就返回false,表示斷路器處於未打開狀態,默認值20

                  如果錯誤百分比在閾值范圍內就返回false,表示斷路器處於未打開狀態,默認值50

                  如果上述兩個條件都不滿足,就將斷路器設置為打開狀態(熔斷/短路)。同時,如果從關閉狀態切換到打開狀態的話,就將時間記錄到circuitOpenedOrLastTestedTime中。

       allowRequest 判斷請求是否被允許

           判斷是否強行打開,是則 return false 

           判斷是否強行關閉,是則 isOpen & return true

           !isOpen()||allowSingleTest()::斷開時的時間戳+配置中的circuitBreakerSleepWindowInMillseconds 是否 小於當前時間,如果是的話,就將當前時間更新到記錄斷路器打開的時間circuitBreakerOpenedOrLastTestedTime中,並允許該請求。

                  即設置了斷路器打開后的休眠時間(默認為5秒),休眠時間達到之后,將再次允許請求嘗試訪問,此時斷路器處於“”半開“”,

                           若此時請求繼續失敗,則斷路器又進入打開狀態,並等待下一個休眠窗口過去之后再嘗試。

                           若請求成功, 則將斷路器重新置於關閉狀態。

                           所以,allowSingleTest()和isOpen()配合,實現了斷路器的打開和關閉狀態的切換。

       markSuccess 用來關閉斷路器  在“半開”狀態時使用。若調用命令成功,通過調用它將打開的斷路器關閉,並重置度量指標對象。

命令執行的四個結果:成功、失敗、超時、拒絕,用來更新計時器

3、性能測試

4、調用計量


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM