美文网首页
2.1 - 负载均衡

2.1 - 负载均衡

作者: xhrg | 来源:发表于2018-12-29 09:29 被阅读0次

一:业务代码使用

<dubbo:reference id="hello" loadbalance="roundrobin" interface="com.zhang.HelloService" />

random=com.alibaba.dubbo.rpc.cluster.loadbalance.RandomLoadBalance
roundrobin=com.alibaba.dubbo.rpc.cluster.loadbalance.RoundRobinLoadBalance
leastactive=com.alibaba.dubbo.rpc.cluster.loadbalance.LeastActiveLoadBalance
consistenthash=com.alibaba.dubbo.rpc.cluster.loadbalance.ConsistentHashLoadBalance

这几个类都继承AbstractLoadBalance类,实现LoadBalance接口。
  • RandomLoadBalance 随机,按权重设置随机概率。
  • RoundRobinLoadBalance 轮循,按公约后的权重设置轮循比率。
  • LeastActiveLoadBalance 最少活跃调用数,相同活跃数的随机
  • ConsistentHashLoadBalance 一致性Hash,相同参数的请求总是发到同一提供者,基于虚拟节点。

二:dubbo使用LoadBalance

根据消费者调用流程讲到过在执行过程中会根据LoadBalance引用去select一个invoke。AbstractClusterInvoker|select,
在AbstractClusterInvoker中有这么一段:

    public Result invoke(final Invocation invocation) throws RpcException {
        checkWheatherDestoried();
        LoadBalance loadbalance;
        List<Invoker<T>> invokers = list(invocation);
        if (invokers != null && invokers.size() > 0) {
             // 当服务提供者大于0的时候,根据dubbo提供的扩展方式去寻找负载均衡的实现方式。
             //  在dubbo启动流程讲到过,会把消费者封装成一个URL,这个URL里面就包含了所有信息,包括负载均衡的 loadbalance="roundrobin",然后从ExtensionLoader中获取到实例。
         //大致的spi是这样的,dubbo把所有的接口和实例放在/META-INFO/dubbo/internal下,里面用接口名作为文件名,文件内容是key=类。这里的key就是在xml配置的,默认值是写在dubbo代码里的,key对应的实例类卸载文件中。
            loadbalance = ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension(invokers.get(0).getUrl()
                    .getMethodParameter(invocation.getMethodName(),Constants.LOADBALANCE_KEY, Constants.DEFAULT_LOADBALANCE));
        } else {
            loadbalance = ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension(Constants.DEFAULT_LOADBALANCE);
        }
        RpcUtils.attachInvocationIdIfAsync(getUrl(), invocation);
        return doInvoke(invocation, invokers, loadbalance);
    }

三:负载均衡算法分析

3.1 RandomLoadBalance(random)

3.2 RoundRobinLoadBalance(roundrobin)

3.2 LeastActiveLoadBalance(leastactive)

3.2 ConsistentHashLoadBalance(consistenthash)

相关文章

网友评论

      本文标题:2.1 - 负载均衡

      本文链接:https://www.haomeiwen.com/subject/qequlqtx.html