分布式系统架构3:服务容错

简介: 分布式系统因其复杂性,故障几乎是必然的。那么如何让系统在不可避免的故障中依然保持稳定?本文详细介绍了分布式架构中7种核心的服务容错策略,包括故障转移、快速失败、安全失败等,以及它们在实际业务场景中的应用。无论是支付场景的快速失败,还是日志采集的安全失败,每种策略都有自己的适用领域和优缺点。此外,文章还为技术面试提供了解题思路,助你在关键时刻脱颖而出。掌握这些策略,不仅能提升系统健壮性,还能让你的技术栈更上一层楼!快来深入学习,走向架构师之路吧!

这是小卷对分布式系统架构学习的第3篇文章,虽然知道大家都不喜欢看纯技术文章,写了也没多少阅读量,但是个人要成长的话,还是需要往深一点的技术上去探索的

1.为什么需要容错

分布式系统的本质是不可靠的,一个大的服务集群中,程序可能崩溃、节点可能宕机、网络可能中断,这些“意外情况”其实全部都在“意料之中”。故障的发生是必然的,所以需要设计一套健壮的容错机制来应对这些问题。

容错策略,指的是“面对故障,我们该做些什么”;而容错设计模式,指的是“要实现某种容错策略,我们该如何去做”。下面介绍7种常见的容错策略。

2.七种容错策略

7种常见的容错策略:故障转移、快速失败、安全失败、沉默失败、故障恢复、并行调用和广播调用

故障转移Failover

概念:分布式服务中,服务会有多个副本。如果调用的服务器出现故障,系统不会直接返回失败,而是切换到其他服务副本上,保证返回调用成功的结果。

故障转移需要设置重试次数,并且需根据实际业务场景考虑是否设置故障转移。示例:

现在有Service A → Service B → Service C 这么一条调用链。假设 A 的超时阈值为 100ms,而 B 调用 C 需要 60ms,然后不幸失败了,这时候做故障转移其实已经没有太大意义了。因为即使B调用C故障转移成功了,调用耗时至少增加60ms,A已经超时了,这种故障转移对系统无利。

适用场景:读多写少的采集,如:电商商品查询;对成功率要求高的采集

快速失败Failfast

当业务场景不允许,或者服务是非幂等时,重复调用会产生脏数据,就不能用故障转移了,需要用到快速失败。

概念:服务在调用失败后,立即返回错误,不做任何重试

示例:支付场景中,调用银行扣款接口,返回结果是网络异常。这时候无法区分是否已扣款了,为避免重复扣款,只能服务抛出异常报错,不能重试

适用场景:高实时性场景、交易支付场景

缺点:调用方需有较高容错能力

安全失败Failsafe

服务也区分主路和旁路,旁路的特点是服务失败了也不影响核心业务。比如spring项目中的日志、Debug信息等。旁路逻辑不影响最终结果。因此,对这类逻辑的容错策略就是,即使旁路逻辑失败了,也当做正确返回。

概念:当服务调用失败时,忽略异常并返回一个默认的结果,确保系统继续运行。

适用场景:非核心业务场景,日志处理、监控采集

优点:最大化保证系统稳定性

示例:java中的try-catch,Dubbo中的failsafe策略

沉默失败Failsilent

概念:大量请求如果都等到超时才失败,可能将系统的线程、内存、网络资源耗尽,影响整个服务稳定性。对该场景的失败策略是:当请求失败后,默认服务提供者一定时间内无法提供服务了,不再向它分配流量,将错误隔离开来。

实际应用场景:分布式系统中,单点故障时,流量调度系统不再给该节点分配流量,每隔5分钟自动检查节点是否恢复。

故障恢复Failback

不是单独存在的,通常默认使用快速失败+故障恢复策略

概念:故障恢复是指在服务调用失败后,将失败的请求异步存储下来,存到数据库或消息队列中,并定时重试或补偿,直到调用成功。这种方式对业务具有一定的“追溯”能力。故障恢复也需有最大重试次数限制

适用场景:实时性要求不高,数据一致性要求高的场景。如:库存更新、订单状态同步

优点:提高系统最终一致性

缺点:系统需配合消息队列,实现复杂

小结:前面5种容错策略都是针对调用失败后如何进行弥补的,下面2种是调用之前如何提供成功率的

并行调用Forking

概念:同时调用多个服务节点,只要任意一个节点返回成功结果即认为调用成功。对于调用结果相同或相似的服务节点,这种方式可大幅提高调用成功率。

适用场景:多副本部署场景、调用耗时长且高可用要求的场景。如:数据库分片存储查询

优点:提供成功率,减少等待时间(取决于最先返回成功的节点)

缺点:增加系统开销

广播调用Broadcast

概念:请求发送给所有服务实例,并收集所有返回结果,要求所有请求全部成功才算成功。这种方式适用于需要对多个节点进行同步操作的场景

适用场景:刷新分布式缓存、配置同步

优点:所有节点都能执行操作

缺点:并行执行开销大

实现方式:Dubbo的broadcast策略支持广播调用

7种容错策略对比

容错策略 优点 缺点 应用场景
故障转移 系统自动处理,调用者对失败信息不可见 会增加调用时间,也会导致额外的资源开销 调用幂等服务,对调用时间不敏感的场景
快速失败 调用者有失败的处理完全控制,不依赖服务的幂等性 调用者必须正确处理失败逻辑,容易引起雪崩 调用非幂等的服务,超时阈值较低的场景
安全失败 不影响主逻辑 只适用于旁路调用 调用链中的旁路服务
沉默失败 控制错误不影响全局 出错的地方将有一段时间内不可用 频繁超时的服务
故障恢复 调用失败后自动重试,也不影响主逻辑 推荐用于旁路服务调用,重试任务可能堆积,重试仍然可能失败 调用链中的旁路服务,对实时性要求不高的主逻辑
并行调用 尽可能在最短时间内获得最高的成功率 额外消耗机器资源,大部分调用可能是无用功 资源充足且失效容忍度低的场景
广播调用 支持同时对批量的服务提供者发起调用 资源消耗大,失败概率高 只适用于批量操作的场景

面试题准备

如果一个业务系统需要调用第三方的5个接口,这5个接口中只要有3个接口返回成功了就认为成功,问如何设计并实现

周志明大佬的答复:

我看这题是个圈套呀,大多数的架构设计题目,固定答案往往都是不对的。因为做技术设计是为了解决实际问题,不能谈兵,所以方案要根据希望实现的目标而定:

如果目的是这项业务尽可能快速地完成,那就forking策略,5个一起调用,成功3个算过。

如果目的是这项业务尽可能少消耗资源,那就failfast策略,先对它们出错概率做个先验判断,排序后先调用最容易出错的,错够3次算失败,后面的不执行。

如果目的是这项业务尽可能高概率地完成,那就failover策略

相关文章
|
7天前
|
存储 运维 安全
云上金融量化策略回测方案与最佳实践
2024年11月29日,阿里云在上海举办金融量化策略回测Workshop,汇聚多位行业专家,围绕量化投资的最佳实践、数据隐私安全、量化策略回测方案等议题进行深入探讨。活动特别设计了动手实践环节,帮助参会者亲身体验阿里云产品功能,涵盖EHPC量化回测和Argo Workflows量化回测两大主题,旨在提升量化投研效率与安全性。
云上金融量化策略回测方案与最佳实践
|
9天前
|
人工智能 自然语言处理 前端开发
从0开始打造一款APP:前端+搭建本机服务,定制暖冬卫衣先到先得
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。
8474 20
|
13天前
|
Cloud Native Apache 流计算
资料合集|Flink Forward Asia 2024 上海站
Apache Flink 年度技术盛会聚焦“回顾过去,展望未来”,涵盖流式湖仓、流批一体、Data+AI 等八大核心议题,近百家厂商参与,深入探讨前沿技术发展。小松鼠为大家整理了 FFA 2024 演讲 PPT ,可在线阅读和下载。
4565 11
资料合集|Flink Forward Asia 2024 上海站
|
13天前
|
自然语言处理 数据可视化 API
Qwen系列模型+GraphRAG/LightRAG/Kotaemon从0开始构建中医方剂大模型知识图谱问答
本文详细记录了作者在短时间内尝试构建中医药知识图谱的过程,涵盖了GraphRAG、LightRAG和Kotaemon三种图RAG架构的对比与应用。通过实际操作,作者不仅展示了如何利用这些工具构建知识图谱,还指出了每种工具的优势和局限性。尽管初步构建的知识图谱在数据处理、实体识别和关系抽取等方面存在不足,但为后续的优化和改进提供了宝贵的经验和方向。此外,文章强调了知识图谱构建不仅仅是技术问题,还需要深入整合领域知识和满足用户需求,体现了跨学科合作的重要性。
|
21天前
|
人工智能 自动驾驶 大数据
预告 | 阿里云邀您参加2024中国生成式AI大会上海站,马上报名
大会以“智能跃进 创造无限”为主题,设置主会场峰会、分会场研讨会及展览区,聚焦大模型、AI Infra等热点议题。阿里云智算集群产品解决方案负责人丛培岩将出席并发表《高性能智算集群设计思考与实践》主题演讲。观众报名现已开放。
|
9天前
|
人工智能 容器
三句话开发一个刮刮乐小游戏!暖ta一整个冬天!
本文介绍了如何利用千问开发一款情侣刮刮乐小游戏,通过三步简单指令实现从单个功能到整体框架,再到多端优化的过程,旨在为生活增添乐趣,促进情感交流。在线体验地址已提供,鼓励读者动手尝试,探索编程与AI结合的无限可能。
三句话开发一个刮刮乐小游戏!暖ta一整个冬天!
|
1月前
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
104589 10
|
8天前
|
消息中间件 人工智能 运维
12月更文特别场——寻找用云高手,分享云&AI实践
我们寻找你,用云高手,欢迎分享你的真知灼见!
727 45
|
6天前
|
弹性计算 运维 监控
阿里云云服务诊断工具:合作伙伴架构师的深度洞察与优化建议
作为阿里云的合作伙伴架构师,我深入体验了其云服务诊断工具,该工具通过实时监控与历史趋势分析,自动化检查并提供详细的诊断报告,极大提升了运维效率和系统稳定性,特别在处理ECS实例资源不可用等问题时表现突出。此外,它支持预防性维护,帮助识别潜在问题,减少业务中断。尽管如此,仍建议增强诊断效能、扩大云产品覆盖范围、提供自定义诊断选项、加强教育与培训资源、集成第三方工具,以进一步提升用户体验。
640 243
|
3天前
|
弹性计算 运维 监控
云服务测评 | 基于云服务诊断全方位监管云产品
本文介绍了阿里云的云服务诊断功能,包括健康状态和诊断两大核心功能。作者通过个人账号体验了该服务,指出其在监控云资源状态和快速排查异常方面的优势,同时也提出了一些改进建议,如增加告警配置入口和扩大诊断范围等。