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

结果返回后,执行减一,观察以下:配置

相关文章
相关标签/搜索