hystrix简介
Hystrix
簡介
Hystrix,英文意思是豪豬,全身是刺,看起來就不好惹,是一種保護機制。
Hystrix也是Netflix公司的一款組件。
主頁:https://github.com/Netflix/Hystrix/
那么Hystix的作用是什么呢?具體要保護什么呢?
Hystix是Netflix開源的一個延遲和容錯庫,用于隔離訪問遠程服務、第三方庫,防止出現級聯失敗。
雪崩問題
微服務中,服務間調用關系錯綜復雜,一個請求,可能需要調用多個微服務接口才能實現,會形成非常復雜的調用鏈路:
如圖,一次業務請求,需要調用A、P、H、I四個服務,這四個服務又可能調用其它服務。
如果此時,某個服務出現異常:
例如微服務I發生異常,請求阻塞,用戶不會得到響應,則tomcat的這個線程不會釋放,于是越來越多的用戶請求到來,越來越多的線程會阻塞:
服務器支持的線程和并發數有限,請求一直阻塞,會導致服務器資源耗盡,從而導致所有其它服務都不可用,形成雪崩效應。
這就好比,一個汽車生產線,生產不同的汽車,需要使用不同的零件,如果某個零件因為種種原因無法使用,那么就會造成整臺車無法裝配,陷入等待零件的狀態,直到零件到位,才能繼續組裝。? 此時如果有很多個車型都需要這個零件,那么整個工廠都將陷入等待的狀態,導致所有生產都陷入癱瘓。一個零件的波及范圍不斷擴大。
?
Hystix解決雪崩問題的手段有兩個:
-
線程隔離
-
服務熔斷
線程隔離,服務降級
原理
線程隔離示意圖:
解讀:
Hystrix為每個依賴服務調用分配一個小的線程池,如果線程池已滿調用將被立即拒絕,默認不采用排隊.加速失敗判定時間。
用戶的請求將不再直接訪問服務,而是通過線程池中的空閑線程來訪問服務,如果線程池已滿,或者請求超時,則會進行降級處理,什么是服務降級?
服務降級:優先保證核心服務,而非核心服務不可用或弱可用。
用戶的請求故障時,不會被阻塞,更不會無休止的等待或者看到系統崩潰,至少可以看到一個執行結果(例如返回友好的提示信息) 。
服務降級雖然會導致請求失敗,但是不會導致阻塞,而且最多會影響這個依賴服務對應的線程池中的資源,對其它服務沒有響應。
觸發Hystix服務降級的情況:
-
線程池已滿
-
請求超時
?
總結
- 上一篇: eureka详解
- 下一篇: IDEA 项目结构旁边出现 0%clas