写点什么

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

评论

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

Spring Security系列教程17--注销登录的实现及原理分析

一一哥

spring security spring-boot 注销登录

什么?MySQL的等值查询竟然出错了??

转转技术团队

MySQL

【CSS】怎么理解层叠性、继承性和优先性?选择器的权重如何叠加?

翼同学

CSS html 前端 编程语言 8月月更

弹性云端新算力,驱动沉浸新交互 |2022阿里云金融创新峰会

阿里云弹性计算

计算巢 云盒 倚天实例 专属Region

佛山复星禅诚医院黄汉森:云边协同,打造线上线下一体化智慧医疗

阿里云弹性计算

弹性计算 分布式云 云盒 异地双活

直播预告丨阿里云佐井:关注预警6要素,帮助用户实现精准监控和告警

阿里云弹性计算

监控 预警

Docker杀掉了容器?问题分析与解决过程全面复盘

程序员欣宸

Docker 8月月更

混迹职场10多年的数据开发老鸟,居然被一个职场新人上了一课

雨果

数据工程师

浅谈JS发布订阅模式

海底烧烤店ai

JavaScript 前端 发布订阅模式 8月月更

记录一次数据库CPU被打满的排查过程

京东科技开发者

数据库 cpu cpu飙满 调优 慢SQL

开源,无禁止即可为

Databend

开源社区 大数据 开源 #开源 databend

极简云上分析,释放数据价值|Kyligence 邀您参加2022秋季线上论坛

Kyligence

数据分析 数据价值 数据管理 智能多维数据库

【React】使用Next.js构建并部署个人博客

海底烧烤店ai

nuxt 博客开发 博客搭建 react rout 8月月更

源码解析 kubectl port-forward 工作原理

张晓辉

Kubernetes 云原生 源码解析

MySQL查询重写插件

TimeFriends

8月月更

数字藏品app开发:数字藏品发行制作的关键

开源直播系统源码

NFT 数字藏品 数字藏品开发 数字藏品系统 数字藏品软件

如何通过经纬度坐标获取附近的地址信息?

HarmonyOS SDK

定位

[JS入门到进阶] 手写解析uin8数组的工具:解析二进制字节,太快太方便了!

HullQin

CSS JavaScript html 前端 8月月更

【CSS】什么是外边距的重叠?常见的有哪几种重叠情况?

翼同学

CSS 前端 编程语言 8月月更

Rancher 2.6 全新 Logging 快速入门(2)

Rancher

Kubernetes k8s rancher

Selenium 中的 JUnit 注解

FunTester

超大规模跨域集群统一监控实践

移动云大数据

亚马逊云科技与TalkingData携手助力美妆巨头数字化营销闭环安全合规地提效

Lily

【CSS 盒子模型(下)】:padding 和 margin

翼同学

CSS html 前端 8月月更

持久,redis 持久化有哪几种方式,怎么选?

知识浅谈

redis持久化 8月月更

面试突击79:Bean 作用域是啥?它有几种类型?

王磊

Java 常见面试题

SUSE 加速汽车行业智能化发展

Rancher

Kubernetes k8s rancher

【CSS关键字】:inherit、initial、unset分别有哪些作用?

翼同学

CSS html 前端 8月月更 学习分享

【CSS 盒子模型(上)】:width、height、overflow、border

翼同学

CSS html 前端 8月月更

【CSS·圆角边框】有关border-radius属性的记录以及实现原理

翼同学

CSS html 前端 8月月更

mysql基础

楠羽

#开源

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