天天看點

Hystrix使用總結Hystrix使用總結

Hystrix使用總結

網上看了一些說hystrix的隔離及熔斷機制的,感覺有些東西沒說清楚,在這裡自己簡單整理一下。

幾個名詞

信号量(Semaphorest)

信号量在不同的地方表達的意思不同。在hystrix中,它表示的是在某個時間區間内的請求數,也就是說在hystrix這邊,它是一個計數器的概念。

快速失敗(Fail—Fast)

不使用複雜的處理在事後來檢查問題,在發生錯誤的瞬間立刻結束工作,傳回失敗。

在java中,在使用foreach操作集合時,如果有執行remove等操作,會立刻抛出ConcurrentModificationException異常,這就是“快速報錯”的意思。

在hystrix中,fail-fast展現在當請求的服務異常導緻熔斷器打開時,hystrix拒絕繼續請求,快速生成失敗請求fallback傳回出去。

信号量與線程池隔離的差別

首先,信号量和線程池都可以對某個HystrixKey進行隔離,從隔離的粒度上來說沒有差別。他們之間具體的差別可以參考官網的解釋:

You can use semaphores (or counters) to limit the number of concurrent calls to any given dependency, instead of using thread pool/queue sizes. This allows Hystrix to shed load without using thread pools but it does not allow for timing out and walking away. If you trust the client and you only want load shedding, you could use this approach.

結合官方的說法來總結下,信号量模式與線程池模式之間的最主要差別在于

1. 線程池模式可以對某個HystrixyKey設定單獨的逾時時間

2. 線程池模式可以通過抛出InterruptedException立刻結束該請求

3. 信号量模式由于少了線程的切換,性能更好

請求緩存(Request Caching)

這個功能和mybatis的一、二級緩存很像,都是将請求結果緩存在本地記憶體。不同的是mybatis是請求資料庫後将熱點資料緩存,而hystrix是請求應用伺服器後将請求結果緩存。

在分布式系統中,這個功能要慎用。接口消費者為了避免大量請求而緩存請求結果,極有可能造成過期髒資料。個人建議在生産環境不要使用該功能,如果要減少接口提供者的壓力,可以使用分布式緩存代替hystrix的請求緩存。

how it words

繼續閱讀