写点什么

Dubbo 集群容错

用户头像
青年IT男
关注
发布于: 2021 年 04 月 25 日
Dubbo 集群容错

前言

大家好,今天开始给大家分享 — Dubbo 专题之 Dubbo 集群容错。那么我们首先得知道什么是集群?一般我们在微服务应用中都是多实例部署,也就是说同一份代码部署多台机器或容器中,这样做的好处是提高服务处理能力。同时由于集群部署,所以整个集群也有容错的能力。那么什么是容错呢?其实可以这样简单的理解:当我们在调用集群中一个实例时出错,我们可以重试另外一个实例这样大大提高了应用的可靠性。假设我们没有容错处理能力那么即使有集群的部署我们在调用应用失败情况下不能重试其他实例,这样可靠性大大降低。

1. 容错简介

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



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



  • 这里的真实 Invoker 是远程服务Provider暴露的一个可调用 Service 的抽象,Invoker 封装了 Provider 地址及 Service 接口信息。

  • Directory 代表多个 Invoker,可以把它看成 List<Invoker> ,但与 List 不同的是,它的值可能是动态变化的,比如注册中心推送变更会更新Directory

  • ClusterDirectory 中的多个 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


<?xml version="1.0" encoding="UTF-8"?><beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"       xmlns="http://www.springframework.org/schema/beans"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd       http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<dubbo:application name="demo-consumer" logger="log4j"/>
<dubbo:registry address="zookeeper://127.0.0.1:2181"/> <!-- <dubbo:consumer check="false" />--> <!-- <dubbo:registry check="false" />-->
<!--当cluster="failover"指定集群容错模式--> <dubbo:reference id="bookFacade" interface="com.muke.dubbocourse.common.api.BookFacade" cluster="broadcast"></dubbo:reference>
</beans>
复制代码


服务端配置文件:dubbo-provider-xml.xml


<?xml version="1.0" encoding="UTF-8"?><beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"       xmlns="http://www.springframework.org/schema/beans"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd       http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<dubbo:application name="demo-provider" metadata-type="remote"/>
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<bean id="bookFacade" class="com.muke.dubbocourse.serviceconfig.provider.BookFacadeImpl"/>
<!--暴露本地服务为Dubbo服务 ,当cluster="failover"指定集群容错模式--> <dubbo:service interface="com.muke.dubbocourse.common.api.BookFacade" ref="bookFacade" cluster="broadcast"/>
</beans>
复制代码


测试步骤:我们启动com.muke.dubbocourse.clustererror.provider.XmlApplication#main方法 2 次,运行 2 个服务提供者,然后启动一个消费者调用com.muke.dubbocourse.clustererror.provider.BookFacadeImpl#queryAll,查看 2 个服务者是否有日志输出。

4. 小结

在本小节中我们主要学习了 Dubbo 中的集群容错,在 Dubbo 中为我们提供 6 种集群容错处理方式,它们分别是:Failover ClusterFailfast ClusterFailsafe ClusterFailback ClusterForking ClusterBroadcast Cluster。同时也了解到 Dubbo 中集群容错的原理。


本节课程的重点如下:


  1. 理解什么是集群容错

  2. 了解 Dubbo 中 6 种集群容错方式

  3. 了解集群容错原理

  4. 了解集群容错使用场景

作者

个人从事金融行业,就职过易极付、思建科技、某网约车平台等重庆一流技术团队,目前就职于某银行负责统一支付系统建设。自身对金融行业有强烈的爱好。同时也实践大数据、数据存储、自动化集成和部署、分布式微服务、响应式编程、人工智能等领域。同时也热衷于技术分享创立公众号和博客站点对知识体系进行分享。关注公众号:青年 IT 男 获取最新技术文章推送!


博客地址: http://youngitman.tech

微信公众号:



知识星球:


发布于: 2021 年 04 月 25 日阅读数: 17
用户头像

青年IT男

关注

站在巨人肩上看得更远! 2018.04.25 加入

从事金融行业,就职过易极付、思建科技、网约车平台等一流技术团队,目前就职于银行负责支付系统建设。对金融行业有强烈的爱好。实践大数据、数据存储、自动化集成和部署、分布式微服务、响应式编程、人工智能等领域

评论

发布
暂无评论
Dubbo 集群容错