- dubbo提供以下负载均衡模式:
Dubbo提供了多种均衡策略,缺省为random随机调用。
模式 | 功能 | 适用场景 | 优点 | 缺点 |
---|---|---|---|---|
Random | 随机,按权重设置随机概率 | 缺省 | ||
RoundRobin | 按公约后的权重设置轮循比率 | |||
LeastActive | 根据请求调用的次数计数 | 处理请求更慢的节点会受到更少的请求 | ||
ConsistentHash | 相同参数的请求总是发到同一提供者 | 当某一台提供者挂时,不会引起剧烈变动。 |
配置示例:
<dubbo:service interface="org.xx.dubbo.api.XXService" version="1.0.0"
cluster="failover" retries="2" timeout="100" loadbalance="random"
ref="xxBizService" protocol="dubbo" >
<dubbo:method name="queryCount" timeout="80" retries="2" loadbalance="leastactive" />
</dubbo:service>
Dubbo框架也提供了实现自定义负载均衡策略的接口,可以实现com.alibaba.dubbo.rpc.cluster.LoadBalance接口,其定义如下:
/**
* LoadBalance. (SPI, Singleton, ThreadSafe)
*
* <a href="http://en.wikipedia.org/wiki/Load_balancing_(computing)">Load-Balancing</a>
*
* @see com.alibaba.dubbo.rpc.cluster.Cluster#join(Directory)
* @author qian.lei
* @author william.liangf
*/
@SPI(RandomLoadBalance.NAME)
public interface LoadBalance {
/**
* select one invoker in list.
* @param invokers invokers.
* @param url refer url
* @param invocation invocation.
* @return selected invoker.
*/
@Adaptive("loadbalance")
<T> Invoker<T> select(List<Invoker<T>> invokers, URL url, Invocation invocation) throws RpcException;
}
.