NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

评论

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

线程的启动与优先级

zarmnosaj

7月月更

linux硬盘挂载教程

乌龟哥哥

7月月更

疫情当头,作为Leader如何进行团队的管理?| 社区征文

洛神灬殇

团队管理 远程办公 7月日更 初夏征文

疫情封控65天,我的居家办公心得分享 | 社区征文

程序员海军

远程办公 远程开发 初夏征文

linux-riscv-5.17 纯净源码

贾献华

7月月更

旧的Spring Security OAuth已停止维护,全面拥抱最新解决方案

程序知音

Java spring 程序员 微服务 后端

性能测试如何创造业务价值

老张

性能测试 技术与业务

Web侧防御指南

穿过生命散发芬芳

7月月更 Web防护

Python XML-RPC实现简单的远程调用过程

宇宙之一粟

Python 7月月更

ajax

Jason199

ajax 7月月更

疫情当头,作为Leader如何进行代码版本和需求开发管控?| 社区征文

洛神灬殇

团队管理 远程办公 7月日更 远程开发 初夏征文

瞧瞧人家用SpringBoot写的后端API接口,那叫一个优雅

程序知音

Java spring 编程 程序员 后端

L3立法试水,为自动驾驶产业带来什么?

脑极体

服务可见可观测性

阿泽🧸

微服务 7月月更

电商系统微服务架构

极客土豆

「Docker 那些事儿」容器很难理解?带你从头到尾捋一遍

Albert Edison

7月月更

如何优雅的写 Controller 层代码?

程序知音

Java 编程 程序员 后端

大话云原生之负载均衡篇-小饭馆客流量变大了

字母哥哥

Docker 负载均衡 云原生

Vuex(一)

小恺

7月月更

leetcode 650. 2 Keys Keyboard 只有两个键的键盘(中等)

okokabcd

LeetCode 动态规划 数据结构与算法

scrcpy这款软件解决了和同事分享手机屏幕的问题| 社区征文

尼露

毕业总结

库尔斯

架构实战营

图解网络:什么是虚拟路由器冗余协议 VRRP?

wljslmz

网络技术 路由协议 7月月更 VRRP

Web2.0的巨头纷纷布局VC,Tiger DAO VC或成抵达Web3捷径

鳄鱼视界

【算法刷题日记之本手篇】组队竞赛与删除公共字符

未见花闻

7月月更

DotNet圈里一个优秀的ORM——FreeSql

为自己带盐

7月月更 freesql dotnetcore

为什么网站打开速度慢?

源字节1号

网站开发

Web2.0的巨头纷纷布局VC,Tiger DAO VC或成抵达Web3捷径

股市老人

为什么说数据服务化是下一代数据中台的方向?

雨果

数据中台 数字化转型 DaaS数据即服务

煮饺子与docker、kubernetes之间的关系

字母哥哥

Docker 容器化 #Kubernetes#

秒杀系统设计

库尔斯

架构实战营

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