写点什么

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

评论

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

mycat入门:简介和安装

小鲍侃java

9月日更

云行·数治·慧用丨边缘云一体机赋能基层实现边缘侧数据智能

云计算

String split()方法踩坑

梁小航航

string

为了让医院把医护还给患者,他们用了这个….

华为云开发者联盟

数字化转型 医院 华为云 devcloud 全流程一体化

9月日更挑战正式开始啦~

InfoQ写作社区官方

9月日更 热门活动

职场奇袭!3分钟完成一天工作

博文视点Broadview

华为云严选上新啦!高效准确的数据同步方案来了

华为云开发者联盟

数据库 华为云 数据同步 英方软件 严选商城

configparser 配置文件解析器

林十二XII

五岳核心版上线!这份阿里开发手册核心版又将被多少人疯狂转载?

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

Tapdata肖贝贝:实时数据引擎系列(三) - 流处理引擎对比

tapdata

Promise.any() 原理解析及使用指南

devpoint

Promise 9月日更

深入了解现代web浏览器(第三部分)

GKNick

接口测试进阶接口脚本使用--apipost(预/后执行脚本)

Proud lion

大前端 后端 Postman 开发工具 接口文档

第一波场DAPP系统搭建|DAPP介绍

Geek_23f0c3

DAPP智能合约交易系统开发 波场链DAPP开发 第一波场

智汇华云 | ArSDN之分布式路由及浮动IP简介

华云数据

IOS技术分享| 在iOS WebRTC 中添加美颜滤镜

anyRTC开发者

音视频 WebRTC 视频通话 ios技术分享 美颜

☕【JVM技术指南】「难点-核心-遗漏」TLAB内存分配+锁的碰撞(技术串烧)!

洛神灬殇

JVM TLAB 锁升级 内存分配 9月日更

4种Golang并发操作中常见的死锁情形

华为云开发者联盟

缓存 协程 并发 死锁 Go 语言

智汇华云 | 混合IT下的云管理套件核心技术解析

华云数据

华云大咖说 | 对象存储在金融行业的应用

华云数据

【重磅】微信开源PhxSQL:高可用、强一致的MySQL集群

OpenIM

webpack5之HMR原理探究

rayyang00

大前端 webpack

华为云数据库内核专家为您揭秘:GaussDB(for MySQL)并行查询有多快?

华为云开发者联盟

MySQL 关系型数据库 华为云数据库 GaussDB(for MySQL) 并行查询

去中心化钱包开发,imtoken钱包开发

Tapdata 在线研讨会:实时数据同步应用场景及实现方案探讨

tapdata

MySQL oracle mongodb

华云大咖说 | 混合IT架构的统一管理——安超云套件产品介绍

华云数据

自动化测试框架指南

FunTester

自动化测试 测试框架 数据驱动 FunTester 测试自动化

接口测试要测试什么?

与风逐梦

软件测试 接口测试

Week2 Homework

Ray_c

#架构实战营

Nebula Graph 源码解读系列 | Vol.00 序言

NebulaGraph

图数据库 源码解读 分布式图数据库

Apache Pulsar 新增 2 位 PMC 成员:林琳与陈航

Apache Pulsar

腾讯云 Apache Pulsar

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