本文翻译自 GitHub 官方博客《Introducing the GitHub Availability Report》

原文链接:https://github.blog/2020-07-08-introducing-the-github-availability-report/

作者:Keith Ballinger

翻译: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 为什么挂?官方的可行性报告为你解答的更多相关文章

  1. 针对Cloud-init的可行性报告

    by hyc 针对Cloud-init的可行性报告 一.Cloud-init研究进展: (1)ubuntu镜像: 已在版本为ubuntu-server-14.04-amd64上实现了修改主机名和用户密 ...

  2. GitHub 发布了官方 App,还打算冰封你的代码一千年

    11 月 13 日,GitHub Universe 2019 开发者大会上,公布了大量新功能,包括发布 GitHub 移动版.GitHub Actions 和 Packages 正式版上市.重新设计了 ...

  3. GitHub Pages站点官方宣布开始使用HTTPS

    导读 数百万人依靠GitHub Pages,将其作为他们的网站主机,除此之外,还有数百万人每天访问这些网站.为了更好地保护到GitHub Pages站点的通讯,也为了鼓励在因特网上更广泛地采用HTTP ...

  4. GIT笔记:GITHUB教程【官方自译版】

    GIT笔记:将项目发布到GITHUB GITHUB是什么 GitHub是版本控制和协作的代码托管平台.它可以让你和其他人在任何地方一起工作. 1.创建一个新的仓库 存储库通常用于组织单个项目.存储库可 ...

  5. GitHub官方Markdown语法教程

    说明:Markdown随着编译器不一样,语法也都不一样,但这份GitHub提供的官方教程,基本学会这份就够了. https://guides.github.com/features/mastering ...

  6. storm源码之storm代码结构【译】【转】

    [原]storm源码之storm代码结构[译]  说明:本文翻译自Storm在GitHub上的官方Wiki中提供的Storm代码结构描述一节Structure of the codebase,希望对正 ...

  7. storm源码之storm代码结构【译】

    storm源码之storm代码结构[译] 说明:本文翻译自Storm在GitHub上的官方Wiki中提供的Storm代码结构描述一节Structure of the codebase,希望对正在基于S ...

  8. GitHub 风格的 Markdown 语法

    GitHub 风格的 Markdown 语法 [译] GitHub 风格的 Markdown 语法 Original: GitHub Flavored Markdown - GitHub Help T ...

  9. Win10 UWP vs add github

    vs github 插件 教程 官方教程 点击查看存储库,跳转到 DemoHttp for github

随机推荐

  1. k8s教程:Kubernetes集群使用网络存储NFS

    NFS存储 NFS即网络文件系统Network File System,它是一种分布式文件系统协议,最初是由Sun MicroSystems公司开发的类Unix操作系统之上的一款经典网络存储方案,其功 ...

  2. 代码Verify简介

    序 对于开发者而言,编译代码和提交代码是必不可少的流程,同一个需求反复提交的情况也时常出现,那么怎么避免这种情况,且保证代码的质量,这就是Verify CI的目标.Verify表示认证验证的意思,结合 ...

  3. VS code 的集成终端Integrated terminal 的颜色问题

    其实是默认终端的配色问题在使用vs code时,运行代码时,控制台是这样子的,搞得我很难受 一块一块的 其实是默认终端的配色问题 默认终端一般是powershell,还可以是cmd,或者git bas ...

  4. Android 性能优化---布局优化

    Android 性能优化---布局优化 Android 布局绘制原理 布局加载过程 setContentView() --> inflate() -- > getLayout()(I/O操 ...

  5. java 成员变量和局部变量的区别

    将对象的存储在数组中会报错 public static void main(String[] args) { ArrayList<Goods> arrayList = new ArrayL ...

  6. JVM系列之:Contend注解和false-sharing

    目录 简介 false-sharing的由来 怎么解决? 使用JOL分析 Contended在JDK9中的问题 padded和unpadded性能对比 Contended在JDK中的使用 总结 简介 ...

  7. 1.pandas打开和读取文件

    最近在公司在弄数据分析相关的项目,数据分析就免不了要先对数据进行处理,也就自然避不开关于excel文档的初始化操作了. 一段时间之后,发现pandas更加符合我的项目要求,所以,将一些常规操作记录下来 ...

  8. ngx lua获取时间戳的几种方式

    原创自由de单车 最后发布于2017-02-14 14:58:43 阅读数 18218 收藏 在ngx_lua里,获取时间相关信息的方式大概有4种(见下面代码): print(string.forma ...

  9. python(xlsxwriter模块使用)

    XlsxWriter简介XlsxWriter是一个Python模块,可用于在Excel 2007+ XLSX文件中写入多个工作表的文本,数字,公式和超链接.它支持格式化等功能.可到官网了解更多详情,官 ...

  10. mysql性能优化方案总结

    一.表结构优化 1.根据自己的业务选择合适的引擎.比如: 在以下两点情况下必须使用InnerDB: ①可靠性高或者必须要求事务处理 ②表更新和查询相当的频繁,并且表锁定的机会比较大的情况下,指定Inn ...