跳至主要内容
Deno 2 终于来了 🎉️
了解更多

5 月 30 日事件更新

5 月 30 日(星期一)协调世界时 22:12,Deno 公司提供的几项服务发生了 70 分钟的服务中断。在此期间,托管在 Deno Deploy 上的项目,包括许多 Deno Land 网站,在某些地区无法响应;此外,部署新工作者的尝试也会失败。

我们已确定此次中断是由于我们的服务发现数据库 (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)的请求在某些地区也会失败。

除事件结束时出现的一些延迟外,子托管流量没有受到影响。

时间线

协调世界时 22:12,对整个 Deno Deploy 网络进行了负载测试。一分钟后,即协调世界时 22:13,负载测试成功结束。

协调世界时 22:15,我们的正常运行时间监控检测到一些 Deno Deploy 托管的网站无法访问,并触发了警报。

协调世界时 22:25,发现 etcd 集群已崩溃。多个实例陷入重启循环,因为 etcd 守护进程在启动后不久便用尽了虚拟机上的所有可用 RAM,随后被 OOM 杀手终止。

协调世界时 22:50 至 23:01 之间,使用具有更多可用内存的不同虚拟机实例大小重新创建了 etcd 集群。

协调世界时 23:25,我们网络中的所有服务都在新 etcd 集群中注册,系统恢复正常运行。

根本原因

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

在处理这些更新时,etcd 守护进程使用的内存超过了其运行的虚拟机上的可用内存。这触发了 Linux OOM 杀手终止 etcd 守护进程。由于多个 etcd 实例同时停止运行,因此失去了仲裁,导致服务发现数据库不可用。

下一步

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

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