速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

评论

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

龙蜥社区第七次运营委员会会议顺利召开

OpenAnolis小助手

开源社区 龙蜥社区 理事单位 运营委员会

大巧不工,袋鼠云正式开源大数据任务调度平台——Taier(太阿)!

袋鼠云数栈

数据库 开源

聚焦丨看泛建材巨头如何实现数字化改造,推动企业业务增长

数商云

产业互联网 数字化转型 企业数字化

16 台服务器达成 1000 万 tpmC!挑战分布式数据库性能极限

SphereEx

opengauss ShardingSphere SphereEx apache 社区 分布式解决方案

10元自助洗车机器多少钱一台?

共享电单车厂家

自助洗车机价格 10元自助洗车机器 自助洗车机器多少钱

解析天翼云IPsec VPN和SSL VPN的区别

天翼云开发者社区

vpn

小区自助洗车机赚钱吗?想投几台

共享电单车厂家

自助洗车加盟 投资自助洗车机 自助洗车投资费用 自助洗车是否赚钱

产品宣传手册是如何制作的?

小炮

产品宣传册

巧用天翼云盘备份云主机数据

天翼云开发者社区

云主机 云存储

Masa Blazor in Blazor Day

MASA技术团队

C# .net 微软

智能运维时代,如何做好日志全生命周期管理

云智慧AIOps社区

日志 智能运维 日志管理

Go 1.18 新特性:多模块工作区模式

华为云开发者联盟

Go 指令 go 1.18 多模块工作区 工作区

到底为什么你我都要了解社会工程学

图灵教育

黑客 社会工程 社会科学

天翼云CDN最佳实践

天翼云开发者社区

CDN

天翼云云主机快照、云硬盘备份、云主机备份之间的区别

天翼云开发者社区

云主机 云备份

安全网关是啥什么东西?有什么优势?与堡垒机的区别是什么?

行云管家

网络安全 堡垒机 运维审计 安全网关 堡垒机防火墙

RocketMQ-Streams架构设计浅析

阿里巴巴中间件

阿里云 RocketMQ 云原生 中间件

实例带你掌握如何分解条件表达式

华为云开发者联盟

代码 函数 条件表达式 条件分支 条件逻辑

Google如何申请客户端ID并调试代码?

CRMEB

jackson学习之一:基本信息

程序员欣宸

4月月更

【等保】等级保护定级对象只定信息系统吗?还是说定单位?

行云管家

网络安全 等保 等级保护 等保2.0

投资自助洗车机要多少钱?看情况

共享电单车厂家

自助洗车加盟 投资自助洗车机 自助洗车机要多少钱

企业如何突破数据治理临界点,四大数据要素深度剖析

袋鼠云数栈

大数据 数据中台

招商银行 KubeVela 离线部署实践

阿里巴巴中间件

阿里云 最佳实践 云原生 中间件 KubeVela

K8S Pod 新安全策略 Pod Security Admission 介绍 | K8S Internals 系列第一期

BoCloud博云

Kubernetes Pod Security Policy Pod Security Admission

如何有效的对云专线进行测速

天翼云开发者社区

网络

自助洗车机设备一台多少钱划算

共享电单车厂家

自助洗车机多少钱 自助洗车机设备价格

自助洗车机厂家如何选?要注意什么

共享电单车厂家

自助洗车机多少钱 自助洗车加盟 自助洗车机厂家

netty系列之:netty中的核心编码器base64

程序那些事

Java Netty 程序那些事 4月月更

WebApi性能优化

神农写代码

「技术人生」专栏作者来直播间啦!欢迎来提问

阿里巴巴中间件

阿里云 云原生 中间件 技术人生 一号位

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