1. 程式人生 > >Hystrix實現服務隔離

Hystrix實現服務隔離

當大多數人在使用Tomcat時,多個HTTP服務會共享一個執行緒池,假設其中一個HTTP服務訪問的資料庫響應非常慢,這將造成服務響應時間延遲增加,大多數執行緒阻塞等待資料響應返回,導致整個Tomcat執行緒池都被該服務佔用,甚至拖垮整個Tomcat。因此,如果我們能把不同HTTP服務隔離到不同的執行緒池,則某個HTTP服務的執行緒池滿了也不會對其他服務造成災難性故障。這就需要執行緒隔離或者訊號量隔離來實現了。

使用執行緒隔離或訊號隔離的目的是為不同的服務分配一定的資源,當自己的資源用完,直接返回失敗而不是佔用別人的資源。

 

Hystrix實現服務隔離兩種方案

Hystrix的資源隔離策略有兩種,分別為:執行緒池和訊號量。

 

執行緒池方式

1、 使用執行緒池隔離可以完全隔離第三方應用,請求執行緒可以快速放回。 2、 請求執行緒可以繼續接受新的請求,如果出現問題執行緒池隔離是獨立的不會影響其他應用。 
3、 當失敗的應用再次變得可用時,執行緒池將清理並可立即恢復,而不需要一個長時間的恢復。 
4、 獨立的執行緒池提高了併發性

缺點: 
執行緒池隔離的主要缺點是它們增加計算開銷(CPU)。每個命令的執行涉及到排隊、排程和上 下文切換都是在一個單獨的執行緒上執行的。

 

每個服務介面都有自己獨立的執行緒池,管理運行當前自己的介面。但是cpu開銷比較大

 

在同一個執行緒池中,素有請求全部到一個服務進行訪問,這時候會導致其他服服務沒有執行緒接收請求訪問,所以就會產生服務雪崩效應