dubbo源代码解析之-集群容错

  • 2019 年 10 月 4 日
  • 笔记

Failover Cluster:失败自动切换,当出现失败,重试其它服务器,通常用于读操作(推荐使用)

可通过retries="2"来设置重试次数(不含第一次)

Failfast Cluster:快速失败,只发起一次调用,失败立即报错,通常用于非幂等性的写操作

Failsafe Cluster:失败安全,出现异常时,直接忽略,通常用于写入审计日志等操作

Failback Cluster:失败自动恢复,后台记录失败请求,定时重发,通常用于消息通知操作

Forking Cluster:并行调用多个服务器,只要一个成功即返回,通常用于实时性要求较高的读操作

可通过forks="2"来设置最大并行数。

Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错,通常用于更新提供方本地状态

下面我们来看一下UML图

图1

图2

图1和图2的关系,在这里可以理解为是使用了装饰器模式,根据配置,通过cluster接口找对应的实现,在具体的实现中,在将任务分配给收下的小弟,这里的小弟就是具体的各个Invoker

下面先来看下官方文档给出的调用流程图

图3

该图可以这样理解是MockClusterInvoker–>FailoverInvoker/FailfastInvoker/FailsafeInvoker/FailbackInvoker/ForkingInvoker–>Directory–>Router—>loadBalance–>InvokerWrapper—->FutureFilter

下面先以Dubbo默认的FailoverInvoker,失败切换的策略进行详细讲解

从代码可以看出来,其实是循环一个可调用的列表,当一次调用失败后,就切换到下一个

下面来看下快速失败FailfastInvoker和失败安全failsafeInvoker

快速失败会直接抛出异常,代码如下

失败安全,在失败后只是进行了简单的日志记录,但是会返回一个空的结果集

在来看下失败恢复,失败后会进行记录,然后通过定时任务进行调用,重试间隔时间是5秒,不可配置