写点什么

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

评论

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

20道高频vue面试题自测

bb_xiaxia1998

Vue 前端

墨天轮沙龙 | 麦杰科技卢学东:openPlant 实时数据库系统及应用

墨天轮

数据库 工业 国产数据库 实时数据库

anime4k 在真机租用上的应用尝试

霍格沃兹测试开发学社

帮助 Meta 解决 Presto 中的数据孤岛问题

Alluxio

sql 开源 presto Alluxio meta

存储资源盘活系统,“盘活”物联网架构难题(下)

天翼云开发者社区

凭这份堪称保姆级别的Java面试宝典,已怒斩3个大厂offer(阿里,美团,腾讯)

Geek_0c76c3

Java 数据库 开源 程序员 架构

opencv 使用 GPU 加速

霍格沃兹测试开发学社

React源码解读之React Fiber

flyzz177

React

Java岗秋招最全面试攻略,看这份Java架构面试核心手册,足够了

Geek_0c76c3

Java 数据库 开源 程序员 架构

云行| 加码算力网络布局,天翼云发布南京3AZ节点

天翼云开发者社区

荣耀开发者服务平台全新升级,助力开发者简单开发、高效分发

荣耀开发者服务平台

开发者 手机 安卓 荣耀 honor

中国信通院沙龙|火山引擎边缘云助力业务体验创新

火山引擎边缘云

云计算 云原生 边缘计算 边缘节点 信通院

MySQL锁机制总结

霍格沃兹测试开发学社

数据库连接池

C++后台开发

MySQL 数据库 后端开发 Linux服务器开发 连接池

vue进阶面试题

bb_xiaxia1998

Vue 前端

2022年下半年如何备考 CKS

baiyutang

云原生 k8s 云安全 CKS

浅谈测试需求分析

霍格沃兹测试开发学社

云堡垒机能给公司带来哪些价值?选择哪款好?

行云管家

云计算 堡垒机 云堡垒机 云运维

教育行业在用的云管平台是什么牌子?

行云管家

云计算 教育 云管平台 云管理

天翼云ECK云边一体化

天翼云开发者社区

从recat源码角度看setState流程

flyzz177

React

火山引擎CDN的技术演进与未来

火山引擎边缘云

Wallys//Industrial_Wireless_AP//network,card//QCN6024/QCN9074/QCN9024,WiFi,Card IPQ6010,802.11ax,2x2

wallys-wifi6

QCN9074 QCN6024 QCN9072

基于TensorFlow Serving的YOLO模型部署

霍格沃兹测试开发学社

英特尔为开源注入创新力量,加速AI应用

科技之家

《Vue.js技术内幕》有奖书评活动正式开启

图灵社区

vue.js 前端

《Vue.js技术内幕》有奖书评活动正式开启

图灵教育

vue.js 前端

项目倒排,跟工期不足say byebye

霍格沃兹测试开发学社

字节跳动数据血缘图谱升级方案设计与实现

字节跳动数据平台

数据库 数据优化 数据血缘 数据研发

软件测试 丨 真实面试经历分享,不用再看其他面试题

测试人

软件测试 面试题 自动化测试 测试开发

技术分享 | web自动化测试-PageObject 设计模式

霍格沃兹测试开发学社

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