首页 > IT业界 > 正文

如何看待华为1100亿行代码规模的代码库?华为云MVP这样说

2019-11-26 16:56:35  来源:牛华网

摘要:10月10日,有媒体刊登了一篇文章“1100亿行源代码,这家公司如何应对大规模代码托管的挑战”,预告上海QCon将邀请华为专家在技术裂变中的可信软件开发专场做演讲。
关键词: 华为云
  10月10日,有媒体刊登了一篇文章“1100亿行源代码,这家公司如何应对大规模代码托管的挑战”,预告上海QCon将邀请华为专家在技术裂变中的可信软件开发专场做演讲。文章中心思想是希望开发者关注做好代码仓库的版本控制,保证软件开发过程可控性,并吸引开发者参会。
 
 
  说者无意,听者有心,1100亿行代码迅速吸引了开发者的关注。
 
 
  网友们纷纷拿出计算器,用1100亿行代码计算华为的人均代码产出,更有好事者拿这个代码量和Google对比,以证明华为的代码量过于庞大,软件工程能力有待改进。一夜之间,“如何看待华为1100亿行代码规模的代码库”的话题被顶上了知乎热榜。
 
 
  网友的意见基本分成3派:贬低派:质疑代码量太大,存在冗余代码,过程管理不佳,甚至质疑拷贝粘贴代码。解释派:从华为的业务规模,业务量,员工数,软件历史,通信设备与互联网的区别等方面,解释1100亿行代码的合理性。分析派:笔者认为网友stephenzhao的分析最具代表性,他把1100亿行代码的原因归结为分支「branch」,而分支的数量又和企业的经营模式息息相关,强市场导向,及时响应客户,那就多拉分支,典型如华为。one track「一个主线」是对开发和维护最友好的,但对销售和服务最坑爹。网络设备升级意味着割接,所以销售服务都很郁闷,说你这没竞争力,华为打补丁就搞定了。但好处是人少,几十人就能支撑一个平台。CMO都是和别的项目共享的。华为不苦呵呵地拉分支,搞局点测试,搞性能,出补丁,996,哪来的攻城掠地?这个分析很有深度。
 
 
  网友引用华为内源平台庄老师的回复很明确——1100亿行代码不是光荣,是实实在在的挑战,1100亿怎么来的不重要,如何搞定这1100亿行代码的管理才是重点。
 
 
  带着好奇和疑问,作为华为云用户和MVP,笔者参加了QCon上海的华为云技术专场。
 
 
  会中,华为云专家分享了《华为云DevCloud 在大规模团队Git协作的探索》,在最后提问中也正面回应了知乎上有关华为云1100亿行规模代码库的问题。华为云专家的观点如下:首先,华为的产品族多达几十个,比如传统通信设备域有路由器、交换机、传送网、无线波分、5G等产品;芯片领域有手机麒麟芯片和服务器鲲鹏芯片;服务器领域有TaiShan;操作系统领域有鸿蒙、openEuler、LiteOS;数据库领域有GaussDB等等,每个领域从硬件到驱动、系统模块,再到上层应用,相关组件与代码仓库繁多。其次,华为的代码仓库可以向前追溯十几年,与 Google 等互联网厂商最典型的区别在于华为代码的可追溯性。互联网厂商的源码多数是发布到自己的服务器上,DevOps是可以从内部的源码仓库走到内部的服务器上,因此互联网厂商多数不会维护一个10年前的版本与代码仓库。而华为的代码仓库是在内部Dev开发,产品发布后却是在用户的机房中进行Ops的,因此华为必须要归档和维护历史版本,尤其是发布给用户的版本,包括正式版本和补丁版本,导致代码仓库数量非常多。综上,华为的代码仓库数量以及1100+亿的代码规模,从现状来看是存在的。
 
 
  华为云DevCloud 的代码平台要托管如此多产品代码,且多数产品仓库每天都会被大量的CI工程下载,同时峰值平台也会收到1万次下载/每秒的请求,在这种复杂的软件工程背景下,华为云专家介绍了华为云DevCloud 的代码平台是如何支撑海量业务的连续性和可信。
 
 
  华为云专家表示,华为iSource是华为内部的代码托管平台,它在华为云上对外提供服务的名字是CodeHub(是不是有点耳熟?),这两者都是华为云DevCloud的一个组成部分。简而言之,一个办公室,两块牌子。
 
 
  iSource/CodeHub的历史回顾
 
 
  2014年,华为确定基于GitLab的社区版本进行深度定制,并在2015年4 月底,上线了 iSource 第一代的分布式架构,通过仓库路由做到存储IO能负载到不同后端服务器上。2015年底,为了解决不同华为研究所远程下载 Git 速度慢的问题,又在华为各地域数据中心建立了节点,实现了多中心分布式架构。各个中心间的同步采用异步同步,虽然不能保证数据的强一致性,但是通过远程代理等手段实现了用户体验上的一致性。
 
 
  2018年,华为又基于 GitLab 9.0 开始了下一代的架构调整,同时也看到GitHub 的架构对原有的分片进行了突破,通过应用层三副本复制,实现一个仓库同时可由三台服务器提供服务。另外,GitHub的Spokes分布式架构,是华为下一步突破的方向,目前正在进行一些基础性的改造工作,包括仓库分片微服务,路径哈希、引用派生等,这些架构上的进步会进一步提升用户体验。
 
 
  由于华为产品代码仓库多,派生多,每个产品会面临众多仓库要开发和维护,需要解决如下问题:多仓库关联问题,如何解决多个源码仓库之前的版本关联;派生仓库的管理问题,仓库派生后相关配置会在派生仓库失去管控;上游同步复杂,派生仓库与上游仓库同步困难,会消耗大量工作量;磁盘消耗太快,派生仓库在使用过程中,会产生大量冗余存储。
 
 
  OMEGA开发模式横空出世
 
 
  华为iSource团队经过了很多尝试和对比后,最终选择对标 Gerrit平台的开发模式,基于 GitLab 的内核,开发了 OMEGA (One-stop MultipurposE Git Access) 代码仓库集中式开发模式。
 
 
  OMEGA 开发模式有如下特点:开发人员不再需要派生仓库。服务器上的 Git 仓库不需要开发人员的开发分支存在,分支大量减少。使用 xml 文件来描述仓库关联关系,没有 submodule 存在的子仓库冲突问题,可配置化,更容易维护。通过客户端工具git-mm一键推送修改并创建 Merge Request,加快代码提交速度。
 
 
  华为云专家还介绍了OMEGA背后的技术,如客户端git-mm和iSource服务端协议。总的来说,在OMEGA开发模式下,开发人员不需要fork仓库,通过 init 和sync 下载所有的仓库,然后在本地创建一个分支,进行相应的开发工作,最后通过upload 把修改推送到代码平台的服务器上,产生一个Merge Request。同时平台发送消息给相关的pipeline server,启动相应的CI工程。如果CI工程不通过,或者 committer 审核不过的话开发人员可以进行修改并更新Merge Request,没问题的话就可以删除本地的开发分支,进入下一步的迭代开发。同时在pipeline server上可以通过命令来记录各个仓库的快照情况,有了这个快照,就可以对每条CI的结果、每次代码检查的结果 ,包括发布的每一个版本,进行源码回溯。通过这个快照,完全还原当时构建时每个仓库对应的提交点。
 
 
  结束语
 
 
  听完华为云专家的介绍,笔者的感觉是,代码托管平台背后的技术并不简单,如果企业的开发模式稍复杂,代码量大一些,绝不是自己搭建一套开源版就能完全解决,真遇到问题时,我总不能自己去修改开源代码吧,从这个角度说,花一点钱买服务,聚焦在核心业务上,反而是低成本的选择;其次呢,我们看到了华为的OMEGA技术的创新,当你遇到仓库多,派生多,多仓库关联,多个源码仓库之前的版本关联,存储量大等问题时,或者说现有的代码托管平台体验不好了,你应该考虑一下OMEGA,要么直接使用华为云DevCloud旗下的CodeHub,要么你等华为开源。华为云专家也透露了 OMEGA 的开源计划, 2019年底将上线DevCloud产品CodeHub代码平台,在2020年做到开源。
 
 
  笔者获悉,2020年2月11日-12日期间,华为公司面向ICT领域全球开发者的年度顶级旗舰活动——华为开发者大会2020(Cloud)将在深圳会展中心举办。届时会有哪些干货出炉,让我们拭目以待。

第三十六届CIO班招生
国际CIO认证培训
首席数据官(CDO)认证培训
责编:chenjian

免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。