9月23日事件更新
周四世界标准时间3:11,Deno 公司提供的多项服务出现了35分钟的服务中断。在此期间,托管在 Deno Deploy 上的项目以及 deno.land 网站均无响应。我们得出结论,此次中断是由于一次意外的数据库维护事件造成的。本文将详细说明具体发生了什么、我们如何恢复系统以及未来将采取哪些措施来防止此类事件发生。
目前所有服务均已恢复正常运行。没有数据丢失。我们对这类中断事件非常重视,并对造成的不便深表歉意。
事件时间线
世界标准时间3:11,托管在 Google Cloud Platform 上的主 Postgres 数据库开始了一次意外维护事件。
世界标准时间3:13,自动化警报触发,提示 deno.land/std 的请求失败。
世界标准时间3:32,数据库维护完成,但最终处于未知故障状态。
世界标准时间3:48,数据库服务器因之前的故障自动重启,警报解除。
根本原因
Deno Deploy 拥有一主 Postgres 数据库,该数据库托管在 Google Cloud Platform 上。此数据库用于存储 Deno Deploy 运行其服务所需的各种数据。该数据库以高可用方式设置,当主数据库发生故障时,可以故障转移到备用副本。
世界标准时间3:11,Google Cloud Platform 对主 Postgres 数据库开始了一次意外维护事件。在维护事件期间,无法进行故障转移。这意味着主数据库无法进行读写操作,导致访问此数据库的 Deno Deploy 服务出现故障。
维护事件结束后,数据库服务器自动重启,所有使用主数据库的服务都得以恢复。
影响
在这35分钟内,Deno Deploy 项目的请求失败,包括对 deno.land/x 和 deno.land/std 的请求。尝试从 /x 或 /std 下载模块的 Deno 程序出现故障。Deno Deploy 管理仪表盘(位于 https://dash.deno.com/)和 Deno Deploy GitHub 集成也无法使用。
后续计划?
我们正在与 GCP 联系,以确定此次维护事件的根本原因,以及数据库服务器为何需要如此长时间才能恢复。作为临时措施,我们已暂停了计划中的数据库维护,直到我们确定一个永久解决方案来防止此类中断。此外,我们正在研究解决方案,以使我们的服务对主数据库故障更具弹性。