浅谈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()方法里,源码的流程如下
- 获取服务重试次数。
- 创建List存储调用过的Invoker,用于重试时规避。
- 创建Set存储调用过的Provider,用于日志。
- 发起服务调用,负载均衡选出Invoker发起调用,成功则返回,失败则重试。