【译】GitHub 为什么挂?官方的可行性报告为你解答

本文翻译自 GitHub 官方博客《Introducing the GitHub Availability Report》
原文链接:https://github.blog/2020-07-08-introducing-the-github-availability-report/
翻译:HelloGitHub-丫丫 | 校对:HelloGitHub-小鱼干
什么是可用性报告?
从历史上看,GitHub 对影响服务可用性的重大事件会发表事后评论。无论我们是分享新的基础设施投资,还是详细的网站停机时间,我们的信念是,可以通过相互学习共同成长为一个行业。 这个月,我们很高兴介绍下 GitHub 可用性报告。
你能期待什么?
在每个月的第一个星期三,我们将发布一份描述 GitHub 可用性的报告,包括对可能发生的任何事件的描述,并向您介绍我们是如何发展工程系统和响应实践。您会期待这些更新,它包括对已有事件的总结,以及对我们认为是新奇事件的技术解释,并包含帮助世界各地的工程师学习如何大规模改进产品运营的信息。
为什么我们要做可行性报告?
可用性和性能是一个核心特性,包括 GitHub 如何响应服务中断。我们努力设计高可用、容错系统,我们希望这些每月更新可以回忆起 GitHub 高于 99% 的可用时间。当事情不按计划进行时,比起等待分享特别有趣的事件信息,我们更倾向于告知你所有可能影响你的事件。我们的希望是,通过提高我们的消息透明度、分享我们学到的东西,而不是简单地在状态页面上报告停机时间的分钟,从而让每个人都可以从我们的经验中受益。在 GitHub,我们非常诚挚地对待您的这份信任,我们希望这是您帮助我们对不断改进我们的卓越运营和我们的产品功能负责的一种方式。
五月和六月的可用性报告
在 5 月和 6 月,我们经历了四次不同的事件,导致 GitHub.com 缺乏可用性或服务降级。
UTC 5 月 5 日 00:45(持续 2 小时 24 分钟)
在事件发生期间,共享数据库表的自动增量 ID 列超过了 MySQL Integer 类型(Railsint(11)):2147483647 可以表示的大小。当我们试图往列中插入较大整数时,数据库拒绝了该值,Rails 引发了 ActiveModel::RangeError,这导致 API 端的 500s 延迟。
这影响了依赖于获得安装令牌的 GitHub 应用程序。最受影响的 GitHub 内部应用程序包括 Actions、Pages 和 Dependabot。
GitHub 的监控系统当前在表达到主键所用大小的 70% 时会发出警报。我们在扩展我们的测试框架,以包含 int / bigint 外键不匹配的 linter。
UTC 5 月 22 日 16:41(持续 5 小时 09 分钟)
在原定的维护操作(MySQL 主实例失败)期间,在新升级的 MySQL 主服务器上 MySQL 进程经历了一次新的崩溃。为了减轻崩溃带来的影响,我们手动将流量重定向到原始主服务器。但是,崩溃的 MySQL 主服务器已经提供了大约 6 秒的写流量。此时,启动了从新主服务器恢复副本的操作,这大约需要 4 个小时,集群重新配置需要 1 个小时才能重新启用完全读取能力。在这近 5 个小时里,在 web 见面和 API 中看到数据写入到受影响数据库集群之前,用户可能已经观察到了延迟。
我们已经运行了多个内部模拟演习(gameday exercise),以应对类似的拓扑不一致,及继续训练我们的故障转移系统以减少故障恢复时间。
UTC 6 月 19 日 8: 52(持续 51 分钟)
为改进 UI 的更好 A / B 实验工具引入了一种未知的依赖关系,依赖于独立应用提供的特定、动态生成文件的存在。
在应用部署期间,由于上游应用程序限制了较高的检索率,因此很大一部分的应用程序部署无法生成文件。这导致了参与实验的用户中有一定比例会出现应用程序错误。经过检测,我们能够禁用此文件需求,这将恢复对所有用户的服务。
接下来,A / B 和多元实验的配置将在内部缓存,以确保依赖关系的成功传播。
UTC 6 月 29 日 12:03(持续 2 小时 29 分钟)
作为维护的一部分,数据库团队在 6 月 22 日星期一推出了一个更新版本的 ProxySQL。一周后,我们的一个主数据库集群上的 MySQL 主节点出现故障,并被一个新主机自动替换。几秒钟内,新升级的主服务器崩溃。 Orchestrator 的防止互相踢皮球机制阻止了随后的自动故障转移。 在我们手动恢复服务后,新的主服务器又开始耗尽 CPU 资源,并再次崩溃。 为了恢复,我们回滚到 ProxySQL 旧版本并禁用了应用程序中 ProxySQL 新版本所需的变更。 完成此操作后,我们可以允许在主节点上进行写操作而不会崩溃。
我们正在分析应用程序日志、MySQL 核心转储和我们的内部遥测,作为继续调查 CPU 耗尽问题的一部分,以避免类似的故障模式继续。
总结
作为一个组织,我们继续在可行性方面投入大量资金。我们把这里讨论的每一件事视为一个宝贵的机会来学习和成长。我们的系统和流程继续基于这些学习而发展,我们期待着在未来的更新中分享我们的进展。
请按照我们的状态页面进行实时更新,并查看我们的博客下个月的可用性报告。
2020 年 7 月 2 日
HelloGitHub 推出的「译文亦舞」系列
如果小伙伴们有什么有趣的英文文章也可以留言把链接发给我(题材:GitHub、编程、程序员)。

关注我们的公众号,加入我们吧
【译】GitHub 为什么挂?官方的可行性报告为你解答的更多相关文章
- 针对Cloud-init的可行性报告
by hyc 针对Cloud-init的可行性报告 一.Cloud-init研究进展: (1)ubuntu镜像: 已在版本为ubuntu-server-14.04-amd64上实现了修改主机名和用户密 ...
- GitHub 发布了官方 App,还打算冰封你的代码一千年
11 月 13 日,GitHub Universe 2019 开发者大会上,公布了大量新功能,包括发布 GitHub 移动版.GitHub Actions 和 Packages 正式版上市.重新设计了 ...
- GitHub Pages站点官方宣布开始使用HTTPS
导读 数百万人依靠GitHub Pages,将其作为他们的网站主机,除此之外,还有数百万人每天访问这些网站.为了更好地保护到GitHub Pages站点的通讯,也为了鼓励在因特网上更广泛地采用HTTP ...
- GIT笔记:GITHUB教程【官方自译版】
GIT笔记:将项目发布到GITHUB GITHUB是什么 GitHub是版本控制和协作的代码托管平台.它可以让你和其他人在任何地方一起工作. 1.创建一个新的仓库 存储库通常用于组织单个项目.存储库可 ...
- GitHub官方Markdown语法教程
说明:Markdown随着编译器不一样,语法也都不一样,但这份GitHub提供的官方教程,基本学会这份就够了. https://guides.github.com/features/mastering ...
- storm源码之storm代码结构【译】【转】
[原]storm源码之storm代码结构[译] 说明:本文翻译自Storm在GitHub上的官方Wiki中提供的Storm代码结构描述一节Structure of the codebase,希望对正 ...
- storm源码之storm代码结构【译】
storm源码之storm代码结构[译] 说明:本文翻译自Storm在GitHub上的官方Wiki中提供的Storm代码结构描述一节Structure of the codebase,希望对正在基于S ...
- GitHub 风格的 Markdown 语法
GitHub 风格的 Markdown 语法 [译] GitHub 风格的 Markdown 语法 Original: GitHub Flavored Markdown - GitHub Help T ...
- Win10 UWP vs add github
vs github 插件 教程 官方教程 点击查看存储库,跳转到 DemoHttp for github
随机推荐
- CentOS 7.0 x86_64官方正式版系统(64位)
下载地址 http://www.xitongzhijia.net/linux/201603/69219.html
- 10个Vue开发技巧助力成为更好的工程师·二
优雅更新props 更新 prop 在业务中是很常见的需求,但在子组件中不允许直接修改 prop,因为这种做法不符合单向数据流的原则,在开发模式下还会报出警告.因此大多数人会通过 $emit 触发自定 ...
- Teambition如何使用二次验证码/虚拟MFA/两步验证/谷歌验证器?
一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 Teambition如何使用二次验证码/虚拟MFA/两步验证/谷歌验证器? 二次验证码小程序于谷歌身份验证器APP的优势 1 ...
- 一文入门DNS?从访问GitHub开始
前言 大家都是做开发的,都有GitHub的账号,在日常使用中肯定会遇到这种情况,在不修改任何配置的情况下,有时可以正常访问GitHub,有时又直接未响应,来一起捋捋到底是为啥. GitHub访问的千层 ...
- 旧的成功的AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="htt ...
- MySQL 8.0.20 安装教程图文详解(windows 64位)
MySQL 8.0.20 安装教程图文详解(windows 64位) 更新时间:2020年05月09日 15:09:04 转载 作者:瘦肉粥不加糖 这篇文章主要介绍了MySQL 8.0. ...
- JS 原生ajax写法
<script> //step1.创建XMLHTTPRequest对象,对于低版本的IE,需要换一个ActiveXObject对象 var xhr; if (window.XMLHttpR ...
- 如何阅读一本书——分析阅读Pre
如何阅读一本书--分析阅读Pre 前情介绍 作者: 莫提默.艾德勒 查尔斯.范多伦 初版:1940年,一出版就是全美畅销书榜首一年多.钢铁侠Elon.Musk学过. 需要注意的句子: 成功的阅读牵涉到 ...
- 详解 MySQL 面试核心知识点
一.常见存储引擎 1.1 InnoDB InnoDB 是 MySQL 5.5 之后默认的存储引擎,它具有高可靠.高性能的特点,主要具备以下优势: DML 操作完全遵循 ACID 模型,支持事务,支持崩 ...
- Linux系统的基本操作
20200727 Linux目录结构 基本介绍 Linux的文件系统是采用层级式的树状结构,在此结构中的最上层是/根目录 tip1:在Linux世界里,一切皆是文件 示例 /bin: bin是Bina ...