Hystrix進階攻略之熔斷器原理及測試

一、基本原理

之前的入門文章裡面已經詳細介紹過,這裡就不再贅述,不懂的可以參考之前的文章:

今天,我們是以實戰代碼的形式模擬一些異常,演練這些原理

二、實戰演練

我們來演示什麼場景呢?

  • 演示熔斷器三種狀態的轉換(close——half-open——open)
  • 演示熔斷器下的降級策略

1、構建熔斷器策略

  • withMetricsRollingStatisticalWindowBuckets

注意:這裡設置的窗口大小一定要 >= withCircuitBreakerRequestVolumeThreshold,否則斷路器始終open不了。默認滑動窗口大小:10

  • withMetricsRollingStatisticalWindowInMilliseconds

默認滑動窗口時間窗:10s。

  • withCircuitBreakerRequestVolumeThreshold

滑動窗口時間窗內,經過短路器的流量超過了一定的閾值,才執行短路。默認是20次

  • withCircuitBreakerErrorThresholdPercentage

滑動窗口時間窗內,斷路器統計到的異常調用的佔比超過了一定的閾值,才執行短路,默認是50%。

  • withCircuitBreakerSleepWindowInMilliseconds

open到half-open狀態(試探服務)的時間。默認值:5000ms

本次我們採用的熔斷器策略為:我們以該策略來模擬場景驗證

.withMetricsRollingStatisticalWindowBuckets(2)

.withMetricsRollingStatisticalWindowInMilliseconds(6000)

.withCircuitBreakerRequestVolumeThreshold(2)

.withCircuitBreakerErrorThresholdPercentage(40)

.withCircuitBreakerSleepWindowInMilliseconds(6000))

簡而言之:無非就掌握三種狀態的轉換(open——half——open)

  • open:在滑動窗口內(2個窗),滑動窗口時間窗內(6s),經過斷路器的流量 >= 2,且錯誤比例>40%
  • open ~ half-open:再經過6s的時間
  • half-open ~ close:成功訪問一次

2、異常模擬

if(adId.equals(-1L)) {

// 如果調用失敗了,報錯了,那麼就會去調用fallback降級機制

throw new Exception();

}

即:AdId=-1的請求為異常請求

3、單元測試類

依賴系統啟動:spring-boot-hystrix-ad

項目名:spring-boot-hystrix-circuit-breaker

實驗實錄:

Hystrix進階攻略之熔斷器原理及測試

1)open close狀態

Hystrix進階攻略之熔斷器原理及測試

2)異常統計信息

Hystrix進階攻略之熔斷器原理及測試

2)open狀態

Hystrix進階攻略之熔斷器原理及測試

3)open ~ half-open and half-open ~ close

Hystrix進階攻略之熔斷器原理及測試

4、結合hystrix-dashboard測試熔斷器原理

啟動我們的Tomcat,打開我們的監控儀表盤:http://localhost:8080/hystrix-dashboard/

基本配置:http://localhost:8022/hystrix.stream

從界面上觀察熔斷器的狀態轉換:

Hystrix進階攻略之熔斷器原理及測試

從界面上,我們可以觀察如下幾點變化:

  • Circuit:Closed ~ Open(界面上是看不到half-open)
  • Success:10
  • Failure:3
  • Reject:3
  • Success:3


分享到:


相關文章: