GitHub可用性报告:2021年5月

斯科特·桑德斯照片

介绍

今年5月,我们经历了两起事件,导致API请求、GitHub Pages、GitHub Actions和GitHub Packages服务,特别是GitHub Packages Container注册服务的严重影响和可用性状态下降。

5月8日06:46 UTC(46分钟)

事件是由底层MySQL数据库失败引起的,这导致GitHub容器注册服务的一些操作超时。在此事件中,一些在UI中查看包或通过“docker push”和“docker pull”与注册中心交互的客户在工程团队调查该事件时可能经历了失败。在对我们的一个数据库副本执行故障转移后,受影响的系统被正确地恢复。

我们的内部工程团队现在正在确定工作的优先级,这将有助于确保在此类潜在中断再次发生时减少对客户的影响。这项工作包括创建内部文档、仪表板和增强的警报,以快速分类操作失败的原因。我们还将继续积极维护和增加不同区域和可用性区域的副本,作为防止意外区域中断的一道防线。

5月16日07:17 UTC(持续9小时48分钟)

此事件是由于范围令牌的外键超过了最大INT32,这导致GitHub Actions和GitHub Pages的高失败率。它也阻止了一些对GitHub API的操作和低级git命令的访问,比如“push”和“pull”,使用范围令牌。我们通过长期运行的模式迁移将外键更改为INT64来缓解这一问题。

一旦外键迁移成功,内部工程团队就会慢慢地删除存储在缓存层中无效的令牌记录。在删除这些缓存的记录之后,新创建的API令牌能够生成新的记录,并且API调用能够按照预期恢复工作。

警报和检测已经就绪,可以帮助防止数据库中的整数溢出。不幸的是,这些机制在这种情况下是不够的,因为它是一个外键,早在我们的毛。作为回应,我们正在手动审计所有INT32列,并研究对自动化的进一步改进,以帮助防止此类问题继续发生。

鉴于这种溢出的性质,在一个存储库上使用的单个GitHub Action在短时间内收到了未经授权的访问授权。我们撤销了这些授权,并确认没有通过在此存储库中使用此Action而获得未经授权的访问。

我们的内部工程团队正在积极地努力减少这类问题在未来发生的影响和可能性。这项工作包括防止数据库不一致的工具和改进的警报以允许更快的修正。

总之

从我们的开源版本GitHub工件出口国让我们采纳OpenTelemetry sdk,您可以了解更多关于我们正在改进的内部开发工具和基础设施的信息GitHub工程博客