Dubbo 負載均衡(一)

LeastActiveLoadBalance:併發

  • 最少活躍調用數,相同活躍數的隨機,活躍數指調用先後計數差
  • 使慢的提供者收到更少請求,由於越慢的提供者的調用先後計數差會越大。

樣例 3
摘抄dubbo手冊上的配置
<dubbo:service interface="com.foo.BarService" actives="10" />高併發

<dubbo:reference interface="com.foo.BarService" actives="10" />
此時啓用了ActiveLimitFilter,另外也能夠直接配置filter,啓用了ActiveLimitFilter。url

<dubbo:reference id="demoService"  check="false" interface="com.alibaba.dubbo.demo.DemoService" filter="activelimit"/>

處理邏輯是先判斷actives的計數,code

 

ActiveLimitFilter是客戶端過濾器,使用LeastActiveLoadBalance,同時啓用ActiveLimitFilter,才能爲調用計數,看源碼就是調用前加1,調用結果返回後減1,使用高併發自增類AtomicInteger源碼

@Activate(group = Constants.CONSUMER, value =  Constants.ACTIVES_KEY)it

long begin = System.currentTimeMillis();
            RpcStatus.beginCount(url, methodName);
            try {
                Result result = invoker.invoke(invocation);
                RpcStatus.endCount(url, methodName, System.currentTimeMillis() - begin, true);
                return result;
            } catch (RuntimeException t) {
                RpcStatus.endCount(url, methodName, System.currentTimeMillis() - begin, false);
                throw t;
            }

執行beginCount 後,原子計數加1io

結果返回ast

結果返回後,執行減一,觀察以下:配置

相關文章
相關標籤/搜索