hystrix的資源隔離策略分為兩種:執行緒池和訊號量。說到資源隔離,我們就要明白為什麼需要資源隔離。
在乙個分布式系統中,服務之間都是相互呼叫的,如下圖所示:
例如,我們容器(tomcat)配置的執行緒個數為1000,從服務a到服務r,其中服務i的併發量非常的大,需要500個執行緒來執行,此時,服務i又掛了,那麼這500個執行緒很可能就夯死了,那麼剩下的服務,總共可用的執行緒為500個,隨著併發量的增大,剩餘服務掛掉的風險就會越來越大,最後導致整個系統的所有服務都不可用,直到系統宕機。這就是服務的雪崩效應。hystrix就是用來做資源隔離的,比如說,當客戶端向服務端傳送請求時,給服務i分配了10個執行緒,只要超過了這個併發量就走降級服務,就算服務i掛了,最多也就導致服務i不可用,容器的10個執行緒不可用了,但是不會影響系統中的其他服務。下面,我們就來具體說下這兩種隔離策略:
1、執行緒池
執行緒池隔離的示意圖如下:
上圖的左邊2/3是執行緒池資源隔離示意圖,右邊的1/3是訊號量資源隔離示意圖,我們先來看左邊的示意圖。
2、訊號量
訊號量的資源隔離只是起到乙個開關的作用,例如,服務x的訊號量大小為10,那麼同時只允許10個tomcat的執行緒(此處是tomcat的執行緒,而不是服務x的獨立執行緒池裡面的執行緒)來訪問服務x,其他的請求就會被拒絕,從而達到限流保護的作用。
3、二者的比較
4、總結
當請求的服務網路開銷比較大的時候,或者是請求比較耗時的時候,我們最好是使用執行緒隔離策略,這樣的話,可以保證大量的容器(tomcat)執行緒可用,不會由於服務原因,一直處於阻塞或等待狀態,快速失敗返回。而當我們請求快取這些服務的時候,我們可以使用訊號量隔離策略,因為這類服務的返回通常會非常的快,不會占用容器執行緒太長時間,而且也減少了執行緒切換的一些開銷,提高了快取服務的效率。
Hystrix艙壁模式(執行緒池隔離策略)
如果不進 任何設定,所有熔斷 法使 個hystrix執行緒池 10個執行緒 那麼這樣的話會導致問題,這個問題並不是扇出鏈路微服務不可 導致的,是我們的執行緒機制導致的,如果 法a的請求把10個執行緒都 了,法2請求處理的時候壓根都沒法去訪問b,因為沒有執行緒可 並不是b服務不可 為了避免問題服務請求...
hystrix服務隔離
目錄 一 隔離方法 二 執行緒隔離 三 訊號量隔離 原理 使用乙個執行緒池來儲存當前請求,執行緒池中線程對當前請求進行處理,可以設定任務的超時時間,對於 堆積的請求可以入執行緒池佇列。優點 採用執行緒池佇列,因此可以解決流量洪峰的問題,起到了削鋒的功能。並且可以非同步呼叫,可以設定線 程池的大小,控...
Hystrix學習(3)隔離
乙個形象的解釋是 對系統請求按型別劃分成若干個的小島,當某個小島被火少光了,不會影響到其他的小島。hystrix依賴的隔離架構,如下圖 hystrix在使用者請求和服務之間加入了執行緒池。hystrix為每個依賴呼叫分配乙個小的執行緒池,如果執行緒池已滿呼叫將被立即拒絕,預設不採用排隊.加速失敗判定...