写点什么

从锁机制、负载饱和到 CDN 故障: Canva 宕机事故复盘

作者:Renato Losio

  • 2025-03-07
    北京
  • 本文字数:1682 字

    阅读完需:约 6 分钟

从锁机制、负载饱和到 CDN 故障: Canva 宕机事故复盘

Canva 工程团队最近发布了对去年 11 月宕机事件的事后分析报告,详细说明了 API 网关故障的情况以及在这次事件中汲取的教训。Canva 的首席技术官 Brendan Humphreys 承认:


“2024 年 11 月 12 日,Canva 遭遇了一次严重的宕机事故,影响了 canva.com 的正常访问。从 UTC 时间上午 9 点 08 分至大约 10 点,canva.com 都无法访问。此次事故是由我们的 API 网关集群故障导致的,多个因素共同作用引发了这一故障,包括 Canva 编辑器的一次软件部署、锁机制问题,以及我们的内容分发网络(CDN)提供商 Cloudflare 的网络问题。”


Canva 的编辑器是一个单页应用程序,每天会多次部署。客户端设备通过 Cloudflare 的分层缓存系统获取新资源。然而,CDN 提供商内部的一个路由问题扰乱了两个区域之间的流量。因此,当资源在 CDN 上可用时,所有客户端同时开始下载。这导致了流量的突然激增,超过 27 万个待处理请求同时进行。Humphreys 解释道:


“通常情况下,错误数量增加会使我们的金丝雀测试系统中止部署。但在这次事件中,由于请求没有完成,所以没有记录到错误。结果,超过 27 万用户对 JavaScript 文件的请求都在同一缓存流中等待。”



图注:Canva API 网关架构,来源:Canva 工程博客


爱彼迎(Airbnb)的软件工程师 Lorin Hochstein,同时也是《冲浪复杂性》(Surfing Complexity)博客的作者,将这次宕机事件描述为一个关于负载饱和和系统弹性的故事。Hochstein 强调:


“这次事件并非由新版本代码中的漏洞引发,甚至也不是由该版本代码中某些意外的突发行为导致的。虽然这次事件是由一次部署引发的,但与前一版本的代码变更并无关联。实际上,是客户端下载新版本后出现的系统行为导致了宕机。”


突然间,所有等待中的设备同时加载新的对象面板,导致 API 网关每秒收到超过 150 万个请求,流量激增幅度约为典型峰值负载的三倍。这股巨大的流量浪潮使负载均衡器变成了 “过载均衡器”,将原本健康的节点拖垮。Hochstein 补充道:


“这是一个典型的正反馈循环例子:出现故障的任务越多,健康节点接收的流量就越大,这些任务也就越有可能出现故障。”


由于自动缩放机制未能跟上流量变化,API 网关任务因内存耗尽开始出现故障,最终导致整个系统完全崩溃。为解决这一问题,Canva 团队试图手动增加容量,同时降低节点负载,但效果参差不齐。当在 CDN 层完全阻断流量后,情况才终于得到缓解。Humphreys 详细说道:


“UTC 时间上午 9 点 29 分,我们在 Cloudflare 上添加了一条临时防火墙规则,在 CDN 层阻断了所有流量。这阻止了任何流量到达 API 网关,使新任务能够启动,而不会被涌入的请求压垮。随后,我们将 canva.com 重定向到状态页面,以便让用户清楚地了解我们正在遭遇故障。”


接着 Canva 的工程师们逐步增加流量,大约 20 分钟后完全恢复了服务。在 HackerNews 热门讨论帖中,John Nagle 评论道:


“这个问题类似于电力公司所说的‘负载吸收’。停电后恢复供电时,许多设备在启动时会消耗更多电力。(……)因此,恢复电网供电要分区进行,而不是一次性全部恢复。”


虽然系统最初满足了所有功能需求,但自动化系统却加剧了问题的严重性。Hochstein 指出:


“这就需要事故响应人员调整系统行为,改变其运行方式,使系统恢复到正常状态。(……)这是系统弹性的一个经典案例,即在系统进入非设计运行状态时,采取行动重新配置其行为。”


Humphreys 在领英(LinkedIn)上总结道:


“在 Cloudflare 能力出众且乐于助人的合作伙伴协作下,我们花了一些时间才弄清楚事件全貌。(……)这是一个引人入胜的故事,涉及数据包丢失、缓存动态变化、流量激增、线程争用和任务余量等问题。”


为最大程度降低未来发生类似事件的可能性,该团队着重改进了事故响应流程,包括制定流量阻断和恢复的操作手册,以及增强 API 网关的弹性。


关于作者


Renato Losio,Renato 作为云架构师、技术主管和云服务专家,拥有丰富的经验。目前,他居住在柏林,担任首席云架构师开展远程工作。他主要感兴趣的领域包括云服务和关系型数据库。他是 InfoQ 的编辑,也是经过认证的 AWS Data Hero。


原文链接:


https://www.infoq.com/news/2025/02/canva-incident-report/

2025-03-07 15:009990

评论

发布
暂无评论

6元自助洗车既能省钱还能赚钱?

共享电单车厂家

自助洗车加盟 6元自助洗车 车白兔自助洗车

妙!JMeter/Pytest/Ginkgo 和自建测试平台这样接入 Zadig

Zadig

DevOps 云原生 自动化测试 CI/CD

“双碳”背后的硬核存储(下)

天翼云开发者社区

Apache Knox SSO 及在移动云 EMR 中的实践

移动云大数据

MapReduce服务

“双碳”背后的硬核存储(上)

天翼云开发者社区

Spring Cloud Alibaba 开源之夏,最后 7 天倒计时

阿里巴巴云原生

阿里云 云原生 spring cloud alibaba 开源之夏

Java中的线程到底有哪些安全策略

华为云开发者联盟

Java 线程 高并发 线程安全 并发容器

英特尔On产业创新峰会:脚踏实地挖掘每一分性能潜能,着眼未来保证PC产业可持续发展

科技新消息

天翼云电脑和企业安全“锁”了

天翼云开发者社区

大前端技术的边界在哪里?

博文视点Broadview

GaussDB(DWS) NOT IN优化技术解密:排他分析场景400倍性能提升

华为云开发者联盟

数据库 GaussDB(DWS) 排他分析 NOT IN

弱网优化,GCC 动态带宽评估算法(内附详细公式)

融云 RongCloud

通信系统 链路 网络管理

加盟共享洗车多少钱?投入大吗?

共享电单车厂家

加盟共享洗车 自助洗车加盟费用

Java中观察者模式与委托,还在傻傻分不清

华为云开发者联盟

Java 观察者模式 委托 事件执行者

重磅发布 | Serverless 应用中心:Serverless 应用全生命周期管理平台

阿里巴巴云原生

阿里云 Serverless 云原生 应用中心

2022年第1季度中国网络零售B2C市场交易规模达16988.5亿元

易观分析

网络零售

最佳实践 | 用腾讯云AI人脸融合实现云毕业照推广活动小程序

牵着蜗牛去散步

腾讯 技术实践 腾讯云AI 人脸融合 云毕业照

开源之夏IoTDB项目宣讲会落幕,你关心的问题这里都有

Apache IoTDB

时序数据库 Apache IoTDB 开源之夏

为什么越来越多人选择自助式洗车

共享电单车厂家

自助洗车加盟 车白兔自助洗车 自助式洗车

模块一

Geek_2ce415

安全感何止“亿”点 看云电脑如何保障企业云网安全

天翼云开发者社区

AliAGC 自动增益控制算法:解决复杂场景下的音量问题

阿里云CloudImagine

算法 3A 音频

TiDB 冷热存储分离解决方案

TiDB 社区干货传送门

DevOps 向业务进阶,BizDevOps 要如何实现?

飞算JavaAI开发助手

模块一作业

joak

【科普】如果程序员穿越到古代当皇帝,会发生什么?

阿里巴巴云原生

阿里云 云原生 消息队列 EventBridge

国内首批|观测云获得信通院 “可观测性平台技术能力”最高级认证!

观测云

可观测性 可观测

宜搭小技巧|海量数据管理难?这招帮你事半功倍

一只大光圈

钉钉宜搭

共享自助洗车多少钱一次?怎么收费

共享电单车厂家

自助洗车加盟 自助洗车多少钱一次 共享自助洗车多少钱 自助洗车怎么收费

LSM树读写放大问题及KV分离技术解析

移动云大数据

HBase LSM树

开放报名 | Serverless 技术进阶研读班,碎片时间提升技术新方式

阿里巴巴云原生

阿里云 Serverless 云原生 研读版 活动报名

从锁机制、负载饱和到 CDN 故障: Canva 宕机事故复盘_AI&大模型_InfoQ精选文章