首頁 > 科技

Spring Cloud系列:就這一篇輕鬆帶你掌握Hystrix原理

2021-06-21 17:42:38

Hystrix是什麼?

Hystrix是一個用於處理分散式系統的延遲和容錯的開源庫,Hystrix能夠保證在一個依賴出問題的情況下,不會導致整體服務失敗,避免級聯故障,以提高分散式系統的彈性。

簡單說,在日益龐大的微服務系統中,Hystrix的作用就是來避免當某個服務發生故障時,形成發散型的影響,導致越來越多的服務故障。

Hystrix有什麼?

資源隔離

包括執行緒池隔離和訊號量隔離,限制呼叫分散式服務的資源使用,某一個呼叫的服務出現問題不會影響其他服務呼叫。

Hystrix隔離模式--訊號量模式

當 n 個併發請求去呼叫一個目標服務介面時,都要獲取一個訊號量才能真正去呼叫目標服務介面,但訊號量有限,預設是 10 個(通過maxConcurrentRequests參數配置),如果併發請求數多於訊號量個數,就有執行緒需要進入佇列排隊,但排隊佇列也有上限,預設是 5,如果排隊佇列也滿,則必定有請求執行緒會走 fallback 流程,從而達到限流和防止雪崩的目的。

Hystrix隔離模式--執行緒池模式

當 n 個請求執行緒併發對某個介面請求呼叫時,會先從 hystrix 管理的執行緒池裡面獲得一個執行緒,然後將參數傳遞給這個執行緒去執行真正呼叫。執行緒池的大小有限,預設是 10 個執行緒(maxConcurrentRequests參數配置),如果併發請求數多於執行緒池執行緒個數,就有執行緒需要進入佇列排隊,但排隊佇列也有上限,預設是 5,如果排隊佇列也滿,則必定有請求執行緒會走 fallback 流程。

執行緒池模式可以支援非同步呼叫,支援超時呼叫,支援直接熔斷,存線上程切換,開銷大。

兩種模式的對比

通過二者的對比,我們可以發現訊號量模式比較適用於一些業務邏輯比較複雜的訪問,而執行緒池的適用性比較普遍,特別是對外的服務訪問

降級機制

什麼是降級?

當伺服器壓力劇增的情況下,根據當前業務情況及流量對一些服務和頁面有策略的降級,以此釋放伺服器資源以保證核心任務的正常運行。

降級機制有哪些?

超時降級、資源不足時(執行緒或訊號量)降級,降級後可以配合降級介面返回託底資料。

服務融斷

服務熔斷是什麼?

一般是指軟體系統中,由於某些原因使得服務出現了過載現象,為防止造成整個系統故障,從而採用的一種保護措施,所以很多地方把熔斷亦稱為過載保護。

為什麼需要服務熔斷?

很多時候剛開始可能只是系統出現了局部的、小規模的故障,然而由於種種原因,故障影響的範圍越來越大,最終導致了全局性的後果。 適用場景:防止應用程式直接呼叫那些很可能會呼叫失敗的遠端服務或共享資源

快取

快取在高併發的環境下使用,能夠有效地減少伺服器的壓力, 使用Hystrix返回結果快取,後續請求可以直接呼叫快取資料。

快取的使用

開啟請求快取:在實現HystrixCommand或HystrixObservableCommand時,通過過載getCacheKey()方法來開啟請求快取

清理失效快取功能:Hystrix中,可以通過HystrixRequestCache.clear()方法來進行快取的清理,適用於對快取資料進行更新的場景。


IT145.com E-mail:sddin#qq.com