赞
踩
发表于 2019-10-13
之前在面试中被问及dubbo的负载均衡,当时没有系统的回答出来,今天查阅了一下官方文档,于是出现了这篇文章。dubbo主要有4种负载均衡方式,分别是:基于权重随机算法的RandomLoadBalance、基于最少活跃调用数算法的LeastActiveLoadBalance、基于Hash一致性的ConsistentHashLoadBalance、以及基于加权轮询算法的RoundRobinLoadBalance。
在 Dubbo 中,所有负载均衡实现类均继承自 AbstractLoadBalance,该类实现了 LoadBalance 接口,并封装了一些公共的逻辑。所以在分析负载均衡实现之前,先来看一下 AbstractLoadBalance 的逻辑。首先来看一下负载均衡的入口方法 select,如下:
\@Override
public \<T> Invoker\<T> select\(List\<Invoker\<T>> invokers, URL url, Invocation invocation\) \{
if \(invokers == null |\| invokers.isEmpty\(\)\)
return null;
// 如果 invokers 列表中仅有一个 Invoker,直接返回即可,无需进行负载均衡
if \(invokers.size\(\) == 1\)
return invokers.get\(0\);
// 调用 doSelect 方法进行负载均衡,该方法为抽象方法,由子类实现
return doSelect\(invokers, url, invocation\);
\}
protected abstract \<T> Invoker\<T> doSelect\(List\<Invoker\<T>> invokers, Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。