在分佈式環境下,不免出現許多服務之間調用失敗的場景, Hystrix是一個經過添加延遲容忍和容錯邏輯幫助您控制這些分佈式服務之間交互的庫。 Hystrix經過隔離服務之間的訪問點來實現應用之間連鎖故障(因下游服務失敗,致使上游服務不可用),出現故障提供備選方案來提升應用總體的可用性。後端
舉例:搶購活動中,因爲庫存服務超時或者崩掉,能夠經過提示搶購失敗,請稍後重試等預防搶購應用不可用tomcat
Hystrix能夠作一些事情:服務器
複雜的分佈式應用有許多依賴調用,在某一時刻它們之間必然會出現失敗,這就是致使應用總體故障的風險。網絡
例如,對於一個依賴於30個服務的應用程序,每一個服務的正常運行時間爲99.99%,下面是您能夠預期的結果。架構
99.99 的30次方= 99.7% (意味着有0.3%的失敗)運維
10億*0.3% = 300萬(10億次請求會有300萬次請求失敗)分佈式
即便每月在很好的正常運行的時間,也會有2個小時的停機。一般狀況會被這個更糟糕。性能
當全部請求都很正常的狀況下,請求流就會像下圖同樣:優化
當不少後端系統有一個不穩定時,就會阻塞整個請求,以下圖:spa
在大量請求下,一個後端不理想的依賴都會成爲阻塞整個應用請求的潛在風險
應用中任何一個經過網絡或者客戶端發出的請求都有可能成爲網絡請求失敗的潛在風險,比請求失敗更糟糕的是,應用調用依賴之間的延遲增長,更甚應用中的隊列、線程池、其餘系統資源形成的連鎖故障
當經過第三方客戶端進行網絡訪問,就是一個不清楚實現細節以及隨時可能發生改變的黑盒執行,對於每一個客戶端,網絡和資源配置都是不同的,因此很難監控和更改。
更糟糕的是,依賴調用之間,在不被應用顯示調用的狀況下,執行昂貴和容易出錯的網絡調用
網絡鏈接失敗或者降級、服務與服務之間調用失敗或者延遲,新庫或服務部署改變方式或者性能特性
全部這些失敗和延遲的狀況都須要被隔離或者管理,這樣就不會由於單個依賴的失敗摧毀整個應用和系統。
當您使用Hystrix來包裝每一個基礎依賴項時,圖中所示的架構會發生變化,以下圖所示。每一個依賴項都是相互隔離的,當延遲發生時,它可能會被限制在資源中,而且在熔斷器中覆蓋,當任何類型的故障發生在依賴項中時,它決定了要作出什麼響應