写点什么

GitHub 改进代码推送逻辑,可靠性得到大幅提升

作者:Aditya Kulkarni

  • 2024-07-19
    北京
  • 本文字数:1380 字

    阅读完需:约 5 分钟

GitHub 改进代码推送逻辑,可靠性得到大幅提升

GitHub 针对开发者在其平台上频繁执行的代码推送操作推出了一系列技术革新,旨在提升操作的稳定性与效率。这些升级措施不仅解决了潜在的技术问题,还为定期向 GitHub 推送代码的用户提供更流畅的体验。


GitHub 的一位软件工程师 William Haltom 详细阐述了这次技术升级的背景。Haltom 首先分享了向 GitHub 推送代码会触发一系列动作,例如同步拉取请求、分发 Webhook、触发工作流、安装应用、发布 GitHub Pages 以及更新 Codespaces 配置。此外,每次推送还会激活 GitHub 内部的 60 多个流程,这些流程为开发者提供了不同的特性和自动化工具。


在过去,GitHub 依赖一个叫作 RepositoryPushJob 的大型单体后台作业来处理所有由代码推送触发的动作。这个作业在 GitHub 的 Ruby on Rails 单体应用中,按顺序执行所有的推送处理逻辑。然而,由于作业的规模庞大且复杂,导致了一些问题。在作业内重试个别任务非常困难,而且大多数步骤根本没有进行重试。


缺乏可靠的重试机制意味着作业早期阶段的错误可能会产生连锁反应,影响后续的步骤,从而引发一系列的潜在问题。



我们如何改进 GitHub 的推送处理逻辑


GitHub 对其代码推送流程进行了彻底的改革,将原本漫长且顺序执行的作业分解为多个独立且并行运行的流程。为此,他们创建了一个新的 Kafka 主题用于广播推送事件。根据任务所归属的服务或逻辑关系——例如它们之间的依赖关系和重试需求——对众多的推送处理任务进行了细致的分析和分类。


每个任务组都重新分配到了一个新的后台作业中,这个作业有明确的所有者和适当的重试机制。然后,这些作业被配置成可以响应由新的 Kafka 事件所触发的信号。


为了支持这种架构,GitHub 使用了一个内部系统来响应 Kafka 事件并安排后台作业的队列。包括开发 Kafka 事件的可靠发布者、设置专用的工作池来管理增加的作业数量、增强可观测性以监控推送事件流,以及建立一致的特性标志系统,以确保新系统的安全发布。



我们如何改进 GitHub 的推送处理逻辑


GitHub 最近在 GitHub Actions 中引入对 Arm64 的支持,为开发者提供了在 Arm 架构上发布软件的 Arm 构建的镜像,这则消息在技术社区 Hacker News 上引发了广泛的讨论。一位 GitHub 和 Hacker News 的用户 Obviyus 表示他对加入对 Arm64 的支持感到非常兴奋,他们之前一直依赖自托管的 Arm 运行器来进行项目开发。他指出,在他们的小型 Arm VPS 上编译代码可能会显著地拖慢其他任务的运行速度。为此,他对官方提供对 Arm64 的支持表示热烈欢迎,认为这是一个迫切需要的改进。


今年早些时候,Hacker News 上的一篇帖子还讨论了 Copilot Workspace,这是一项创新工具,旨在简化开发流程,允许开发者使用自然语言进行头脑风暴、规划、编码、测试和项目执行。


Haltom 进一步解释了架构改革的结果,他指出,将原本庞大的流程拆解为更小、更独立的部分,问题的影响范围得到了有效控制。推送处理逻辑中某一部分的问题不再会引起连锁反应,影响到其他部分,从而提高了稳定性和可靠性。此外,这种解耦也减少了各个部分之间的依赖性。


此外,新架构还明确了所有权,将推送处理代码的责任分配给了超过 15 个服务的所有者。这样的分配机制使得各个团队能够在不引发意外后果的前提下添加和迭代推送功能。最后,由于作业的规模更小、复杂度降低,整个推送处理过程变得更加可靠。


原文链接

https://www.infoq.com/news/2024/06/github-push-process-enhancement/

2024-07-19 08:007815

评论

发布
暂无评论
发现更多内容

字节跳动面试必问:从外包月薪5K到阿里月薪15K,学习路线+知识点梳理

欢喜学安卓

android 程序员 面试 移动开发

机器学习·笔记之:Inverse and Transpose

Nydia

如何在数据库中进行RBAC权限应用

BinTools图尔兹

数据库 权限管理 数据管理 rbac

杜绝“萝卜章”风险,区块链电子签章助力企业降本“保真”

CECBC

电子签名

大作业(一)

bing5tui3

极客时间架构师二期

百度大脑 EasyEdge 推出端云协同服务,大幅提升本地部署模型迭代效率

百度大脑

注册中心 Nacos 异常实例需要30s才能剔除 Nacos心跳时间设置(踩坑)

laker

Spring Cloud nacos spring cloud alibaba

停车、投票、领证,区块链如何在「智慧城市」建设中大显身手?

CECBC

区块链

架构2期-大作业(二)

浮生一梦

大作业 2组 架构师训练营第2期

话题讨论 | 新年将至, 程序员如何以代码送出新春祝福

孙叫兽

Java 程序员 大前端 话题讨论 新春祝福

kafka的实现原理

八两

kafka Kafka知识点 kafka实现原理 kafka架构

无意间发现 Google 代码模板,分享给大家!

C语言与CPP编程

c++ JavaScript objective-c 代码规范 Python 编码格式

架构师训练营第六周作业

跳蚤

日记 2021年2月7日(周日)

Changing Lin

个人感悟 2月春节不断更

产品经理训练营笔记-业务流程与产品文档(一)

.nil?

产品经理训练营

排查指南 | 当 mPaaS 小程序真机扫码时提示 "应用更新错误(50002)"

蚂蚁集团移动开发平台 mPaaS

小程序 问题排查 mPaaS

区块链还可以这么玩?“点亮莫高窟”背后的腾讯云区块链

CECBC

区块链

大作业(二)

bing5tui3

架构师训练营第2期

2 期架构师训练营 - 第三周学习总结

云飞扬

架构师训练营第2期

字节跳动架构师讲解Android开发!2021年展望Android原生开发的现状,分享一点面试小经验

欢喜学安卓

android 程序员 面试 移动开发

欢度春节|新用户专属福利

InfoQ写作社区官方

热门活动

执行、管理、领导做不好,都有懒的因素

刘华Kenneth

领导力 管理 软件开发

架构师训练营第十一周作业

zamkai

架构2期-大作业(一)

浮生一梦

大作业 2组 架构师训练营第2期

2 期架构师训练营 - 第四周作业与总结

云飞扬

架构师训练营第2期

驱动力读书笔记之五

张老蔫

28天写作

逼疯UE设计师,不可不知的提升产品用户体验的10个测试方法

华为云开发者联盟

产品 测试 UI 用户体验

前端开发:Node版本引起的报错问题

三掌柜

vue.js 大前端

搜索引擎简述

跳蚤

百度大脑 EasyData 智能数据服务平台上线文本数据清洗功能

百度大脑

Linux Lab 进阶: Rootfs 文件系统 &Linux 与 Uboot 调试

贾献华

Linux Linux Kenel rootfs uboot usb

GitHub 改进代码推送逻辑,可靠性得到大幅提升_后端_InfoQ精选文章