亮网络解锁器,解锁网络数据的无限可能 了解详情
写点什么

华为云 DevCloud 在大规模团队 Git 协作的探索

  • 2020-03-23
  • 本文字数:1524 字

    阅读完需:约 5 分钟

华为云 DevCloud 在大规模团队Git协作的探索

华为 2019 的 001 号文件中提到,“华为今年全面提升软件工程能力与实践,打造可信的高质量产品”。


可信的软件开发为未来的软件工程指出了发展方向。追求可信的道路上,需要软件研发水平提升,保障从产品研发到交付全流程的高质量,同时需要软件管理与维护方法与时俱进。


如何做好代码仓库的版本控制,保障软件开发过程可控性?日前,华为云 DevCloud 的 iSource 代码平台专家在 Qcon 和 DevOps 社区年会上,对外分享了华为云 DevCloud 在大规模团队 Git 协作上的探索。

华为内部使用 Git 进行软件开发协作遇到的挑战

华为内部 Git 协作遇到的挑战来自多个方面:


首先华为目前的产品涉及众多领域,每个领域下,从硬件到驱动,到系统模块,到上层应用,相关组件与代码仓库非常繁多。代码仓库数 60 万+,注册用户数 21.5 万,源代码总行数 1100 亿+,每天提交次数 9 万+…


其次历史仓库非常多,从 2014 年开始建设内源平台,逐渐把各领域的产品代码迁移到内源平台开源,发现各个产品原先的代码托管服务差异很大,产品的仓库存在如下特点:


  • 派生出来的仓库特别多

  • 特性分支,维护分支,补丁分支特别多

  • 历史发布的产品版本对应的仓库,依然会参与构建与发布


那么,华为云 DevCloud 的 iSource 代码平台面对如此多的产品仓库,并且华为的产品仓库每天都会被大量的 CI 工程下载,在峰值能够达到 1 万次下载/每秒。这首先对服务器的压力是非常大的,对代码托管团队的技术挑战是极其严峻的。

iSource 代码平台 进行大量架构上的重构和优化

2014 年,iSource 代码平台经过选型,确定基于 Gitlab 的社区版本进行演进。


2015 年 4 月,上线了 iSource 第一代的分布式架构,通过仓库路由做到存储 IO 能负载到不同后端服务器上。不过华为内部的研发团队是分布在不同地域的,在国内华为研究所有深圳、北京、杭州、上海、西安、成都等,不同地域访问 iSource 的仓库速度会差异很大。



iSource 数据中心内集群方案


2015 年底,为了解决不同研究所远程下载 Git 速度慢的问题,在公司各地域数据中心建立了节点,实现了多中心分布式架构。各个中心间的同步采用异步同步,虽然不能保证数据的强一致性,但是通过远程代理等手段实现了用户体验上的一致性。



iiSource 多数据中心方案


同时, Gitlab 的架构也发生了变化。Gitlab 9.0 版本有了巨大的改进,也增加了分片(Sharding)、RPC(Gitaly)的能力。2018 年我们也基于 Gitlab 9.0 开始了下一代的 iSource 架构调整。

工作模式创新 进行 OMEGA 集中式仓库开发模式

在解决了研发团队不同地域的访问与下载速度上的问题后,仍然不能避免一个问题,就是华为产品的仓库多,派生多的问题。


每个产品会面临众多仓库要开发和维护,就需要解决如下问题:


  • 多仓库关联问题,如何解决多个源码仓库之前的版本关联

  • 派生仓库的管理问题,仓库派生后相关配置会在派生仓库失去管控

  • 上游同步复杂,派生仓库与上游仓库同步困难,会消耗大量工作量

  • 磁盘消耗太快,派生仓库在使用过程中,会产生大量冗余存储


华为云 Devloud 的 iSource 代码平台团队经过了很多尝试和对比后,最终选择对标 Gerrit 平台的开发模式。华为内部在架构、功能性、用户体验上进行了很多工作。难度最大,影响最为深远的,就是基于 Gitlab 的内核,开发了 OMEGA (One-stop MultipurposE Git Access) 代码仓库集中式开发模式。


OMEGA 开发模式有如下特点:


  • 开发人员不再需要派生仓库

  • 服务器上的 Git 仓库不需要开发人员的开发分支存在,分支大量减少

  • 使用 xml 文件来描述仓库关联关系,没有 submodule 存在的子仓库冲突问题,可配置化,更容易维护

  • 通过客户端工具能够一键推送修改并创建 Merge Request,加快代码提交速度


本文转载自 华为云产品与解决方案 公众号。


原文链接:hhttps://mp.weixin.qq.com/s/_fpSqkILNJHl_AePcn1lpw


2020-03-23 17:001122

评论

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

语音合成技术在智能驾驶中的创新与应用

来自四九城儿

九章云极DataCanvas公司入选《2023中国大模型产业创新服务商TOP30榜单》

九章云极DataCanvas

DataCanvas会员中心正式上线,这些新春福利请接住!

九章云极DataCanvas

Pyth 预言机: 它们如何影响Hover?

股市老人

Casper Network加入Web3 领域 “Shark Tank” 的《Killer Whales》

股市老人

听GPT 讲Rust Cargo源代码(6)

fliter

质量标准深度解读:覆盖度、bug等级、用户体验窥探

测吧(北京)科技有限公司

测试

提高项目执行力:解析执行力差原因与提升方法

测吧(北京)科技有限公司

测试

九章云极DataCanvas公司荣登“2023Venture50投资界数字科技”榜

九章云极DataCanvas

思考-RBAC中对于权限编码部分的压缩处理(RoaringBitmap)

alexgaoyh

Java 位图 BitMap Roaringbitmap 位图压缩

ChatGPT 被曝泄露私密对话;美国 AI 企业一天蒸发 1.3 万亿市值丨 RTE 开发者日报 Vol.139

声网

从需求到测试计划:项目流程与规范关键输入输出

测吧(北京)科技有限公司

测试

软通动力启动鲲鹏原生应用开发合作

彭飞

语音合成技术在智能驾驶中的应用与挑战

来自四九城儿

10000+AI绘画关键词-涵盖Mid和StableDiffusion

Geek_bbbdb0

深入理解 Java 变量类型、声明及应用

小万哥

Java 程序人生 编程语言 软件工程 后端开发

软件测试/测试开发/全日制|Pytest allure如何添加测试用例步骤

霍格沃兹测试开发学社

软件测试/测试开发/全日制|MySQL安装最全教程

霍格沃兹测试开发学社

Kickoff会议与测试关注点:项目启动的黄金法则

测吧(北京)科技有限公司

测试

任务与责任划分:巧妙安排项目工作与任务

测吧(北京)科技有限公司

测试

测试过程管理揭秘:敏捷站会、项目时间、推动关键技巧

测吧(北京)科技有限公司

测试

QT项目第一弹-自定义日志输出

springIce

日志 qt

5G-A华彩开局,风流还看北京城

脑极体

通信

需求管理智慧:与产品经理巧妙沟通解决不规范与变更频繁

测吧(北京)科技有限公司

测试

布局算力新基建,九章云极DataCanvas公司赋能AI产业高质量发展

九章云极DataCanvas

SRP (Secure Remote Password Protocol)

Geek_44385e

srp

跨团队协作智慧:资源寻找、支持申请、协作分工

测吧(北京)科技有限公司

测试

项目排期揭秘:预估测试时间与灵活沟通工期不合理

测吧(北京)科技有限公司

测试

测试流程与规范指南:详解测试计划、用例与质量指标

测吧(北京)科技有限公司

测试

恒安嘉新启动鲲鹏原生应用开发合作

彭飞

听GPT 讲Rust Cargo源代码(5)

fliter

华为云 DevCloud 在大规模团队Git协作的探索_行业深度_华为云产品与解决方案_InfoQ精选文章