HystrixCommandProperties的熔斷參數配置

下面是HystrixCommandProperties的熔斷參數配置。
HystrixCommandProperties.Setter commandProperties =HystrixCommandProperties. Setter()
……
.withCircuitBreakerEnabled(true)//默認爲true
.withCircuitBreakerForceClosed(false)//默認爲false
.withCircuitBreakerForceOpen(false)//默認爲false
.withCircuitBreakerErrorThresholdPercentage(50)//默認爲50%
.withCircuitBreakerRequestVolumeThreshold(20) //默認爲20
.withCircuitBreakerSleepWindowInMilliseconds(5000)//默認爲爲5s
具體配置含義如下所示。
withCircuitBreakerEnabled:是否開啓熔斷機制,默認爲true。
withCircuitBreakerForceClosed:是否強制關閉熔斷開關,如果強制關閉了熔斷開關,則請求不會被降級,一些特殊場景可以動態配置該開關,默認爲false。
withCircuitBreakerForceOpen:是否強制打開熔斷開關,如果強制打開可熔斷開關,則請求強制降級調用getFallback處理,可以通過動態配置來打開該開關實現一些特殊需求,默認爲false。
withCircuitBreakerErrorThresholdPercentage:如果在一個採樣時間窗口內,失敗率超過該配置,則自動打開熔斷開關實現降級處理,即快速失敗。默認配置下采樣週期爲10s,失敗率爲50%。
withCircuitBreakerRequestVolumeThreshold:在熔斷開關閉合情況下,在進行失敗率判斷之前,一個採樣週期內必須進行至少N個請求才能進行採樣統計,目的是有足夠的採樣使得失敗率計算正確,默認爲20。
withCircuitBreakerSleepWindowInMilliseconds:熔斷後的重試時間窗口,且在該時間窗口內只允許一次重試。即在熔斷開關打開後,在該時間窗口允許有一次重試,如果重試成功,則將重置Health採樣統計並閉合熔斷開關實現快速恢復,否則熔斷開關還是打開狀態,執行快速失敗。
熔斷後將降級調用getFallback進行處理(fallbackEnabled=true),通過Command如下方法可以判斷是否熔斷了。
isCircuitBreakerOpen:熔斷開關是否打開了,通過“circuitBreakerForceOpen().get()|| (!circuitBreakerForceClosed().get() && circuitBreaker.isOpen())”判斷。
isResponseShortCircuited:isCircuitBreakerOpen=true,且調用getFallback時返回true。
3 採樣統計
Hystrix在內存中存儲採樣數據,支持如下兩種採樣。
BucketedCounterStream:計數統計,比如記錄一定時間窗口內的失敗、超時、線程池拒絕、信號量拒絕數量,記錄N組。寫入數據時寫到第N組,統計時使用前N-1組數據,因爲第N個剛開始統計時是隨時變化的。然後基於時間滾轉採樣分組即可。

採樣統計滾轉時間窗口爲10s,每秒1個分組(桶),即每秒採樣一次,每個分組記錄着當前桶的成功、失敗、超時、線程拒絕統計數量。
RollingConcurrencyStream:最大併發數統計,如Command/ThreadPool的最大併發數。
RollingDistributionStream:延時百分比統計,同HystrixRollingNumber類似,差別在於其是百分位數的統計。比如每組記錄P(比如100)個數值,統計時使用前N-1組數據,將分組內數據按從小到大排序,然後累加,處於第p%位置的數值就是p百分位數,通過它可以實現P50、P99、P999,Hystrix用來統計時延的分佈情況。最新版本Hystrix使用HdrHistogram庫來實現統計。
3.1 Command、ThreadPool計數/最大併發採樣統計
HystrixThreadPoolProperties.Setter threadPoolProperties = HystrixThreadPoolProperties.Setter()
……
.withMetricsRollingStatisticalWindowInMilliseconds(1000)
.withMetricsRollingStatisticalWindowBuckets(10);
HystrixCommandProperties.Setter commandProperties =HystrixCommandProperties. Setter()
……
.withMetricsRollingStatisticalWindowInMilliseconds(10000)
.withMetricsRollingStatisticalWindowBuckets(10);
withMetricsRollingStatisticalWindowInMilliseconds:配置採樣統計滾轉時間窗口,默認爲10s。
withMetricsRollingStatisticalWindowBuckets:配置採用統計滾轉時間窗口內的桶的總數量,默認爲10,比如時間窗口爲10000,桶數量爲10,則採樣統計間隔爲每秒一個桶統計。
3.2 Command健康度採樣統計
HystrixCommandProperties.Setter commandProperties =HystrixCommandProperties. Setter()
……
.withMetricsRollingStatisticalWindowInMilliseconds(10000)
.withMetricsHealthSnapshotIntervalInMilliseconds(500);
withMetricsRollingStatisticalWindowInMilliseconds:同上所示。
withMetricsHealthSnapshotIntervalInMilliseconds:記錄健康採用統計的快照頻率,默認爲500ms,即500ms一個採樣統計間隔,那麼桶的數量爲10000/500=20個。
該統計在熔斷機制中使用,如果計算熔斷的頻率非常高,則要控制好採樣的頻率,如果太頻繁,那麼將造成CPU計算密集,如10ms一個週期,因爲會對前N-1個桶進行統計,計算累加時會耗費CPU。所以選擇Hystrix要注意此處的性能消耗和調優。如果此處是性能瓶頸,則可以廢掉統計,或者按照Hystrix思路實現自己的降級組件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章