分布式系统设计之容错机制
前言
由于分布式系统是由多个分布在不同网络节点的子系统或者称为子服务组成,在处理客 户端请求时,服务之间需要通过网络来进行相互调用,所以如果某个服务由于宕机或者其他 原因导致不可用,则服务调用方需要采取一定的容错机制来避免该不可用服务影响了当前服 务的请求处理。
即一个服务可能会通过 RPC 调用多个其他服务,如果其中某个服务不可用, 则需要保证另外的多个服务的处理结果,以及当前发起 RPC 服务调用的服务的处理结果都 可以正常返回给客户端,只是这个不可用服务的处理结果需要返回错误而已。
分布式系统可以根据自身业务特点来选定容错机制,对服务调用失败采取不同的处理方 式和产生不同的处理结果,具体的容错机制可以分为如下六种。
FailOver:失败自动切换
失败自动切换机制是指当调用该服务集群的某个节点失败时,自动切换到该服务集群的 另外一个节点并进行重试,其中切换机制类似于负载均衡机制,不过一般采用轮询方式。这 种容错机制通常适用于读操作,所以可以请求从该服务集群的多个节点的任意一个节点获取 数据。由于需要切换到服务集群的另外一个节点进行服务重试,所以整个请求处理流程的时 间延迟会加大。
FailFast:快速失败
快速失败机制是指当进行服务调用失败时,直接返回错误,而不会进行重试或者切换到 服务集群的另外一个节点进行调用,即要么成功,要么失败,只发起一次服务调用请求。
这种机制通常适用于非幂等的操作,因为服务调用失败的原因包括:服务节点机器宕机 导致服务不可用;服务可用,但是两个服务节点之间的网络出现延迟或者被调用的服务节点 繁忙,处理请求缓慢,导致返回结果超时。所以当服务调用失败时,可能确实没有进行操作, 也可能是进行了操作,但是返回响应结果超时或者丢失,而该操作又是非幂等的,故不能进 行重复操作,否则会导致数据不一致性。
FailSafe:失败安全
失败安全机制跟快速失败机制类似,都是只发起一次服务调用,要么成功,要么失败, 不会进行重试操作。不过与快速失败不同的是,失败安全机制在调用失败时会进行日志记录。 所以可以通过对日志进行监控和分析来及时了解服务调用情况,及早发现和处理服务调用失 败的情况,以及对于重要服务的调用可以通过日志的数据来进行补偿。
FailBack:失败自动恢复
失败自动恢复机制在服务调用失败时,跟失败安全机制类似也会进行服务调用的记录, 不过在记录的基础上,增加了自动定时重发的逻辑,适用于异步、幂等性的请求调用或者消 息系统中允许消息重复的场景。
Forking:并行调用多个服务节点
并行机制通常用于实时性要求较高的读操作的场景,其基本工作过程为并行调用服务集 群的所有节点,由于是读操作,故所有服务节点返回的数据都是相同的,所以只要有一个服 务节点返回调用成功则返回响应给客户端。
这种机制相对于 FailOver 失败自动切换机制,由于是对所有服务节点发起并行调用,而 不是在调用失败时才一个个轮询切换直到调用成功,所以延迟较小,实时性较高,不过机器 的系统资源开销较大,所以如果需要进行这种调用,则需要保证机器性能较高。
BroadCast:广播调用
广播调用与并行调用类似,也是需要对服务集群的每个节点都发起一次调用,不过不同 的是,广播调用通常用于服务集群的每个节点都维护了本地状态,然后需要对这种本地状态 进行写操作的场景,即需要同步写操作给服务集群的每个节点,从而保证每个节点的数据一 致性和可靠性。
总结
以上介绍了 6 种分布式系统中场景的容错机制,其中前 4 种容错机制是针对服务调用失 败的场景,而后面两种容错机制,即 Forking 和 Broadcast 更多的是对数据实时性和数据可 靠性方面的考虑和容错的实现。
分布式系统设计之容错机制相关推荐
- 分布式 常见的容错机制
常见容错机制:failover ,failsafe,failfase ,failback,forking,来源于阿里的定义. Failover 失败自动切换 当出现失败,重试其它服务器,通常用于读操作 ...
- 云原生时代|分布式系统设计知识图谱(内含 22 个知识点)
我们身处于一个充斥着分布式系统解决方案的计算机时代,无论是支付宝.微信这样顶级流量产品.还是区块链.IOT等热门概念.抑或如火如荼的容器生态技术如Kubernetes,其背后的技术架构核心都离不开分布 ...
- 云原生时代|分布式系统设计知识图谱(内含22个知识点)
我们身处于一个充斥着分布式系统解决方案的计算机时代,无论是支付宝.微信这样顶级流量产品.还是区块链.IOT等热门概念.抑或如火如荼的容器生态技术如Kubernetes,其背后的技术架构核心都离不开分布 ...
- 分布式系统设计系列 -- 基本原理及高可用策略
"分布式系统设计"系列第一篇文章,这篇文章主要介绍一些入门的概念和原理,后面带来一些高可用.数据分布的实践方法!! 各位亲,如果你们觉得本文有还不错的地方,请点击"投一票 ...
- 二、分布式系统设计策略
二.分布式系统设计策略 分布式系统本质是通过低廉的硬件攒在一起以获得更好的吞吐量.性能以及可用性等. 在分布式环境下,以下几个问题是普遍关心的,我们称之为设计策略: 如何检测当前节点还活着? 如何保障 ...
- 一文带你重新审视CAP理论与分布式系统设计
这是一篇来自微信公众号的文章,如果图片看不到,可直接跳转到文章出处查看:https://mp.weixin.qq.com/s?__biz=MzI4NTA1MDEwNg==&mid=265076 ...
- 从金拱门餐厅联想到的分布式系统设计思维
作者|周明耀 编辑|小智 其实在生活中,大到组织架构,小到琐碎日常,都能学到一些经验.总结出一些知识.共性往往隐藏在特性之中.你需要做的,可能仅仅只是细心观察而已? 前几天中午开会开到 12 点半,错 ...
- 分布式系统设计【转载】
[前言] 分布式系统已经流行了好多年了,从阿里巴巴提出去IOE开始,分布式系统的概念已经进入了我们的视野,每年各大峰会都会出现的内容,而峰会上大厂只是在肆意的炫耀自己的成果,吹的像已经作出了航母,其实 ...
- 2021年大数据Flink(二十七):Flink 容错机制 Checkpoint
目录 Flink 容错机制 Checkpoint State Vs Checkpoint Checkpoint执行流程 简单流程 复杂流程 State状态后端/State存储介质 MemStateBa ...
最新文章
- EFI启动PE加Linux,macOS安装盘制作并添加EFI和WinPE
- 如何解决大量字段的录入交互界面的设计呢?
- 配置oracle网络连接命令,配置oracle网络环境
- EasyARM-iMX283A的Linux 开发环境构建
- linux 工业 网络协议,简单了解Linux TCP/IP协议栈
- Unity3D导出的EXE不用显示分辨率选择界面
- 【SpringBoot_ANNOTATIONS】自动装配 04 Aware 注入Spring底层组件 原理
- Delphi的Indy通信中发送流文件的注意事项
- php搜索区分大小写,在php中搜索不区分大小写的xpath
- 数值计算求解静态热传导方程
- 1213家中国厂商涌入拉斯维加斯!CES 2019最全预告在此...
- hibernate——继承关系以及三个subclass标签的区别
- 指纹识别属于计算机技术,指纹识别技术属于人工智能吗 指纹识别技术什么时候发明的-与非网...
- 技术问答-5 String StringBuilder StringBuffer
- html 两个input挨着,欧洲区预选赛直播 -官方网站
- ux设计_UX评论模式品牌知道规则并且也打破了规则
- Emacs 显示左侧行号
- python自动生成采集规则_快速制作规则及获取规则提取器AP
- 设立有限公司需要具备的条件
- 《华为十年》转载了10年~ 离职副总裁给任正非的辞职信 ~ 朴实感动无数职场人