简体中文
事后分析:用户登录时发生了意外的 500 错误
2024年7月18日身份验证服务返回意外500错误的事件报告。
2024年7月18日身份验证服务返回意外500错误的事件报告。
2024年7月18日,Logto Cloud 的身份验证服务发生了 500 内部服务器错误,导致服务中断。
在最近的 Cloud 部署期间,数据库架构中的一个重大更改导致登录体验 API 在预发布和生产环境之间的过渡过程中失败。
我们目前正在开发一个名为“自定义 UI” 的新功能,允许用户使用他们自己的网页来自定义 Logto 的登录体验。此功能需要在 sign-in-exp 表中添加新列以存储自定义 UI 配置。
由于开发过程中的需求变化,该功能的发布被推迟,但架构更改的第一部分已经在几周前部署到生产环境,尽管尚未投入使用。 数据库列的更新是在 此 PR 中引入的。
不幸的是,此更改不具有向后兼容性,导致旧代码的 API 请求在与新数据库通信时失败。
部署新版本的 Logto Cloud 时,我们首先将其部署到预发布环境,然后交换预发布和生产环境。 过程如下:
然而,两个环境共享同一个数据库,整个过程需要时间。所以在数据库更新和环境交换之间的时间窗口中,在线用户仍然处于生产环境的旧代码,但尝试与新数据库通信。
这是事件的根本原因,也是为什么问题在 35 分钟内自动解决的原因。
我们确实有一个 CI 任务来检查数据库更改的向后兼容性。然而,以前合并 PR 之前不要求通过 CI 检查。这是因为大多数情况下开发阶段通常在几个冲刺内较短,而架构更改的第一和第二部分通常包含在同一发布阶段。 这次,功能发布被推迟,将架构更改分布在两次发布中。开发人员认为 CI 失败是预期的,并通知审核人员这不应阻止 PR 的合并。 确实存在沟通差距,最终在未提供任何必要的向后兼容性支持的情况下合并了 PR。