前言

由于分布式系统是由多个分布在不同网络节点的子系统或者称为子服务组成,在处理客 户端请求时,服务之间需要通过网络来进行相互调用,所以如果某个服务由于宕机或者其他 原因导致不可用,则服务调用方需要采取一定的容错机制来避免该不可用服务影响了当前服 务的请求处理。

即一个服务可能会通过 RPC 调用多个其他服务,如果其中某个服务不可用, 则需要保证另外的多个服务的处理结果,以及当前发起 RPC 服务调用的服务的处理结果都 可以正常返回给客户端,只是这个不可用服务的处理结果需要返回错误而已。

分布式系统可以根据自身业务特点来选定容错机制,对服务调用失败采取不同的处理方 式和产生不同的处理结果,具体的容错机制可以分为如下六种。

FailOver:失败自动切换

失败自动切换机制是指当调用该服务集群的某个节点失败时,自动切换到该服务集群的 另外一个节点并进行重试,其中切换机制类似于负载均衡机制,不过一般采用轮询方式。这 种容错机制通常适用于读操作,所以可以请求从该服务集群的多个节点的任意一个节点获取 数据。由于需要切换到服务集群的另外一个节点进行服务重试,所以整个请求处理流程的时 间延迟会加大。

FailFast:快速失败

快速失败机制是指当进行服务调用失败时,直接返回错误,而不会进行重试或者切换到 服务集群的另外一个节点进行调用,即要么成功,要么失败,只发起一次服务调用请求。

这种机制通常适用于非幂等的操作,因为服务调用失败的原因包括:服务节点机器宕机 导致服务不可用;服务可用,但是两个服务节点之间的网络出现延迟或者被调用的服务节点 繁忙,处理请求缓慢,导致返回结果超时。所以当服务调用失败时,可能确实没有进行操作, 也可能是进行了操作,但是返回响应结果超时或者丢失,而该操作又是非幂等的,故不能进 行重复操作,否则会导致数据不一致性。

FailSafe:失败安全

失败安全机制跟快速失败机制类似,都是只发起一次服务调用,要么成功,要么失败, 不会进行重试操作。不过与快速失败不同的是,失败安全机制在调用失败时会进行日志记录。 所以可以通过对日志进行监控和分析来及时了解服务调用情况,及早发现和处理服务调用失 败的情况,以及对于重要服务的调用可以通过日志的数据来进行补偿。

FailBack:失败自动恢复

失败自动恢复机制在服务调用失败时,跟失败安全机制类似也会进行服务调用的记录, 不过在记录的基础上,增加了自动定时重发的逻辑,适用于异步、幂等性的请求调用或者消 息系统中允许消息重复的场景。

Forking:并行调用多个服务节点

并行机制通常用于实时性要求较高的读操作的场景,其基本工作过程为并行调用服务集 群的所有节点,由于是读操作,故所有服务节点返回的数据都是相同的,所以只要有一个服 务节点返回调用成功则返回响应给客户端。

这种机制相对于 FailOver 失败自动切换机制,由于是对所有服务节点发起并行调用,而 不是在调用失败时才一个个轮询切换直到调用成功,所以延迟较小,实时性较高,不过机器 的系统资源开销较大,所以如果需要进行这种调用,则需要保证机器性能较高。

BroadCast:广播调用

广播调用与并行调用类似,也是需要对服务集群的每个节点都发起一次调用,不过不同 的是,广播调用通常用于服务集群的每个节点都维护了本地状态,然后需要对这种本地状态 进行写操作的场景,即需要同步写操作给服务集群的每个节点,从而保证每个节点的数据一 致性和可靠性。

总结

以上介绍了 6 种分布式系统中场景的容错机制,其中前 4 种容错机制是针对服务调用失 败的场景,而后面两种容错机制,即 Forking 和 Broadcast 更多的是对数据实时性和数据可 靠性方面的考虑和容错的实现。

分布式系统设计之容错机制相关推荐

  1. 分布式 常见的容错机制

    常见容错机制:failover ,failsafe,failfase ,failback,forking,来源于阿里的定义. Failover 失败自动切换 当出现失败,重试其它服务器,通常用于读操作 ...

  2. 云原生时代|分布式系统设计知识图谱(内含 22 个知识点)

    我们身处于一个充斥着分布式系统解决方案的计算机时代,无论是支付宝.微信这样顶级流量产品.还是区块链.IOT等热门概念.抑或如火如荼的容器生态技术如Kubernetes,其背后的技术架构核心都离不开分布 ...

  3. 云原生时代|分布式系统设计知识图谱(内含22个知识点)

    我们身处于一个充斥着分布式系统解决方案的计算机时代,无论是支付宝.微信这样顶级流量产品.还是区块链.IOT等热门概念.抑或如火如荼的容器生态技术如Kubernetes,其背后的技术架构核心都离不开分布 ...

  4. 分布式系统设计系列 -- 基本原理及高可用策略

    "分布式系统设计"系列第一篇文章,这篇文章主要介绍一些入门的概念和原理,后面带来一些高可用.数据分布的实践方法!! 各位亲,如果你们觉得本文有还不错的地方,请点击"投一票 ...

  5. 二、分布式系统设计策略

    二.分布式系统设计策略 分布式系统本质是通过低廉的硬件攒在一起以获得更好的吞吐量.性能以及可用性等. 在分布式环境下,以下几个问题是普遍关心的,我们称之为设计策略: 如何检测当前节点还活着? 如何保障 ...

  6. 一文带你重新审视CAP理论与分布式系统设计

    这是一篇来自微信公众号的文章,如果图片看不到,可直接跳转到文章出处查看:https://mp.weixin.qq.com/s?__biz=MzI4NTA1MDEwNg==&mid=265076 ...

  7. 从金拱门餐厅联想到的分布式系统设计思维

    作者|周明耀 编辑|小智 其实在生活中,大到组织架构,小到琐碎日常,都能学到一些经验.总结出一些知识.共性往往隐藏在特性之中.你需要做的,可能仅仅只是细心观察而已? 前几天中午开会开到 12 点半,错 ...

  8. 分布式系统设计【转载】

    [前言] 分布式系统已经流行了好多年了,从阿里巴巴提出去IOE开始,分布式系统的概念已经进入了我们的视野,每年各大峰会都会出现的内容,而峰会上大厂只是在肆意的炫耀自己的成果,吹的像已经作出了航母,其实 ...

  9. 2021年大数据Flink(二十七):Flink 容错机制 Checkpoint

    目录 Flink 容错机制 Checkpoint State Vs Checkpoint Checkpoint执行流程 简单流程 复杂流程 State状态后端/State存储介质 MemStateBa ...

最新文章

  1. 贝叶斯统计的无信息先验和共轭先验
  2. 基于python的天气预报系统,基于python编写的天气抓取程序
  3. JAVA泛型知识(一)
  4. php判断数组是否存在字符串中,php判断数组元素中是否存在某个字符串的方法_php技巧...
  5. SAP UI5 popup弹出对话框的调试
  6. 关于gedit的编码问题
  7. php 采集不到内容_Thinkphp5与QueryList,也可以实现采集(爬虫)页面功能
  8. mysql设置user权限允许远程_mysql 用户及权限管理 允许远程连接
  9. 六个超大规模Hadoop(前景)
  10. 在线RGB和HEX十六进制颜色互转工具
  11. DataTable增加行
  12. 对网站实施“记住我”的最佳方法是什么? [关闭]
  13. 图形的认识(curve,surface,hypersurface)
  14. 2022年QQ微信内置浏览器 UA 标识, Header 获取
  15. 生成arp报文的verilog实现
  16. 原生js--选项卡全选反选,选项卡切换,模拟搜索框,微博发布(带时间),注册协议倒计时
  17. smartctl获取raid卡下intel ssd寿命
  18. oracle查询锁表信息
  19. java写excel文件,报Warning: MS Office Drawing on sheet Sample not supported - omitting
  20. atom编辑器运行html,Atom编辑器配置

热门文章

  1. php 获取变量类型
  2. Word如何让两个文档同时并排查看
  3. 恢复truncate删除的表
  4. 前端基础-CSS阴影
  5. CSDN头像更新 开放啦
  6. 掌控板玩板指南1:初识掌控板、扩展板、Mind+编辑器
  7. 基于STM32的智能语音垃圾桶设计
  8. SpringBoot + H2 内置数据库
  9. python之简易界面编程(模块搭建+界面搭建+功能完成)
  10. python123-Python基本语法元素 (第1周)-货币转换 I