Canva工程团队最近发布了他们的 验尸 在他们去年11月发生的停电中,详细介绍了API门户故障和事件期间所学到的教训。 布伦丹·汉弗莱斯,帆布的首席技术官,承认:

2024年11月12日,Canva经历了一场关键的停电,影响了Canva.com的可用性。从UTC上午9:08到UTC大约上午10:00,Canva.com不可用。这是由于我们的API网关群集失败引起的,这是由于多种因素而失败的,包括Canva的编辑器的软件部署,锁定问题以及我们的CDN提供商CloudFlare中的网络问题。

Canva的编辑器是一个单页应用程序,每天多次部署,客户设备使用分层的缓存系统通过CloudFlare获取新资产。但是,CDN提供商中的一个路由问题破坏了两个区域之间的流量。结果,当资产在CDN上可用时,所有客户都开始同时下载它们。这导致了突然的激增,同时完成了270000多个悬而未决的请求。汉弗莱斯解释说:

通常,错误的增加将导致我们的加那部系统中止部署。但是,在这种情况下,由于请求未完成,因此没有记录错误。结果,超过270,000多个用户要求在同一缓存流上等待JavaScript文件。

洛林·霍奇斯坦(Lorin Hochstein),Airbnb的员工软件工程师,以及冲浪复杂性博客的作者,将中断描述为 饱和和弹性的故事。高石头亮点:

突然,新对象面板同时在所有等候设备上同时加载,导致每秒150万个请求到API网关,大约是典型峰值负载的三倍。这种压倒性的波浪使负载平衡器变成了“超负荷平衡器”,将健康的节点变成了不健康的节点。霍奇斯坦补充说:

这是一个积极反馈循环的一个典型例子:不健康的任务越多,健康节点收到的流量就越多,这些任务的可能性也越大。

随着自动化的步伐,API网关任务由于记忆力耗尽而开始失败,最终导致完全崩溃。为了解决这个问题,Canva的团队试图手动增加容量,同时减少节点上的负载,从而取得不同的结果。当CDN层完全阻塞流量时,情况最终得到了缓解。汉弗莱斯的详细信息:

UTC上午9:29,我们添加了一项临时的Cloudflare防火墙规则,以阻止CDN的所有流量。这阻止了到达API网关的任何流量,允许新任务启动而不会被传入的请求淹没。后来,我们将Canva.com重定向到我们的状态页面,以向用户清楚地表明我们正在经历事件。

帆布工程师逐渐增加了交通,大约在20分钟内完全恢复了交通。在一个流行中 黑客 线, 约翰·纳格尔(John Nagle) 评论:

此问题类似于电力公司称之为“负载装饰”。停电后,当电源重新打开时,有许多负载在启动时吸引了更多的功率。 (…)因此,提出电网是由部分完成的,而不是一次。

尽管最初满足了所有功能要求,并且自动化系统加剧了该问题,但Hochstein强调:

事件响应者可以适应系统的行为,以改变其功能的方式以使其恢复健康状态。 (…)这是弹性的典型例子,即在进入最初设计的状态时重新配置系统的行为。

汉弗莱斯 总结 是LinkedIn:

完整的图片花了一些时间与我们在Cloudflare(…)中非常有能力且有帮助的合作伙伴进行协调,一个引人入胜的故事,涉及丢失的数据包,缓存动态,流量尖峰,线程争夺和任务净空。

为了最大程度地减少未来发生类似事件的可能性,该团队专注于事件响应过程的改进,包括用于交通障碍和恢复的运行手册,以及提高API Gateway的弹性。

1738994889
2025-02-08 05:19:00
#锁定饱和度和CDN网络问题如何使Canva降低

Leave a Reply

Your email address will not be published. Required fields are marked *