1. 程式人生 > 其它 >Hystrix-基本概念(設計原則和兩種隔離技術)

Hystrix-基本概念(設計原則和兩種隔離技術)

一、Hystrix是什麼
在微服務的架構系統中,每個服務都可能會呼叫很多其他服務,被呼叫的那些服務就是依賴服務。有的時候某些依賴服務出現故障也是很正常的。Hystrix可以讓我們在對服務間的呼叫進行控制,加入一些呼叫延遲或者依賴故障的容錯機制。Hystrix通過將依賴服務進行資源隔離,進而組織某個依賴服務出現故障的時候,這種故障在整個系統所有的依賴服務呼叫中進行蔓延,同時Hystrix還提供故障時的fallback降級機制。總而言之,Hystrix通過這些方法幫助我們提升系統的可用性和穩定性。

二、Hystrix為了實現高可用性的架構,設計hystrix的時候,一些設計原則是什麼
(1)對依賴服務呼叫時出現的呼叫延遲和呼叫失敗進行控制和容錯保護。
(2)阻止某一個依賴服務的故障在整個系統中蔓延,服務A->服務B->服務C,服務C故障了,服務B也故障了,服務A故障了,整個系統全部故障,整體宕機。
(3)提供fail-fast(快速失敗)和快速恢復的支援。
(4)提供fallback優雅降級的支援。
(5)支援近實時的監控、報警以及運維操作。

三、Hystrix是如何實現它的目標的
(1)通過HystrixCommand或者HystrixObservableCommand來封裝對外部依賴的訪問請求,這個訪問請求一般會執行在獨立的執行緒中,資源隔離。
(2)對於超出我們設定閾值的服務呼叫,直接進行超時,不允許其耗費過長時間阻塞住。
(3)為每一個依賴服務維護一個獨立的執行緒池或者是semaphore(訊號量),當執行緒池已滿時,直接拒絕對這個服務的呼叫。
(4)對依賴服務的呼叫的成功次數,失敗次數,拒絕次數,超時次數,進行統計。
(5)如果對一個依賴服務的呼叫失敗次數超過了一定的閾值,自動進行熔斷,在一定時間內對該服務的呼叫直接降級,一段時間後再自動嘗試恢復。
(6)當一個服務調用出現失敗、被拒絕、超時、短路等異常情況時,自動呼叫fallback降級機制。
(7)對屬性和配置的修改提供近實時的支援。

四、Hystrix兩種隔離技術
Hystrix裡核心的一項功能就是所謂的資源隔離,要解決的最最核心的問題,就是將多個依賴服務的呼叫分別隔離到各自自己的資源池內。避免說對某一個依賴服務的呼叫,因為依賴服務的介面呼叫的延遲或者失敗,導致服務所有的執行緒資源全部耗費在這個服務的介面呼叫上。一旦說某個服務的執行緒資源全部耗盡的話,可能就導致服務就會崩潰,甚至說這種故障會不斷蔓延。資源隔離的兩種技術:執行緒池的資源隔離、訊號量的資源隔離。

五、執行緒池隔離技術和訊號量隔離技術,分別在什麼樣的場景下去使用
執行緒池:適合絕大多數的場景,執行緒池資源隔離一般用於對依賴服務的網路請求的呼叫和訪問,timeout這種問題。每個command執行在一個執行緒中,限流是通過執行緒池的大小進行控制的。
訊號量:適合對內部的一些比較複雜的業務邏輯的訪問,但是像這種訪問,系統內部的程式碼其實不涉及任何的網路請求,那麼只要做訊號量的普通限流就可以了,因為不需要去捕獲timeout類似的問題,演算法+資料結構的效率不是太高,併發量突然太高,因為這裡稍微耗時一些,導致很多執行緒卡在這裡的話,不太好,所以進行一個基本的資源隔離和訪問,避免內部複雜的低效率的程式碼,導致大量的執行緒被hang住。command是執行在呼叫執行緒中,但是通過訊號量的容量來進行限流。