本文主要介紹Hystrix的基本功能,原理。Hystrix協調分佈式系統中各個服務高可用的框架,SpringCloud體系重要的一員。Hystrix主要解決了服務雪崩問題、服務監控問題等。web
Hystrix將對外部服務的調用和一系列處理封裝爲一個Commond對象,具體分爲HystrixCommand(直接調用命令),HystrixObservableCommand(觀察者訂閱命令),後者能夠註冊回調事件。二者均可以以異步或同步的方式調用(異步返回Future,後續能夠調用get阻塞獲取結果)。緩存
Commond對象對資源隔離進行隔離有兩種方式,一種是使用線程池(經常使用),第二種是使用信號量。二者都是對Commond被調用的線程併發數量進行限制,區別在於信號量只是對command被調用併發許可的一個線程,不能記錄超時信息等等。架構
在一個web調用主線程中,爲該主線程調用服務的command創建緩存,使得調用依賴服務相同參數的狀況下直接從內存中獲取結果,因爲本人認爲其做用不是很大,因此就很少介紹了,主要是在攔截器中初始化HytrixRequestContext(這個緩存數據目測應該是在線程本地變量裏面),而後Command中實現getCacheKey方法返回cache的key,當key同樣時,直接嘗試獲取以前調用後返回相同key的結果。併發
經過Command實現getFallBack方法(HystrixCommand)或resumeWithFallback方法(HystrixObservableCommand),實現降級邏輯,本地返回降級以後的結果。框架
必定時間以後會切換到半開狀態,讓1個請求經過,看是否可以正常返回異步
若是半開狀態容許經過的請求成功了,就關閉斷路器分佈式
在實踐中,一般用了hystrix,通常的架構體系都是SpringCloud那一套,由於feign組件封裝了hystrix能夠實現熔斷、服務隔離。本文是在學習原生Hystrix所總結的,涉及到的使用和配置方法可能會與當前實踐相偏離,可是看官着重hystrix的功能原理就好,具體應用時能夠再查閱相關資料。學習