Canva 故障:另一个关于饱和性和韧性的故事

Canva 故障:另一个关于饱和性和韧性的故事

Hacker News 摘要

原标题:The Canva outage: another tale of saturation and resilience

这篇文章由 Canva 的首席技术官 Brendan Humphries 提供,详细记录了 Canva 遭遇的一个重大故障,探讨了饱和性与系统韧性的问题。事件触发于 Canva 部署了新版本的编辑页面。值得注意的是,新版本本身没有任何缺陷,事件并非由代码中的错误引发,而是用户下载新版本后导致的系统行为变化。

这次故障的根本原因在于 Cloudflare,作为其内容分发网络(CDN),Cloudflare 的流量管理系统中存在过时的规则,导致用户的数据流量错误地经过公共互联网,而不是专用光纤线路。这一错误造成了显著的数据包丢失,导致亚洲用户在访问新 JavaScript 文件时经历了高延迟。

随着用户请求的增加,超过 27 万个请求由于未能顺利完成而在同一缓存流上等待。这种高延迟使得用户接连发起请求,但 CDN 仍未准备好相应文件,进而出现了请求积压。当缓存中的文件下载完成后,所有等待请求同时发出,导致 API 网关的请求达到每秒 150 万次,是正常峰值负载的三倍。这一过程被称为“雷鸣群体”效应。

Alternatively, Canva 的 API 网关也面临已知的性能问题,该问题未能在故障发生前得到修复。由于网关使用了异步模型,其请求处理效率依赖于非阻塞操作,但在此事件中,由于某次库调用发生了阻塞,极大地降低了服务的吞吐量,进一步加剧了故障。

故障导致的 API 网关无法及时处理请求,从而使负载均衡器试图向已经超负荷的任务发送更多请求,形成了一个恶性循环。当目录临界点超出时,Linux 的 OOM(内存溢出)杀手自动终止运行中的容器,加剧了故障蔓延。

在此危机中,Canva 工程师采取了增大任务数量和减少负载两种方案,但由于 OOM 杀手的快速反应,手动扩容未能有效解决问题。最终,他们使用 Cloudflare 的防火墙规则暂时阻断了流量,成功减轻了 API 网关的负荷,给新任务的启动留出了空间。

在流量逐渐恢复中,Canva 工程师采取了谨慎的策略,逐步增加流量,以避免系统再次陷入不健康状态。该事件展示了面对复杂系统故障时,人类操作员的作用以及动态配置能力的重要性。

文章总结指出,尽管系统存在性能缺陷,但功能上依然能够正确响应请求。这表明,在面对高负载时,性能问题往往更加隐秘且难以检测,因此增强系统的适应性能力显得尤为重要。工程师们意识到了动态配置和操作知识的重要性,并计划建立详细的应急响应手册,以提升未来应对类似事件的能力。


原文:https://surfingcomplexity.blog/2024/12/21/the-canva-outage-another-tale-of-saturation-and-resilience/

评论:https://news.ycombinator.com/item?id=42676529

Report Page