2025云栖大会,开启通往AGI的未来之旅 了解详情
写点什么

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:007902

评论

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

如何构建自己的知识体系?

老张

知识体系

自动化回归测试平台 AREX Agent 源码再阅读

AREX 中文社区

Java Java Agent 测试

看海联金汇财务共享智慧平台如何实现以数赋能智慧共享

用友BIP

财务共享

网易易盾流量多发反外挂落地实践

网易云信

安全 反外挂

Topaz Gigapixel AI for Mac激活(图片无损放大软件) v6.3.2

真大的脸盆

Mac Mac 软件 图片无损放大 图片放大工具

分析元宇宙NFT/链游系统开发方案

Congge420

SpringBoot 中异步任务实现及自定义线程池执行异步任务

Java Spring Boot

数据高效转储,生产轻松支撑

鲸品堂

数据库 语言 & 开发 企业号 5 月 PK 榜

软件测试/测试开发丨学习笔记之Selenium 常见控件定位方法

测试人

软件测试 自动化测试 测试开发 selenium

大数据如何助力营销(5)活动复盘

MobTech袤博科技

景区共享电单车让观光旅游更轻松

共享电单车厂家

共享电动车厂家 景区共享电单车 共享电单车投放 景区共享电动车

《苏丹的复仇》携手华为HMS生态,实现用户、收入双增长

HarmonyOS SDK

HMS Core

网易易盾流量多发反外挂落地实践

网易智企

安全 反外挂

【等保】等保全称是什么?英文咋说?

行云管家

等保 等级保护 等保2.0

二维码在中国:学术视角下的创新与实践

草料二维码

二维码

ChatGPT与低代码开发:危机四伏、技术暴走!

加入高科技仿生人

人工智能 低代码 AI技术 ChatGPT

云纳管是什么意思?云纳管平台哪个好?

行云管家

云计算 云服务 云平台 云管平台 云纳管

PoseiSwap:为何青睐 Layer3?又为何选择 Celestia 作为技术伙伴?

鳄鱼视界

分投趣fintoch即将崩盘?系统开发解析!

Congge420

【MaxCompute】基于Package跨项目访问资源实践

阿里云大数据AI技术

数据管理 MaxCompute 企业号 5 月 PK 榜

飞鹤乳业携手用友,引领数字化财务共享管理新时代

用友BIP

财务共享

kafka生产者你不得不知的那些事儿

JAVA旭阳

Java kafka

软件测试/测试开发丨学习笔记之Pytest使用

测试人

Python 软件测试 自动化测试 测试开发 pytest

肝到头秃!百度强推并发编程笔记我爱了,原来这才叫并发

Java 并发编程

MSE 自治服务帮你快速定位解决 Dubbo 重复订阅导致 RPC 服务注册失败问题

阿里巴巴云原生

阿里云 云原生 dubbo MSE

BSN官方视频号更新内容汇总(2023年4月15日~5月15日)

BSN研习社

关于IPP Swap挖矿系统开发详情

Congge420

新一代企业数字化联盟成立,“强强联手”搭建品牌服务生态

数划云

数字化 全面预算管理 新一代企业数字化联盟 数划云 绩效分析

并发编程-常见并发工具BlockingQueue的使用及原理解析

Java 并发编程 BlockingQueue

Abaqus非线性问题预览及求解

思茂信息

仿真软件 abaqus abaqus软件 abaqus有限元仿真 有限元仿真技术

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