Hystrix是什么
Hystrix 能使你的系統在出現依賴服務失效的時候,通過隔離系統所依賴的服務,防止服務級聯失敗,同時提供失敗回退機制,更優雅地應對失效,並使你的系統能更快地從異常中恢復。
Hystrix能做什么?
- 在通過第三方客戶端訪問(通常是通過網絡)依賴服務出現高延遲或者失敗時,為系統提供保護和控制
- 在分布式系統中防止級聯失敗
- 快速失敗(Fail fast)同時能快速恢復
- 提供失敗回退(Fallback)和優雅的服務降級機制
- 提供近實時的監控、報警和運維控制手段
Hystrix設計原則?
- 防止單個依賴耗盡容器(例如 Tomcat)內所有用戶線程
- 降低系統負載,對無法及時處理的請求快速失敗(fail fast)而不是排隊
- 提供失敗回退,以在必要時讓失效對用戶透明化
- 使用隔離機制(例如『艙壁』/『泳道』模式,熔斷器模式等)降低依賴服務對整個系統的影響
- 針對系統服務的度量、監控和報警,提供優化以滿足近實時性的要求
- 在 Hystrix 絕大部分需要動態調整配置並快速部署到所有應用方面,提供優化以滿足快速恢復的要求
- 能保護應用不受依賴服務的整個執行過程中失敗的影響,而不僅僅是網絡請求
Hystrix實現原理-艙壁模式
-
貨船為了進行防止漏水和火災的擴散,會將貨倉分隔為多個,當發生災害時,將所在貨倉進行隔離就可以降低整艘船的風險。
Hystrix dashboard 測試
今天根據他人博客上介紹的Spring Cloud,自己嘗試敲了下代碼。但走到Hystrix實現熔斷機制以及監控熔斷信息的時候遇到一個問題:Hystrix 自帶了一個dashboard,獲取監控的時候界面一直是Loading...沒有任何反應,如圖:
代碼請參考https://blog.csdn.net/column/details/15197.html
點擊Monitor Stream之后就跳到下面的界面
IDEA編輯工具的控制台打印
瀏覽器F12 沒有任何報錯的信息
如果直接訪問http://localhost:8764/hystrix.stream 則界面一直會打印ping,但沒有結果返回:
無意中的測試,發現這個Loading...是一直在等待負載均衡的提供方要去消費服務,即訪問負載均衡服務器,去調用客戶端,如果有數據響應則監控界面就會有圖形數據展示:
如果想讓圖中的數據發生變化,則需要循環多次的去訪問負載均衡的提供方,讓其消費服務,以至於達到監控的目的。
此時再次訪問http://localhost:8764/hystrix.stream,則會有以下數據一直在瀏覽器中打印:
注:Hystrix DashBoard監控的服務都是要求有帶上熔斷端點的,即帶上@HystrixCommand注解的方法,調用沒有熔斷端點的方法沒法得到監控。
最后,附上一張圖形概要以供參考: