這週在看專案的相關**時,接觸到了hystrix,因此查詢了相關資料學習了下。
一、什麼是hystrix
hystrix是netflix針對微服務分布式系統的熔斷保護中介軟體,當我們的客戶端連線遠端的微服務時,有兩種情況需要考慮:首先,如果遠端系統當機了我們怎麼辦?
其次,我們如何管理對遠端微服務的呼叫效能,以保證每個微服務以最小延遲最快效能響應?
hystrix是乙個有關延遲和失敗容錯的開源庫包,用來設計隔離訪問遠端系統端點或微服務等,防止級聯**式的失敗,也就是由乙個小問題引起接二連三擴大的
瘋狂的錯誤**直至整個系統癱瘓,能夠讓複雜的分布式系統更加靈活具有彈性。
例如,在乙個大中型系統中,通常系統很多依賴(http,hession,netty,dubbo等),如下圖:
在高併發訪問下,這些依賴的穩定性與否對系統的影響非常大,但是依賴有很多不可控問題:如網路連線緩慢,資源繁忙,暫時不可用,服務離線等.如下圖:qps
為50的依賴 i出現不可用,但是其他依賴仍然可用.
當依賴i 阻塞時,大多數伺服器的執行緒池就出現阻塞(block),影響整個線上服務的穩定性.如下圖:
在複雜的分布式架構的應用程式有很多的依賴,都會不可避免地在某些時候失敗。高併發的依賴失敗時如果沒有隔離措施,當前應用服務就有被拖垮的風險。
例如:乙個依賴30個soa服務的系統,每個服務99.99%可用。 99.99%的30次方 ≈ 99.7% 。0.3% 意味著一億次請求 會有 3,000,00次失敗 。換算成時間大約每月
有2個小時服務不穩定。隨著服務依賴數量的變多,服務不穩定的概率會成指數性提高。
解決問題方案:對依賴做隔離,hystrix就是處理依賴隔離的框架,同時也是可以幫我們做依賴服務的治理和監控。
二、如何使用hystrix
hystrix github上有乙個全面的文件介紹如何使用hystrix。這很簡單,只要使用hystrix庫建立類並呼叫服務。首先需要在m**en專案中引入如下依賴:
1.3.16
1.1.2
com.netflix.hystrix
hystrix-core
$com.netflix.hystrix
hystrix-metrics-event-stream$
nexus
local private nexus
true
false
然後使用命令模式封裝依賴邏輯,具體j**a**如下:
public class commandhelloworld extends hystrixcommand
@override
protected string run()
}同時,我們還可以通過使用fallback() 提供降級策略,例如:
public class helloworldcommand extends hystrixcommand
@override
protected string getfallback()
@override
protected string run() throws exception
public static void main(string args) throws exception
}/* 執行結果:getfallback() 呼叫執行
getfallback executed
*/reference:
Hystrix原理和使用
構造乙個 hystrixcommand或hystrixobservablecommand物件,用於封裝請求,並在構造方法配置請求被執行需要的引數 執行命令,hystrix提供了4種執行命令的方法,後面詳述 判斷是否使用快取響應請求,若啟用了快取,且快取可用,直接使用快取響應請求。hystrix支援請...
C FileStream簡單介紹和使用
本章講述 filestream類的基本功能,以及簡單示例 1 引用命名空間 using system.io 2 注意 使用io操作檔案時,要注意流關閉和釋放問題!強力推薦 將建立檔案流物件的過程寫在using當中,會自動幫助我們釋放資源 使用try catch exception ex 進行一次捕獲...
ReentrantLock介紹和簡單使用
reentrantlock和synchronized比較 1 reentrantlock和synchronized都是獨佔鎖,前者需要主動的加鎖和釋放鎖,後者加鎖解鎖的過程會自動進行。2 reentrantlock和synchronized都是可重入的,前者加鎖和釋放鎖的次數必須一致,否則會一直進入...