Hystrix資源隔離


線程池隔離

  一個服務有多個接口,在提供服務時,使用了線程池,多個接口共用這一個線程池,如下圖所示:

   

  那么當某個接口處理效率緩慢,當對該接口的請求量上升時,由於該接口處理效率慢,對於該接口的請求就會占用公用的連接池,並且如果長時間沒有釋放連接,就會造成其他接口沒有線程池來處理請求,於是就會出現因為一個接口的問題,導致整個服務的多個接口都不可用。

  為了解決這種問題,Hystrix提供了線程池隔離,可以為每個接口設置單獨的線程池,當該接口的線程池被占滿時,只是該接口收到影響,而不會對其他接口造成影響,如下圖所示:

   

  另外,可以讓一部分service共用線程池的同時,另一部分service做線程池隔離,如下圖:

   

 

信號量隔離

  信號量隔離的方式,和線程池隔離的方式相似,如下圖所示:

  

  信號量隔離的原理:會設置一個信號量值(計數器),當一個接收到一個請求后,信號量減1;當請求處理完后,信號量加1;當信號量減為0的時候,表示不能再接受請求,則會拒絕處理。

 

線程隔離與信號量隔離的區別

線程池隔離

  優點:

    1.可以設置coreSize和MaxQueueSize,也就是說,支持排隊;

    2.可以設置調用超時時間;

    3.支持異步調用;

  缺點:

    1.創建線程池會產生額外的開銷,且開銷比信號量大;

  適用場景:

    1.調用其他服務(不受信的服務,不能保證其他服務的服務質量);

    2.適合調用的服務比較少的情況(扇出少),如果比較多,則線程池也要加大;

信號量隔離

  優點:

    1.輕量,開銷可以忽略不計;

  缺點:

    1.不支持任務排隊,只要信號量減為0,立即就會被拒絕;

    2.不支持設置超時,在執行過程中,只能等待調用拿到結果或者拋出異常,操作才會繼續;

    3.不支持異步調用;

  適用場景:

    1.網關(扇出多);

    2.受信服務(被調用服務能夠保證不超時);

    3.高頻高速調用(比如查cache這種操作,基本能保證在很多時間內響應)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM