主要观点:Canva 发生的一起事件,由部署新页面版本触发,虽新版本无问题,但客户下载新 JS 文件引发系统行为异常,导致 CDN 路由错误、高延迟使客户端同步等待、大量请求同时到达 API 网关,加之 API 网关的性能回归和异步模型中的线程阻塞问题,最终使系统过载,负载均衡器变为过载均衡器,Linux OOM 杀手快速终止运行容器,导致系统崩溃。Canva 工程师采取增加容量和减少负载的策略使系统恢复,此事件凸显自动化系统使问题更难处理,而人类操作员通过利用 Cloudflare 防火墙功能改变系统行为,展现了系统的适应性和 resilience 的重要性。
关键信息:
- 事件触发:Canva 部署新编辑器页面版本,客户下载新 JS 文件引发后续问题。
- 系统故障:Cloudflare 路由错误致亚洲用户延迟增加,客户端同步等待,大量请求同时到达 API 网关,API 网关性能回归和线程阻塞导致处理能力下降。
- 系统崩溃:负载均衡器使健康节点过载,OOM 杀手快速终止容器,系统完全崩溃。
- 恢复策略:工程师采取增加容量和减少负载的策略,手动增加任务数量但效果不佳,利用 Cloudflare 防火墙临时阻止流量,逐步恢复流量。
- 经验教训:自动化系统在处理此类情况时效果不佳,人类操作员通过动态配置系统功能改变系统行为,提升系统的适应性和 resilience 至关重要,且操作员对系统的了解程度影响应对能力。
重要细节:
- Cloudflare 私有骨干网中存在未识别的路由问题,导致新加坡和弗吉尼亚北部间的流量误走公共网络,造成数据包丢失和延迟增加。
- Canva API 网关采用 async 模型,因对第三方库的调用存在线程阻塞问题,降低了处理能力。
- 负载均衡器在系统接近容量时,会将流量重新分配到健康节点,导致健康节点过载,形成正反馈循环。
- 工程师利用 Cloudflare 防火墙临时阻止流量,逐步恢复流量,避免系统再次崩溃。
- 系统的 competence envelope 概念, resilient 系统能在超出设计能力时改变行为以处理事件,而 brittle 系统则不能。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。