Dubbo-集群容错之Cluster

本文详细介绍了Dubbo的集群容错机制,包括Failover、Failfast、Failback、Failsafe、Broadcast、Available、Forking和Mergeable等八种策略。通过源码分析,阐述了各种容错策略的特点和适用场景,例如Failover适用于读操作,Failfast适用于非幂等性写操作,而Broadcast用于通知所有提供者更新本地资源。同时,还提到了MockClusterWrapper实现的服务降级策略。
摘要由CSDN通过智能技术生成

插播面试题

看源码我比较喜欢带着目的性,带着问题看源码

  1. dubbo中"读接口"和"写接口"有什么区别?
  2. 谈谈dubbo中的不同容错机制及特点?

集群容错架构设计

首先上一张Dubbo官网的集群容错的架构设计图
在这里插入图片描述

其中有几个关键角色

  1. Directory:其用途是保存 Invoker,可简单类比为 List。其实现类 RegistryDirectory 是一个动态服务目录,可感知注册中心配置的变化,它所持有的 Invoker 列表会随着注册中心内容的变化而变化
  2. Router:可以简单理解为过滤器(路由),用户可以配置自己的路由规则,从而过滤掉不符合规则的Invoker
  3. LoadBalance:LoadBalance是负载均衡的抽象接口,负责从Router路由规则过滤后的Invoker列表中选择一个最终调用的Invoker
  4. Invoker:这里的 Invoker 是 Provider 的一个可调用 Service 的抽象,Invoker 封装了 Provider 地址及 Service 接口信息

还有一个Cluster没介绍,Cluster又是什么作用呢?

集群 Cluster 用途是将多个服务提供者合并为一个 Cluster Invoker,并将这个 Invoker 暴露给服务消费者。这样一来,服务消费者只需通过这个 Invoker 进行远程调用即可,至于具体调用哪个服务提供者,以及调用失败后如何处理等问题,现在都交给集群模块去处理

Cluster 将 Directory 中的多个 Invoker 伪装成一个 Invoker,对上层透明,伪装过程包含了容错逻辑,调用失败后,重试另一个

既然Cluter中包含了集群容错的场景,那么就从接口层面入手,看下Cluster到底有几种容错机制

在这里插入图片描述
可以看到Cluster接口的默认实现是FailoverCluster(失败重试),容错机制共有10种,从经常使用的开始介绍

FailoverCluster

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

FailoverClusterInvoker#doInvoke方法实现如下
在这里插入图片描述

FailfastCluster

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

FailfastClusterInvoker#doInvoke方法如下

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值