生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

华为云 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:001106

评论

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

在线问题反馈模块实战(十一)​:实现图片下载功能

bug菌

springboot 项目开发 10月月更

在线问题反馈模块实战(十二)​:实现图片删除功能

bug菌

springboot 项目开发 10月月更

Linux系统-进程概念

可口也可樂

Linux 10月月更 Linux进程

规划兼职工作

掘金安东尼

算法 10月月更

深入浅出ES6中的解构

木偶

JavaScript 前端 ES6 10月月更

Linux基础命令

渔戈

Linux ubuntu 10月月更

【微信小程序】带你进入小程序的世界

hacker707

微信小程序 10月月更

单链表的(增删查改)的实现

lovevivi

c 数据结构 10月月更

前端布局之浅谈BFC

CoderBin

CSS 面试 前端 10月月更

Ubuntu 20.04上安装和配置MySql5.7

渔戈

ubuntu 开发工具 10月月更

Linux系统-进程控制

可口也可樂

Linux 10月月更 Linux进程

双向带头循环链表的(增删查改)的实现

lovevivi

c 数据结构 10月月更

【kafka原理】消费者提交已消费的偏移量

石臻臻的杂货铺

kafka Kafka实战 10月月更

Kafka消费者JoinGroupRequest流程解析

石臻臻的杂货铺

kafka Kafka实战 10月月更

【LeetCode】下一个更大元素单调栈Java题解

Albert

算法 LeetCode 10月月更

Linux 驱动开发:USB无线wifi驱动开发(MT7601)、完成WIFI管理工具安装

DS小龙哥

10月月更

HashMap源码分析(四)

知识浅谈

hashmap 10月月更

鸿蒙开发实例 | 分布式涂鸦

TiAmo

华为 华为云 云开发 10月月更

“程”风破浪的开发者|一文GET钉钉连接平台

六月的雨在InfoQ

学习方法 钉钉宜搭 10月月更 “程”风破浪的开发者 钉钉连接平台

顺序表的(增删查改)实现

lovevivi

c 数据结构 10月月更

嵌入式 Linux 入门(二、Linux 文件系统、文件类型及权限管理)

矜辰所致

Linux 文件系统 10月月更

【一Go到底】第二十二天---函数参数传递方式、变量作用域

指剑

Go golang 10月月更

ES6之let、const与var

木偶

JavaScript 前端 ES6 10月月更

Flex布局教程:语法篇

木偶

css3 前端 10月月更

使用 SAP Business Application Studio 创建 Fiori Elements 应用显示 OData 服务的数据

Jerry Wang

云原生 Cloud SAP 10月月更 btp

不错的项目管理系统厂商有哪些?

PingCode

Linux系统-进程地址空间

可口也可樂

Linux 10月月更 Linux进程地址空间

开源软件与开源协议的法律问题分析

Andy

开源 架构 调研

在线问题反馈模块实战(十)​:实现图片预览功能

bug菌

springboot 项目开发 10月月更

Pycharm配置远程解释器并自动上传代码

渔戈

pycharm 开发工具 10月月更

python爬虫--网络歌曲

木偶

Python 爬虫 10月月更

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