Dubbo服務限流


為了防止某個消費者的QPS或是所有消費者的QPS總和突然飆升而導致的重要服務的失效,系統可以對訪問流量進行控制,這種對集群的保護措施稱為服務限流。
Dubbo中能夠實現服務限流的方式較多,可以划分為兩類:直接限流間接限流

  • 直接限流:通過對連接數量直接進行限制來達到限流的目的。(官方方案匯總)
  • 間接限流:通過一些非連接數量設置來達到限制流量的目的。(我的偶像總結-Reythor雷)

一、executes直接限流– 僅提供者端

該屬性僅能設置在提供者端。可以設置為接口級別,也可以設置為方法級別。限制的是服務(方法)並發執行數量。

 

類級別,服務器端並發執行(或占用線程池線程數)不能超過 10 個

<dubbo:service interface="com.foo.BarService" executes="10" />
  
  
 
 
         

方法級別,服務器端並發執行(或占用線程池線程數)不能超過 10 個


   
   
  
  
          
  1. <dubbo:service interface="com.foo.BarService">
  2. <dubbo:method name="sayHello" executes="10" />
  3. </dubbo:service>

二、accepts限流 – 僅提供者端

該屬性僅可設置在提供者端的<dubbo:provider/>與<dubbo:protocol/>。用於對指定協議的連接數量進行限制

三、actives限流 – 兩端

該限流方式與前兩種不同的是,其可以設置在提供者端,也可以設置在消費者端。可以設置為接口級別,也可以設置為方法級別

A、提供者端限流

根據消費者與提供者間建立的連接類型的不同,其意義也不同

  • 長連接:表示當前長連接最多可以處理的請求個數。與長連接的數量沒有關系
  • 短連接:表示當前服務可以同時處理的短連接數量

類級別

<dubbo:service interface="com.foo.BarService" actives="10" />
  
  
 
 
         

方法級別


   
   
  
  
          
  1. <dubbo:reference interface="com.foo.BarService">
  2. <dubbo:method name="sayHello" actives="10" />
  3. </dubbo:service>

B、消費者端限流

根據消費者與提供者間建立的連接類型的不同,其意義也不同:

  • 長連接:表示當前消費者所發出的長連接中最多可以提交的請求個數。與長連接的數量沒有關系。
  • 短連接:表示當前消費者可以提交的短連接數量

類級別

<dubbo:reference interface="com.foo.BarService" actives="10" />
  
  
 
 
         

方法級別


   
   
  
  
          
  1. <dubbo:reference interface="com.foo.BarService">
  2. <dubbo:method name="sayHello" actives="10" />
  3. </dubbo:service>

四、 connections限流

可以設置在提供者端,也可以設置在消費者端。限定連接的個數。對於短連接,該屬性效果與actives相同。但對於長連接,其限制的是長連接的個數。
           一般情況下,會使connectons與actives聯用,讓connections限制長連接個數,讓actives限制一個長連接中可以處理的請求個數。聯用前提:使用默認的Dubbo服務暴露協議

A、提供者端限流

類級別

方法級別

B、消費者端限流

類級別

方法級別

五、間接限流

(1) 延遲連接 – 僅消費者端

僅可設置在消費者端,且不能設置為方法級別。僅作用於Dubbo服務暴露協議。
將長連接的建立推遲到消費者真正調用提供者時。
可以減少長連接的數量


   
   
  
  
          
  1. <!--設置當前消費者對接口中的每個方法發出鏈接采用延遲加載-->
  2. <dubbo:reference id="userService" lazy="true"
  3. interface= "com.dubbo.service.UserService"/>

 


   
   
  
  
          
  1. <!--設置當前消費者對所有接口中的所有方法發出鏈接采用延遲加載-->
  2. <dubbo:consumer lazy="true"> </dubbo:consumer>

六、粘連連接 – 僅消費者

僅能設置在消費者端,其可以設置為接口級別,也可以設置為方法級別。僅作用於Dubbo服務暴露協議

          其會使客戶端盡量向同一個提供者發起調用,除非該提供者掛了,其會連接另一台。只要啟用了粘連連接,其就會自動啟用延遲連接

        其限制的是流向,而非流量

類級別

方法級別

七、負載均衡

可以設置在消費者端,亦可設置在提供者端;可以設置在接口級別,亦可設置在方法級別。其限制的是流向,而非流量

官方介紹

http://dubbo.apache.org/zh-cn/docs/user/demos/concurrency-control.html


免責聲明!

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



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