跳至主要内容

5 月 30 日事件更新

5 月 30 日(星期一)UTC 时间 22:12,Deno 公司提供的多项服务发生 70 分钟的服务中断。在此期间,Deno Deploy 托管的项目(包括许多 Deno Land Web 资产)在某些地区没有响应;此外,部署新 Worker 的尝试也会失败。

我们已得出结论,此次中断是由我们的服务发现数据库 (etcd) 内存不足引起的。这篇文章详细介绍了究竟发生了什么、我们如何恢复系统以及我们正在采取哪些措施来防止将来再次发生这种情况。

所有服务现在都已恢复正常运行。没有数据丢失。我们认真对待此类中断,并对由此造成的不便表示诚挚的歉意。

影响

在 70 分钟的窗口期内,Deno Deploy 管理仪表板 https://dash.deno.com/ 不可用。此外,对 Deno Deploy 项目(包括 deno.com、deno.land doc.deno.land、lint.deno.land、deno.news、examples.deno.land)的请求在某些地区会失败。

Subhosting 流量未受影响,除了事件结束前后出现了一些延迟增加。

事件时间线

UTC 时间 22:12,针对整个 Deno Deploy 网络启动了负载测试。一分钟后,UTC 时间 22:13,负载测试成功结束。

UTC 时间 22:15,我们的正常运行时间监控检测到某些 Deno Deploy 托管的资产不可用,并触发警报。

UTC 时间 22:25,发现 etcd 集群已解体。多个实例卡在重启循环中,因为 etcd 守护程序在启动后不久就耗尽了 VM 上的所有可用 RAM,随后被 OOM killer 终止。

UTC 时间 22:50 至 23:01 之间,使用具有更多可用内存的不同 VM 实例大小重新创建了 etcd 集群。

UTC 时间 23:25,我们网络中的所有服务都已向新的 etcd 集群注册,系统再次正常运行。

根本原因

在负载测试期间,Deno Deploy 基础设施自动扩展以处理增加的负载。当负载测试结束后,基础设施缩减。这触发了对 etcd 集群的大量更新,etcd 集群充当我们的服务发现数据库。

在处理这些更新时,etcd 守护程序使用的内存超过了 VM 上可用的内存。这触发了 Linux OOM killer 终止 etcd 守护程序。由于多个 etcd 实例同时宕机,仲裁丢失,服务发现数据库变得不可用。

下一步是什么?

etcd 集群现在使用具有更多可用内存的不同 VM 实例大小。

我们正在添加额外的 etcd 健康检查,并且我们将设置警报,以便在 etcd 内存使用量接近限制时通知我们。