一、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是運行在調用線程中,但是通過信號量的容量來進行限流。
————————————————
版權聲明:本文為CSDN博主「Anbang713」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/Anbang713/article/details/85591774