GitHub 技术升级:提升代码推送的可靠性与效率
GitHub 最近推出了一系列技术升级,旨在提高开发者频繁操作的代码推送的可靠性和效率。这些改进旨在解决潜在问题,并为开发者提供更流畅的体验。
代码推送的背景与挑战
GitHub 软件工程师 William Haltom 详细解释了此次技术升级的背景。每次推送代码到 GitHub 都会触发一系列操作,包括同步拉取请求、分发 Webhooks、触发工作流、安装应用程序、发布 GitHub Pages 以及更新 Codespaces 配置。此外,每次推送还会激活 GitHub 内部的 60 多个进程,为开发者提供不同的功能和自动化工具。
此前,处理所有由代码推送触发的操作是通过一个名为 RepositoryPushJob 的单一后台任务完成的。该任务在 GitHub 的 Ruby on Rails 单体应用中按顺序执行所有推送处理逻辑。然而,由于其规模和复杂性,该任务存在一些问题。特别是,重试个别任务非常困难,且大多数步骤根本不会重试。这种缺乏可靠重试机制的情况意味着,任务早期阶段的错误可能会影响后续步骤,导致一系列潜在问题。
技术升级:任务分解与并行处理
GitHub 通过将长串的、顺序执行的任务分解为多个独立的、并行的进程,彻底改进了代码推送的处理流程。为实现这一目标,GitHub 引入了一个新的 Kafka 主题来广播推送事件。随后,他们根据任务所属的服务或逻辑关系(如依赖关系和重试需求)对众多推送处理任务进行了分析和分类。
每组任务都被分配到一个新的后台任务中,并指定了所有者和适当的重试设置。这些任务随后被配置为由新的 Kafka 事件触发。为了支持这一架构,GitHub 使用了一个内部系统来响应 Kafka 事件排队后台任务。改进包括开发了一个可靠的 Kafka 事件发布器、设置了一个专用工作池来管理增加的任务数量、增强了可观察性以监控推送事件流,并建立了一个系统来实现一致的功能标志,以确保新系统的安全推出。
升级后的成果
Haltom 进一步解释了架构改进后的成果。较小且解耦的进程减少了问题的爆炸半径,推送处理逻辑中的一个部分出现问题不再会影响到其他领域,从而提高了稳定性和可靠性。这种解耦还减少了依赖关系。
此外,新架构明确了所有权,将推送处理代码的责任分配给了超过 15 个服务所有者。这使得团队可以添加和迭代推送功能,而不会对其他人造成意外影响。最后,较小且不那么复杂的任务使得推送处理更加可靠。
GitHub Actions 引入 Arm64 支持
GitHub 最近还宣布在 GitHub Actions 中引入 Arm64 支持,为开发者提供 Arm 架构的构建镜像,以便在 Arm 架构上发布软件。这一消息在技术社区引发了热烈讨论,许多开发者对这一改进表示欢迎,尤其是那些依赖自托管 Arm 运行器的开发者。
总结
GitHub 通过分解和并行处理推送任务,显著提高了代码推送的可靠性和效率。这一技术升级不仅减少了问题的传播范围,还明确了任务所有权,使得开发者能够更安全、更高效地进行代码推送。此外,GitHub Actions 对 Arm64 的支持也为开发者提供了更多选择和便利。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。