Dubbo 集群容错
前言
1. 容错简介
那么怎样来做容错处理呢?一般常见的两种方式:第一种是在客户端做一个容错处理、第二种是通过一个中间件来做容错处理。如下图:

第一张图采用的客户端的容错处理,第二张图是采用中间件进行容错处理。从上图中可知道无论采用那种方式,我们都需要知道调用的可用服务的列表然后根据相应的策略去选择服务。我们的Dubbo也是这么来做的。下图来自Dubbo官网:

-
这里的真实
Invoker是远程服务Provider暴露的一个可调用Service的抽象,Invoker封装了Provider地址及Service接口信息。 -
Directory代表多个Invoker,可以把它看成List<Invoker>,但与List不同的是,它的值可能是动态变化的,比如注册中心推送变更会更新Directory。 -
Cluster将Directory中的多个Invoker伪装成一个Invoker,对上层透明,伪装过程包含了容错逻辑,调用失败后,重试另一个。 -
Router负责从多个Invoker中按路由规则选出子集,比如读写分离,应用隔离等 -
LoadBalance负责从多个Invoker中选出具体的一个用于本次调用,选的过程包含了负载均衡算法,调用失败后,需要重选
2. 容错模式
在Dubbo中有5种容错模式分别是:
-
Failover Cluster失败自动切换:当我们在调用Dubbo服务时出现失败,容错策略会重试其它服务器 。
使用场景:对于一些必达性要求高的服务调用,但是服务提供方要求做幂等处理 。
-
Failfast Cluster快速失败:只发起一次调用,如果调用Dubbo服务失败立即报错。
使用场景:通常用于非幂等性的写操作,比如新增记录。
-
Failsafe Cluster失败安全:当调用Dubbo服务出现异常时,直接忽略。
使用场景:通常用于运行数据丢失常见,例如:日志记录等操作。
-
Failback Cluster失败自动恢复:当调用Dubbo服务失败,后台记录失败请求并定时重发。
使用场景:通常用于必达通知场景,例如:消息通知操作。
-
Forking Cluster集群并行:并行调用多个Dubbo服务,只要其中有一个成功即返回。
使用场景:通常用于从多个源获取相同数据,以获取最快的响应速度,例如:同时从多个备库查询数据。
-
Broadcast Cluster集群广播:循环调用所有Dubbo服务提供者,任意一台报错则报错。
使用场景:通用用于向多个实例通知消息,例如:更新集群中所有应用缓存或日志。
3. 示例演示
同样我们以获取图书列表为例,代码结构如下:

Tips:我们在配置集群容错模式有两种方式:一种是在消费端配置、另一种是在服务提供者配置。下面分别是消费端配置和服务端配置,两种方式选择一种即可:
消费端配置文件:dubbo-consumer-xml.xml
服务端配置文件:dubbo-provider-xml.xml
测试步骤:我们启动com.muke.dubbocourse.clustererror.provider.XmlApplication#main方法2次,运行2个服务提供者,然后启动一个消费者调用com.muke.dubbocourse.clustererror.provider.BookFacadeImpl#queryAll,查看2个服务者是否有日志输出。
4. 小结
在本小节中我们主要学习了 Dubbo 中的集群容错,在Dubbo中为我们提供6种集群容错处理方式,它们分别是:Failover Cluster、Failfast Cluster、Failsafe Cluster、Failback Cluster、Forking Cluster、Broadcast Cluster。同时也了解到Dubbo中集群容错的原理。
本节课程的重点如下:
-
理解什么是集群容错
-
了解 Dubbo 中6种集群容错方式
-
了解集群容错原理
-
了解集群容错使用场景
作者
个人从事金融行业,就职过易极付、思建科技、某网约车平台等重庆一流技术团队,目前就职于某银行负责统一支付系统建设。自身对金融行业有强烈的爱好。同时也实践大数据、数据存储、自动化集成和部署、分布式微服务、响应式编程、人工智能等领域。同时也热衷于技术分享创立公众号和博客站点对知识体系进行分享。关注公众号:青年IT男 获取最新技术文章推送!
博客地址:
微信公众号:

浙公网安备 33010602011771号