美文网首页
Dubbo专题:1.负载均衡

Dubbo专题:1.负载均衡

作者: 北交吴志炜 | 来源:发表于2019-02-20 16:33 被阅读0次

    dubbo的负载均衡实现类有
    ConsistentHashLoadBalance 一致性hash,
    LeastActiveLoadBalance 最少活跃调用,
    RandomLoadBalance随机权重,
    RoundRobinLoadBalance 轮询
    他们的实现类都是AbstractLoadBalance

        public <T> Invoker<T> select(List<Invoker<T>> invokers, URL url, Invocation invocation) {
            if (CollectionUtils.isEmpty(invokers)) {
                return null;
            }
            if (invokers.size() == 1) {
                return invokers.get(0);
            }
            return doSelect(invokers, url, invocation);
        }
    
        protected abstract <T> Invoker<T> doSelect(List<Invoker<T>> invokers, URL url, Invocation invocation);
    

    select方法就是从invoker列表(服务列表)中选出一个invoker,实现类就是去实现这个doSelect方法。

    RandomLoadBalance
    每个服务对应一个权重,算法根据权重,计算一个总的权重和,然后使用随机数映射来获取负载结果
    比如三个服务列表,权重分别是1,2,3 那么权重总和是6,生成一个最大6的随机数,生成1调用1号服务,生成2,3调用2号服务,其余调用3号服务,调用次数较多时,可以近似均匀的按权重分布,调用次数少时,可能不均匀。

    LeastActiveLoadBalance
    每一个服务对应一个活跃数active,初始0,收到请求,活跃数加1,完成请求,活跃数减1。活跃数越多,说明hung在该服务器的请求就越多,活跃数越少,说明该服务器越清闲。该算法将请求优先分配给活跃数最小的服务器,会结合权重

    ConsistentHashLoadBalance

    虚拟节点结合hash环的一种负载机制。

    RoundRobinLoadBalance

    最新版重构参考自 Nginx 的平滑加权轮询负载均衡。每个服务器对应两个权重,分别为 weight 和 currentWeight。其中 weight 是固定的,currentWeight 会动态调整,初始值为0。当有新的请求进来时,遍历服务器列表,让它的 currentWeight 加上自身权重。遍历完成后,找到最大的 currentWeight,并将其减去权重总和,然后返回相应的服务器即可。

    相关文章

      网友评论

          本文标题:Dubbo专题:1.负载均衡

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