【dubbo系列三】容错机制

目录

集群容错方式

集群容错路线

容错机制使用

容错机制原理

1.Failover Cluster (默认)

2.Failfast Cluster

3.Failsafe Cluster

4. Failback Cluster

5. Forking Cluster [ fork ]

6. Broadcast Cluster

在网络通信中有很多不确定的因素,比如网络延迟、网络中断等,此类情况出现的话会造成当前这次请求出现失败。当服务通信出现这类问题时,需要采取一定措施来应对。

Dubbo 提供了容错机制来处理这类错误

集群容错方式

Dubbo 的集群容错机制就有以下 10 种 ,其中默认的扩展类为 FailoverCluster。

可双击Shifit搜索集群容错机制接口自行查看接口扩展类 org.apache.dubbo.rpc.cluster.Cluster

【dubbo系列三】容错机制

集群容错路线

集群容错真正发生在消费端。当消费端发起调用时,会先从服务目录(注册中心)查询满足需求的服务提供者信息,在此基础上进行路由,路由后的结果才会真正进行容错处理

【dubbo系列三】容错机制

容错机制使用

Consumer消费层利用dubbo注解实现容错机制

timeout 表示 调用等待的时间,超过这个时间 就认为 失败了 retries 尝试调用的次数

@Controller
public class UserController {
    @DubboReference(
            loadbalance = "consistenthash",
            timeout = 1500 ,    // 等候多久 还没有得到相应 就认为失败
            retries = 2,        //失败重试次数 三次
            cluster = "failover"    //cluster : 集群容错机制切换
            /*cluster 常用容错机制参数
                failover    : 容错机制失败切换
                failfase    : 快速失败,只发起一次调用,失败立马报错
                failsafe    : 失败安全,直接跳过异常,继续执行后面操作
                forking     : 同时调用多个,只要成功一个即可
                broadcast   : 必须都成功才算成功
             */
    )

容错机制原理

1.Failover Cluster (默认)

失败自动切换,当出现失败,重试其他服务器(缺省);通常用于读操作,但是重试会带来更长延迟。可以通过retries = “2” 来设置重试次数(不含第一次)

@DubboReference(loadbalance = "random", retries=2, cluster = "failover")

2.Failfast Cluster

快速失败,只会发起一次调用,失败立即报错以下错误。通常用于非幂等性的写操作,比如:新增记录

@DubboReference(loadbalance = "random", cluster = "failfase")

【dubbo系列三】容错机制 

3.Failsafe Cluster

失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。不抛出异常,直接继续执行后续的业务

@DubboReference(loadbalance = "random", cluster = "failsafe")

4. Failback Cluster

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

@DubboReference(loadbalance = "random", cluster = "failback")

5. Forking Cluster [ fork ]

并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。

@DubboReference(loadbalance = "random", cluster = "forking")

6. Broadcast Cluster

广播调用所有提供者,逐个调用,任意一台报错则报错 [2]。通常用于通知所有提供者更新缓存或日志等本地资源信息。

@DubboReference(loadbalance = "random", cluster = "broadcast")

后续持续更新中!!

Thanks!!

上一篇:Dubbo之Cluster负载均衡


下一篇:day10深入浅出MySQL(第十章,索引的设计和使用)