Hystrix 裏面核心的一項功能,其實就是所謂的資源隔離,要解決的最最核心的問題,就是將多個依賴服務的調用分別隔離到各自的資源池內。避免說對某一個依賴服務的調用,由於依賴服務的接口調用的延遲或者失敗,致使服務全部的線程資源所有耗費在這個服務的接口調用上。一旦說某個服務的線程資源所有耗盡的話,就可能致使服務崩潰,甚至說這種故障會不斷蔓延。
資源隔離主要分爲以下兩種方式html
信號量的資源隔離只是起到一個開關的做用,好比,服務 A 的信號量大小爲 10,那麼就是說它同時只容許有 10 個 tomcat線程來訪問服務 A,其它的請求都會被拒絕,從而達到資源隔離和限流保護的做用。git
線程池隔離技術,並非說去控制相似 tomcat 這種 web 容器的線程。更加嚴格的意義上來講,Hystrix 的線程池隔離技術,控制的是 tomcat 線程的執行。Hystrix 線程池滿後,會確保說,tomcat 的線程不會由於依賴服務的接口調用延遲或故障而被 hang 住,tomcat 其它的線程不會卡死,能夠快速返回,而後支撐其它的事情。github
線程池隔離技術,是用 Hystrix 本身的線程去執行調用;而信號量隔離技術,是直接讓 tomcat 線程去調用依賴服務。信號量隔離,只是一道關卡,信號量有多少,就容許多少個 tomcat 線程經過它,而後去執行。web
-execute():同步執行。從依賴的服務返回一個單一的結果對象,或是在發生錯誤的時候拋出異常。面試
-queue();異步執行。直接返回一個Future對象,其中包含了服務執行結束時要返回的單一結果對象。數據庫
-observe():返回Obervable對象,他表明了操做的多個結果,他是一個HotObservable小程序
-toObservable():一樣返回Observable對象,也表明了操做多個結果,但它返回的是一個Cold Observable。緩存
soul中Hystrix的CallBackUri()須要寫在soul-boostrap項目中,由於集成網關以後,http請求的本體項目是沒有集成Hystrix的,因此網關只能進入本身的uri中,固然咱們若是須要獲取本體項目的一些信息或者數據,那麼咱們能夠在boostrap中經過某種方式向本體服務拿到數據或請求再返回。
能夠類比的是,其餘的限流插件可能CallBackUri()都必須寫在soul-boostrap中了tomcat
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