QCon 演讲火热征集中,快来分享技术实践与洞见!222222 了解详情
写点什么

向每年服务超过 10 亿人次的系统“发难”,麦当劳的混沌工程实践

  • 2025-01-17
    北京
  • 本文字数:6513 字

    阅读完需:约 21 分钟

大小:3.26M时长:18:59
向每年服务超过 10 亿人次的系统“发难”,麦当劳的混沌工程实践

中午的麦当劳,人头攒动,顾客和外卖骑手焦急地等餐,服务人员忙碌地处理订单,后厨人员火热地备餐。在这样一个繁忙的时刻,如果点餐系统突然遇到技术故障,比如服务器响应缓慢或者数据库连接中断,那将是一个不小的挑战。


麦当劳希望通过故障模式和影响分析,以及引入混沌工程理念,以实验的方式来提前模拟并应对这种可能性。自 2023 年年底搭建混沌平台,开展混沌实验以来,麦当劳已经进行了数百次大大小小的混沌演练,各种高可用架构验证的混沌测试超过 500 次。在系统核心链路梳理和风险评估方面取得了显著成效,快速精准地识别风险点和故障场景。这些工作成功保障了包括 0531 麦麦对讲机抢购活动、88 金粉节、拍拍灯以及 BOB SLP 抢购等多档大型促销活动期间的系统稳定性,助力 IT 系统一次又一次地挑战流量高峰。


可以说,主动向每年服务超过 10 亿人次的系统“发难”,已经成为麦当劳 IT 团队的日常。而在整个混沌工程实践历程中,这家坐拥数千家门店的餐饮界巨擘,也完成了将 IT 系统从能用好用到更稳定可靠的转变。

“我们一直在思考如何进行面向失败的编程及设计”


“我们一直在思考如何进行面向失败的编程及设计,定位实际场景中失败和不稳定因素位置。我们希望通过混沌工程的实践帮助我们更深入地思考并解决这些问题。”


对于麦当劳中国而言,引入混沌工程理念是一个自然而然的历程。


一方面,餐饮行业的 IT 设施存在一定的特殊性。比如,餐饮行业有固定的高峰时段,早、中、晚三餐时段对 IT 架构的稳健性要求极高,如果系统在高峰时段出现问题,对业务的影响直接且迅速。这就要求餐饮行业的 IT 架构和技术支持必须能够应对高峰时段的压力,确保服务的可靠性和连续性。


另一方面,企业在数字化转型的不同阶段,面临不同的需求与挑战。在企业数字化转型的早期阶段,企业更多聚焦于功能性和业务性建设;随着转型进入中期,部分业务开始成型,企业更加关注质量和非功能性需求;而当企业数字化发展到一定程度,对稳定性的要求也随之提高,此时工程团队面临更高的稳定性诉求。


麦当劳中国的数字化转型之路亦如此。在麦当劳中国探索数字化转型的早期阶段,团队采用了一套基于微服务(Microservices)、API 优先(API-first)、云原生(Cloud Native)和无头架构(Headless)的 MACH 架构体系作为“统一的技术语言”来构建技术底座,并强化技术能力。(延伸阅读:《麦当劳中国:打造 MACH 架构的数字化巨无霸》)随后,麦当劳开始线上容灾和多活建设,不仅在技术深度和广度上引入了更复杂的系统依赖和网络拓扑结构,也给系统的验证工作带来了前所未有的挑战和复杂度。

基于餐饮行业的业务特点以及数字化转型的深入,麦当劳对稳定性建设的要求不断提升,并实施包括双活架构在内的多项工程实践。这些实践也给麦当劳质量团队带来新的课题:到底应该如何验证这些实践? 作为质量团队,不仅要确保实施的架构和编码方式能有效解决稳定性问题,还要验证其有效性,并在此基础上更广泛地发现潜在的系统问题。


2023 年,麦当劳引入混沌工程理念,建设了混沌平台以及混沌环境等基建设施。团队通过主动向系统中注入可能引发的故障,来探索系统对故障发生时的承受能力,发现系统中潜在的脆弱环节以及未知隐患。通过实验性的方法,让大家建立对复杂分布式系统抵御突发事件能力的信心,提升麦当劳 APP 系统的弹性和可靠性,保障业务连续性。

麦当劳的混沌工程探索之路:从统一认知到流程规范化


混沌工程理念的诞生最早可以追溯到 2008 年。当时,Netflix 正着手从数据中心迁移到云上,并开始尝试在生产环境中开展一些系统弹性的测试。随后,这一实践过程被称之为混沌工程。Netflix 的成功实践推动了混沌工程在业界的普及。尽管此时麦当劳并未正式引入混沌工程理念,但团队已经前瞻性地进行过相关尝试。随着麦当劳对稳定性建设要求的提高,混沌工程逐渐成为团队关注的焦点。


据介绍,麦当劳的混沌工程实践历程主要分为四个关键阶段。

第一阶段,明确混沌工程引入的必要性


混沌工程作为一种系统化的实践方法,其核心原理在于主动面对并模拟失败。这种失败可能由多种因素引起,涉及多种可能性。在麦当劳的技术栈中,从基础架构(包括服务器和网络)到中间件、数据库,再到应用层,每个层面都可能存在潜在的问题。混沌工程的目的是通过模拟这些潜在的风险,来验证系统的可靠性。

在这一阶段,关键挑战在于如何有效模拟机房、中间件等各类故障,以及如何顺势让团队认识到引入混沌工程的必要性。举例来讲,在模拟机房故障方面,可以从硬件和网络两个维度来进行。在生产环境中,硬件故障可能导致服务器、存储设备或其他硬件组件宕机,可以通过故意关闭某些虚拟机实例或物理服务器,来模拟这种故障。网络故障包括网络延迟、丢包、带宽限制、路由问题等,可以通过故意引入这些网络故障,测试系统在网络不稳定或不可用时的应对能力。模拟中间件故障方面,可以模拟服务依赖故障或是资源耗尽,测试系统在部分服务不可用,以及在资源耗尽时的稳定性。


这些故障模拟能够帮助团队在故障发生时更好地理解和优化系统,从而确保系统能够在各种压力和意外情况下保持可用性。通过这些模拟实践,团队也能够更好地理解混沌工程实践的价值。

第二阶段,统一团队对混沌工程的认知


混沌工程不仅是一项技术实践,更是一种文化和思维方式的转变,要求团队成员接受并理解混沌工程的核心理念,从传统的“避免失败”转变为“面向失败的编程及设计”,主动拥抱故障来提前识别风险。在混沌工程的实施过程中,认知的转变是一大难点。 团队需要建立一种新的思维方式,使内部对混沌工程的认知趋于统一。


为了统一认知,麦当劳组织了一系列内部培训,帮助团队成员理解混沌工程的重要性。同时,麦当劳还积极邀请外部专家分享他们的经验和见解,通过不同行业的混沌工程实践经验来为团队带来更多启发。


最初,这些培训和分享只面向直接负责系统测试和质量保证的质量团队,但麦当劳很快意识到,混沌工程的成功实施需要整个 IT 团队的参与和支持,也因此,麦当劳的混沌工程培训的范围逐渐扩大,最终覆盖到整个 IT 团队,以确保在后续制定流程和规范时,整个 IT 团队都能达成共识。

第三阶段,混沌测试环境及工程平台的构建与混沌实践


质量团队统一认知后,就进入到最关键的实践阶段。在这一阶段,团队开始搭建与生产拓扑匹配的混沌测试环境以及混沌工程工具,并进行混沌测试,探索不同故障场景对系统的影响。


区别于常规功能测试,混沌测试更像是一种逆向思维,二者相辅相成。 在日常的开发流程中,麦当劳 IT 团队先进行功能测试,确保软件的基本功能按预期工作。完成功能测试后,混沌测试被作为敏捷迭代的一部分补充进行,其结果成为上线报告的一部分,确保软件在上线前经过了全面的测试。通过混沌测试,团队能够更系统地识别和解决正常场景以及异常场景下影响系统可靠性的问题,从而提高软件整体质量。

在混沌测试之外,混沌演练也是混沌工程实践中重要的一环。在演练流程和方法上,麦当劳遵循混沌工程的核心理念,分析可能在实际生产中发生的故障,并在混沌环境中重现这些情况。通过这种方式,团队能够测试系统架构的可靠性,并评估面对故障时的发现和处理速度。


为了更好地组织和管理混沌演练,麦当劳 IT 团队还专门成立了混沌演练组委会,负责规划演练窗口以及 BCP(业务连续性计划)各个组件的故障场景,包括双活切换演练和验证。安全性方面,团队准备了一套完全独立的混沌环境,确保演练过程中可能出现的任何问题都不会对日常运营造成影响。

第四阶段,流程规范化与常态化


在确定了混沌工程的实践流程后,麦当劳进一步将这些流程规范化,使其成为日常运营的一部分。目前,麦当劳已经进入混沌工程实践的常态化阶段,混沌测试和混沌演练早已成为团队日常工作的一部分,帮助团队更加从容地应对潜在的系统故障。


自 2023 年底引入混沌工程以来,麦当劳 IT 团队始终遵循混沌工程理念,并进行充分的前期方案讨论,整个实践过程相对顺利。


在双活建设方面,麦当劳通过混沌平台和混沌工程验证了双活架构下的健壮性,不仅关注双活架构,还对非双活架构覆盖的业务高可用性进行了验证。在梳理原子故障库的过程中,由于原子故障库非常庞大,需要确定哪些适合麦当劳的云原生技术架构。为此,麦当劳进行了一些概念验证。通过验证在双活架构下,这些原子故障库的注入是否有效,团队发现一些通用原子故障库并不适用于麦中技术平台,并对此进行相应的改进。


随着双活建设的深入,麦当劳进行过大大小小数百次的混沌演练,其中包括近 20 次的集群级大规模演练,过程中发现了不少系统潜在的脆弱风险点甚至 DevOps、可观测性等平台工具的不足之处,不仅增强了大家对系统应对风险的信心,也提高了团队对故障的响应能力。后续,团队将进一步梳理和完善原子故障库,通过注入故障来模拟系统在异常场景下可能出现的问题。在这个过程中,研发团队可以利用现有的高可用架构来恢复系统,包括双活机房及组件切换、非核心业务降级、异常流量限流熔断、快速扩容等措施。这些措施将帮助麦当劳在面对真实故障时,能够迅速恢复正常运营,确保顾客体验不受影响。

站在工程角度,Day One 就应该考虑引入混沌工程


混沌工程作为一项通过故意在系统中引入故障来测试其弹性和稳定性的实践,有助于建立企业对系统可靠性的信心,并在系统发展的不同阶段持续提升其韧性。


那么,企业在什么时候应该引入混沌工程呢?


“从工程角度来看,理想的情况下,工程团队在 Day One 就应该意识到面向失败的编程及设计的重要性,对应这种工程实践配套就需要引入混沌工程。但在实际实践中,我们往往需要从 ROI 的角度来评估何时进行混沌工程的投入。”麦当劳 IT 团队提到。在项目初期就开始实施混沌工程,可以让团队在设计和架构选择上更加注重系统的弹性和容错能力,提前识别和解决可能导致灾难性后果的问题,从而在系统投入使用前就建立起对系统可靠性的信心。


但现实是,当前国内混沌工程的应用成熟度相对较低,其背后的根本原因就是混沌工程实践的价值难以量化度量。企业需要量化混沌工程带来的价值,包括提升服务可用性和降低故障修复时间,市场上却缺乏成熟的工具和方法。


据介绍,麦当劳采用了多种模型和方法来评估混沌工程实践的效果。其中,最直接的模型就是关注生产中的 P0 和 P1 故障,这些最紧急、重要的故障对业务影响最大。除了这些紧急故障,麦当劳还会关注整个大促期间的“丝滑度”——这是一个综合指标,包括客户感受到的错误问题数量以及整个系统的平稳度。


此外,麦当劳还在试验中的一种名为 ATB(Avaliability To Bussiness)的评估方法。在引入 ATB 评估方法的过程中,麦当劳意识到,纯粹的技术指标对于业务监测而言缺乏直观的意义。例如,高 CPU 使用率、高内存消耗、高延迟等指标虽然能够反映系统的某些性能问题,但它们并不能直接告诉业务团队这些技术问题对业务运营的具体影响。因此,麦当劳尝试采用一种看上去更简单直接的方法(尽管实现起来可能较为复杂)来表达业务稳定性的监测。


这种方法基于对业务的深入理解,通过一个复合公式将系统稳定性和流畅度转化为直观的分数形式,满分为 100 分。该公式综合了各个关键业务链路上的核心指标,包括下单成功率和支付成功率等。根据这个评分系统,80 分以上表示系统运行正常,80 分以下暗示存在问题,而 60 分以下则意味着系统出现故障。这样的评分机制有助于麦当劳快速且直观地把握系统稳健性状况。


尽管麦当劳并未刻意从项目的角度去量化混沌工程实践所带来的经济收益,但混沌工程在提升系统稳健性和故障响应能力方面展示的显著成效,无疑验证了其巨大的价值。


以“88 金粉节”为例,这是麦当劳每年都会举办的一项重要促销活动,对系统稳健性的要求非常高。在“88 金粉节”活动启动前,麦当劳成立了专门的混沌测试小组,从用户体验角度出发,梳理了从 APP 入口到中台,再到 PAAS 层的 API 调用链路。并对每一层的 API 进行限流、熔断、超时等策略梳理和合理性评估。针对非核心链路,混沌测试小组评估了其是否具备降级能力。对于核心场景,如菜单和门店,这些是麦当劳最核心、承载流量最高的业务,前端架构师设计了相应的降级方案。麦当劳团队将服务分为几大类,例如:入口服务(Entry Point 服务)和后端服务(Backend Service,即 Normal Service)。每一类服务对应的故障场景略有不同,需要有针对性地为每类服务设计高可用架构和风险链路,并制定混沌测试方案。


在混沌实验前期,团队首先采集了系统的稳态指标,包括 CPU 使用率、内存使用率、延迟和异常等。然后,团队引入微服务 POD 超时、POD 异常、Redis 异常等故障场景。最后从以下两个方面观察实验结果:

  • 从系统性能表现上观察是否会出现局部或全部级联故障和雪崩问题;

  • 从用户体验方面观察,在故障场景下 APP 是否能够正常点餐。


团队记录这一过程中系统功能和非功能性表现中遇到的问题,并将这些问题纳入迭代开发周期中进行修复,最终提出了一系列系统稳定性保障建议。这些建议不仅被应用到了实际生产环境中,在随后的促销活动中也持续发挥作用。


通过混沌工程实践,麦当劳也能对历史故障和问题进行架构上的改进,并在编码层面进行优化。这些改进和优化措施经过混沌工程的有效验证,帮助麦当劳在大促活动中规避了过往的问题,从而提高系统稳健性。

将混沌工程从工具本身升华为工程师文化


优秀的技术离不开勤加实践,更离不开在实践过程中的灵活运用和适应性改造。麦当劳 IT 团队结合 One Campaign 管理机制,通过专项活动演练提炼出标准流程规范,并将其落地到敏捷开发流程中,为麦当劳的数字化研发体系提供了坚实的保障。


目前,混沌工程在麦当劳已从工具本身升华为工程师文化。事实上,团队在引入混沌工程之初就已经考虑到了这一点。


过往,在常规功能测试中,团队通常更关注功能性需求,而非功能性需求(如系统的可用性、可扩展性和弹性)往往被忽视。但这些非功能性需求直接关系到系统的稳健性和可靠性,其重要性不言而喻。这也是麦当劳将这些非功能性需求归类为混沌测试一部分的原因。麦当劳希望研发人员在工程实践中不仅关注功能性需求,也要提升对非功能性需求的关注。


“我们希望借助混沌工程,让工程师意识到非功能性需求的重要性,并将其内化为对技术追求和技术精进的一部分,慢慢刻到骨子里。这种文化转变不仅仅是通过语言或几次活动来实现,而是要与日常行为紧密结合。混沌工程就像是一种鞭策,提醒工程师意识到非功能性需求的重要性,并在编码和架构开发过程中追求工程技能的提升。”麦当劳 IT 团队提到。


将混沌工程从工具本身升华为工程师文化,标志着麦当劳在数字化转型道路上迈出了重要一步。这一转变不仅加深了麦当劳对数字化的理解,更将数字化文化深植于企业的 DNA 之中,进而将科技能力变成一种本能,融入到每年超过 10 亿人次的服务中,给顾客带来更丝滑的体验,享受更多美味与欢乐。

写在最后


经过一年的实践,麦当劳对混沌工程有了更深刻的理解,为未来也有了一份更清晰的规划。


短期来看,麦当劳计划扩大混沌演练范围,使其成为检测系统可靠性的有效手段。通过混沌平台进行破坏性的尝试,以此来演练围绕可靠性保障的各个层面。包括快速发现问题、解决问题的能力,以及针对问题在技术架构、编码或其他配套流程上的改进。通过混沌演练揭示系统中的漏洞,并继续查找需要补充的地方,以提升系统的整体可靠性。


中长期来看,麦当劳希望也能够在生产环境中进行真正的混沌演练,而不仅仅是小规模试验。这需要团队具备足够的信心以及充分准备,以确保在生产级别上进行混沌演练时能够及时控制风险。


当前,国内外混沌工程的探索实践还处于不同的发展阶段。在国外,一些头部互联网公司在混沌工程方面的探索起步较早,实践也相对成熟,甚至早已将混沌工程融入到工程师文化中。在国内,虽然混沌工程之路起步较晚,但发展速度非常快,尤其是头部互联网公司在这方面的投入十分显著。


现阶段,很多混沌工程实践还依赖于在流程和业务层面来控制风险。展望未来,如果能在工程层面,如 Kubernetes、Service Mesh 等底层技术上有效控制爆炸半径,将更有助于混沌工程的推广和应用。此外,随着技术的进步,混沌工程实践将朝着更加自动化和智能化方向迈进,甚至可以利用机器学习和 AI 算法自动识别系统中的薄弱环节,并智能选择混沌实验方案。

2025-01-17 14:2613404

评论

发布
暂无评论

多版本并行,测试如何做好质量保障?

老张

质量保障 版本迭代

2022年10月《中国数据库行业分析报告》重磅发布!精彩抢先看

墨天轮

数据库 oceanbase Milvus 向量计算 向量数据库

Docker | 容器数据卷详解

甜点cc

Docker 前端 10月月更

华为云,高品质保障企业的等保安全

科技之光

及时恢复,华为云灾备数据解决方案让你无忧办公

科技之光

可适配多企业需求,华为云等保合规安全解决方案选择灵活!

科技之光

TiDB v6.1.0 及 TiUniManager 在 openEuler 22.03 中的部署踩坑实践

TiDB 社区干货传送门

实践案例 管理与运维 安装 & 部署 应用适配 6.x 实践

Rocksdb dynamic-level-bytes测试简单记录

TiDB 社区干货传送门

实践案例 管理与运维

OpenHarmony轻量系统中内核资源主要管理方式

OpenHarmony开发者

OpenHarmony

打造全栈安全防护体系,华为云等保合规解决方案帮企业30天过等保

科技之光

企业信息安全受威胁?且看华为云灾备如何破解

科技之光

2022 云栖大会 | 开源人说预约:听百味技术人生,品激荡开源江湖

阿里云大数据AI技术

阿里云 开源

TiCDC 实践:TiDB 到 TiDB 增量数据迁移

TiDB 社区干货传送门

迁移

华为云灾备服务,如何守护云上数据

科技之光

华为云灾备解决方案,助力企业高效构建安全合规云灾备系统

科技之光

华为云,中小型企业的等保安全专家

科技之光

git-secret:在 Git 存储库中加密和存储密钥(下)

SEAL安全

git 加密 makefile 密钥管理 10月月更

新来个技术总监,仅花2小时,撸出一个多线程永动任务,看完直接跪了,真牛逼!

小小怪下士

Java 程序员 多线程

“程”风破浪的开发者|THREE.JS实现看房自由(VR看房)

知心宝贝

前端 three.js 元宇宙 VR看房 “程”风破浪的开发者

Docker | 部署nginx服务

甜点cc

nginx Docker 10月月更

华为云CDN使能千行百业,业务价值不断凸显!

科技之光

全球累计用户达300万+,华为云桌面综合体验优秀!

科技之光

Hacker 资讯 | 10 月中旬区块链黑客松活动汇总

TinTinLand

创业 defi 区块链、 黑客马拉松 web3、

Docker | 镜像浅析,以及制作自己的镜像

甜点cc

Docker tomcat 10月月更

华为云,助力企业快速省心过等保

科技之光

你的下一个电脑桌面,为何是云桌面?

科技之光

一大波开发者岗位来袭!多家公链、投资机构抛出橄榄枝

TinTinLand

开发者 招聘 程序员、 互联网行业薪资 区块链、

技术强、资源多,华为云等保合规解决方案助力企业快速过等保!

科技之光

万物皆可DAO?一文带你全方位解读DAO类型

One Block Community

区块链 开发者 治理 DAO web3、

深度解决企业传统办公痛点,华为云桌面使能云上办公!

科技之光

十年磨一剑,华为云数据灾备解决方案为你解决后顾之忧

科技之光

向每年服务超过 10 亿人次的系统“发难”,麦当劳的混沌工程实践_企业动态_凌敏_InfoQ精选文章