【译】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
随机推荐
- 写给.NET开发者的Python教程(二):基本类型和变量
从本文开始,我们就要正式了解Python的语法特性了,这章主要介绍基本类型和变量,开始之前先介绍下Python中的标准输入输出. 标准输入输出 前文举过TwoSum问题的例子,但是没有讲到标准输入输出 ...
- 题解 洛谷 P3710 【方方方的数据结构】
因为有撤销操作,所以修改操作可能会只会存在一段时间,因此把时间看作一维,被修改的序列看作一维. 可以把操作都离线下来,对于每个修改操作,就是在二维平面上对一个矩形进行修改,询问操作,就是查询单点权值. ...
- 小书MybatisPlus第6篇-主键生成策略精讲
本文为mybatis系列文档的第6篇,前5篇请访问下面的网址. 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总结 小 ...
- HTTP Keep-Alive的作用
作用: Keep-Alive:使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接.Web服务器,基本上都支持HTTP Keep-Alive ...
- Android实现EditText插入表情、超链接等格式
参考:https://www.jianshu.com/p/84067ad289d2 参考:https://www.jianshu.com/p/d82ac2edc7e8
- RHEL7配置ip地址
通过修改ifcfg-eno16777728配置文件来修改配置ip 网卡命令格式:eno16777728 en:代表enthernet(以太网) o:代表onboard(内置) 16777728:是主板 ...
- luogu P2304 [NOI2015]小园丁与老司机 dp 上下界网络流
LINK:小园丁与老司机 苦心人 天不负 卧薪尝胆 三千越甲可吞吴 AC的刹那 真的是泪目啊 很久以前就写了 当时记得特别清楚 写到肚子疼.. 调到胳膊疼.. ex到根不不想看的程度. 当时wa了 一 ...
- 5.29 省选模拟赛 树的染色 dp 最优性优化
LINK:树的染色 考场上以为这道题要爆蛋了 没想到 推出正解来了. 反正是先写了爆搜的 爆搜最近越写越熟练了 容易想到dp 容易设出状态 f[i][j]表示以i为根的子树内白色的值为j此时黑色的值怎 ...
- luogu P4284 [SHOI2014]概率充电器 期望 概率 树形dp
LINK:概率充电器 大概是一个比较水的题目 不过有一些坑点. 根据期望的线性性 可以直接计算每个元件的期望 累和即为答案. 考虑统计每一个元件的概率的话 那么对其有贡献就是儿子 父亲 以及自己. 自 ...
- 4.24 省选模拟赛 欧珀瑞特 主席树 可持久化trie树
很容易的一道题目.大概.不过我空间计算失误MLE了 我草草的计算了一下没想到GG了. 关键的是 我学了一个dalao的空间回收的方法 但是弄巧成拙了. 题目没有明确指出 在任意时刻数组长度为有限制什么 ...