執行緒隔離和信號量隔離
Hystrix 里面核心的一項功能,其實就是所謂的資源隔離,要解決的最最核心的問題,就是將多個依賴服務的呼叫分別隔離到各自的資源池內,避免說對某一個依賴服務的呼叫,因為依賴服務的介面呼叫的延遲或者失敗,導致服務所有的執行緒資源全部耗費在這個服務的介面呼叫上,一旦說某個服務的執行緒資源全部耗盡的話,就可能導致服務崩潰,甚至說這種故障會不斷蔓延,
資源隔離主要分為如下兩種方式
- 執行緒池
- 信號量
信號量機制
信號量的資源隔離只是起到一個開關的作用,比如,服務 A 的信號量大小為 10,那么就是說它同時只允許有 10 個 tomcat執行緒來訪問服務 A,其它的請求都會被拒絕,從而達到資源隔離和限流保護的作用,
執行緒池機制
執行緒池隔離技術,并不是說去控制類似 tomcat 這種 web 容器的執行緒,更加嚴格的意義上來說,Hystrix 的執行緒池隔離技術,控制的是 tomcat 執行緒的執行,Hystrix 執行緒池滿后,會確保說,tomcat 的執行緒不會因為依賴服務的介面呼叫延遲或故障而被 hang 住,tomcat 其它的執行緒不會卡死,可以快速回傳,然后支撐其它的事情,
信號量機制與執行緒池機制的區別
執行緒池隔離技術,是用 Hystrix 自己的執行緒去執行呼叫;而信號量隔離技術,是直接讓 tomcat 執行緒去呼叫依賴服務,信號量隔離,只是一道關卡,信號量有多少,就允許多少個 tomcat 執行緒通過它,然后去執行,
適用場景
- 執行緒池技術,適合絕大多數場景,比如說我們對依賴服務的網路請求的呼叫和訪問、需要對呼叫的 timeout 進行控制(捕捉 timeout 超時例外),
適用于請求并發量大,并且耗時長(一般是計算量大或者讀資料庫):采用執行緒池隔離,這樣的話,可以保證大量的容器執行緒可用,不會由于服務原因,一直處于阻塞或者等待狀態,快速失敗回傳, - 信號量技術,適合說你的訪問不是對外部依賴的訪問,而是對內部的一些比較復雜的業務邏輯的訪問,并且系統內部的代碼,其實不涉及任何的網路請求,那么只要做信號量的普通限流就可以了,因為不需要去捕獲 timeout 類似的問題,適用于請求并發量大,并且耗時短(一般是計算量小,或讀快取):采用信號量隔離:因為這類服務的回傳往往非常快,不會占用容器執行緒太長時間,并且減少了執行緒切換的一些開銷,提高了快取服務的效率,
Hystrix請求命令 HystrixCommand、HystrixObservableCommand
- HystrixCommand用在依賴服務回傳單個操作結果的時候,又兩種執行方式
-execute():同步執行,從依賴的服務回傳一個單一的結果物件,或是在發生錯誤的時候拋出例外,
-queue();異步執行,直接回傳一個Future物件,其中包含了服務執行結束時要回傳的單一結果物件,
- HystrixObservableCommand 用在依賴服務回傳多個操作結果的時候,它也實作了兩種執行方式
-observe():回傳Obervable物件,他代表了操作的多個結果,他是一個HotObservable
-toObservable():同樣回傳Observable物件,也代表了操作多個結果,但它回傳的是一個Cold Observable,
Soul中配置失敗降級URL
soul中Hystrix的CallBackUri()需要寫在soul-boostrap專案中,因為集成網關之后,http請求的本體專案是沒有集成Hystrix的,所以網關只能進入自己的uri中,當然我們如果需要獲取本體專案的一些資訊或者資料,那么我們可以在boostrap中通過某種方式向本體服務拿到資料或請求再回傳,
可以類比的是,其他的限流插件可能CallBackUri()都必須寫在soul-boostrap中了
疑問
HystrixObservableCommand,HystrixCommand與隔離機制之間的對應關系的具體原因?
參考博客https://www.imooc.com/article/296565 , https://www.cnblogs.com/pretttyboy/p/13519823.html ,https://cloud.tencent.com/developer/article/1600695 ,https://www.cnblogs.com/happyflyingpig/p/8079308.html
歡迎搜索關注本人與朋友共同開發的微信面經小程式【大廠面試助手】和公眾號【微瞰技術】,以及總結的分類面試題https://github.com/zhendiao/JavaInterview


轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/255465.html
標籤:Java
下一篇:單例模式
