> 文章列表 > 浅谈Dubbo集群容错机制的实现

浅谈Dubbo集群容错机制的实现

浅谈Dubbo集群容错机制的实现

目录

 FailoverCluster

 ClusterInvoker

FailoverClusterInvoker


Dubbo整个集群容错层的实现在dubbo-cluster模块,它包含很多组件,例如:Cluster、ClusterInvoker、Directory、LoadBalance等等。

Cluster是集群容错接口,它的功能仅仅是将一组Invoker聚合成一个具备集群容错能力的ClusterInvoker。在2.7.8版本中,Dubbo内置了十种集群容错策略,默认策略是Failover,对应的类是FailoverCluster,它会创建FailoverClusterInvoker
 

 FailoverCluster

Cluster实现很简单,就是创建具有集群容错能力的ClusterInvoker,服务重试的逻辑全在FailoverClusterInvoker里,而FailoverClusterInvoker则是ClusterInvoker接口的其中一个实现类,下面从ClusterInvoker接口开始介绍。

 ClusterInvoker

ClusterInvoker接口继承自Invoker,它在原来的基础上,增加了集群容错的能力。

ClusterInvoker使用了模板方法模式,基类AbstractClusterInvoker对invoke()方法进行了抽象实现,具体到不同的容错实现上则是继承这个抽象类做doInvoke()方法的实现。

FailoverClusterInvoker

FailoverClusterInvoker就是继承了AbstractClusterInvoker类和ClusterInvoker接口的一个实现类。也是Dubbo默认的容错实现方式。实现的具体的容错逻辑就在doInvoke()方法里,源码的流程如下

  1. 获取服务重试次数。
  2. 创建List存储调用过的Invoker,用于重试时规避。
  3. 创建Set存储调用过的Provider,用于日志。
  4. 发起服务调用,负载均衡选出Invoker发起调用,成功则返回,失败则重试。