谷歌代码库已超过 20 亿行代码,他们是如何管理的?

简介: Google有多庞大?要回答这个问题,我们可以看收入,看股价,看客户数量,看影响力。但是这都还不够充分。说到规模,那么Google绝对是一个巨大的计算机软件帝国。

Google有多庞大?要回答这个问题,我们可以看收入,看股价,看客户数量,看影响力。但是这都还不够充分。说到规模,那么Google绝对是一个巨大的计算机软件帝国。为了印证着一点,我们还可以看看Google的代码规模。

周一,Google员工 Rachel Potvin 在一个硅谷举办的工程会议上提到了代码量这个问题(戳这里看视频,请科学上网)。根据她的估计,你平时用到的Google互联网服务的软件(包括搜索服务、邮箱、地图)的总代码量,大约有20亿行之多。相比之下,微软公司的Windows操作系统,作为世界上最复杂的个人电脑操作系统,从1980年代至今不断研发和演化,其代码量规模也不过是5千万行而已。







(截图来自湾区日报)

所以说,把Google的代码全部重新构建一次,其规模相当于把Windows系统构建40次之多。其实和Windows系统作比较是合乎情理的(译注:作者的意思是:可能会有人质疑,Windows只是一个操作系统软件,但是Google搜索,Gmail,Google地图是好几个软件,用一个软件的代码量与好几个软件的代码总量做比较,貌似不合乎情理,作者在后面会解释这个问题)

和Windows的基础代码很像,Google的20亿行代码是用来驱动整个Google服务的,他们是一个整体!这20亿行代码支撑着Google搜索、Google地图、Google文档、Google plus、Google日历、Gmail、Youtube,以及其他各种Google互联网服务。并且,这20亿行代码是存放在一个单一的代码仓库里的,供Google的25000个工程师共同使用。Google把自己的代码看成一个“巨大的操作系统”,“尽管我没法证明,”,Potvin表示,“但是我猜这应该是世界上最大的单一代码仓库了。”

Google的情况其实是个特例。但这个例子向我们展示了,在互联网时代我们的软件有多么的复杂,以及我们如何通过改革工具来适应这种复杂度。Google的超大代码仓库只对内部员工开放。不过,我们也有类似的工具——Github,这是一个开源代码仓库平台,它向全世界所有的工程师开放,任何人都能最大程度地共享其中的海量代码。时代变了,现在的工程师能利用超大规模的代码库进行协同工作。这也是现代互联网服务能够维持快速进化的不二之法。

“让25000个开发人员共享代码库,就像Google这种大公司做的这样,意味着开发人员丰富各异,技能多种多样。”,GitHub 的系统总监 Sam Lambert 如是说,“不过,对于小公司来讲,通过Github和开放源代码,你也可以具有(与Google)同样的优势。因为有句古话说得好:‘水涨船高’”。

“关于编译20亿行代码,其挑战的一面在于:一次性构建和运行20亿行代码,这可不是闹着玩的。”“这肯定是一项技术挑战——一次伟大的壮举。”“20亿这个数字无疑是令人震惊的。”

Github的天才之处在于,它能让程序员分享和协作的代价降低。但是Github(不像Google)并不把所有东西都存储成单一软件项目。它的方式是存储上百万个小项目。Google先行一步,把无数的小项目化零为整。考虑到这涉及那么多的工程师,那么多的项目,化零为整听上去有点疯狂。但是根据Potvin的说法:Google做到了。

听 Piper 的

简单来说,Google自己做了一个“版本控制系统”,用来对其所有的代码进行判审。这个系统名字叫做Piper,它运行在整个Google的已经搭建好的庞大的在线基础设施上,并管理着所有在线服务。根据Potvin的说法,这个系统分布在10个不同的Google数据中心上。

这件事情的意义绝不仅仅是说Google的工程师能够访问20亿行代码这么简单,这件事情的意义在于:每一个Google的工程师都有充分的自由对仓库中的无数项目进行使用和组合。“你新建一个项目”,Potvin向《连线》杂志解释到,“然后就有无比富裕的代码库资源供你使用。基本上你需要的东西都有现成的。”更美妙的是,工程师对代码进行了修改以后,马上就能实施部署,然后反映到所有Google的服务上。只需要对一处进行更新,你就对所有的东西都完成了更新。

当然这个系统还是有限制的。Potvin说,有一些高度敏感的代码——比如像Google的网页排名搜索算法(PageRank Search Algorithm)这种——是放在单独的代码仓库里的,只有部分被授权的员工才能看到。因为这些算法并不在互联网上运行,因此他们和其他代码是不同的,Google还把其他两个设备相关的操作系统源代码,Android和Chrome,进行了单独的版本控制管理。不过对于绝大多数代码,Google把他们存成了一个整体,工程师可以使用它进行构建模块,提出创新以及实现解决方案。

机器人因素

Lamber指出,构建和运行一个这样的系统不仅仅需要知道基本知识,还要意识到这个系统庞大的计算能力。Piper涵盖85T数据(8500G),Google的25000名工程师每天会完成45000次提交操作。这种强度可不是开玩笑。Linux开源操作系统一共有40000个文件,1500万行代码,而Google工程师每周就会修改25000个文件,1500万行代码。

同时,Piper还需要兼顾降低程序人员的负担的任务,让程序员可以埋头修改自己的程序,而又不至于踩了别人的脚。程序员要能够把不适用的或有问题的代码移除代码库。这个任务非常困难,所以不能完全靠人工来处理这项工作。现在Google已经把把之前所用的Perforce版本控制系统切换到了Piper上,Piper使用了自动机器人来处理大多数的用户提交。

当然这不是让机器人来写代码,而是让机器人自动生成当大量的数据和配置文件,来协助用户运行软件。“为了让你的代码维持健壮,你需要做很多具体的工作”,Potvin说,“然后我们的办法是让机器人帮助你去分担这些工作,而不是只让人来做。”

人人都能用的 Piper

那么其他厂商能不能从Piper这种系统中收益呢?当然可以,并且他们正在这样做。Facebook应用的总代码量也已经达到了2亿行之多,而且Facebook也是将整个代码看成一个整体工程的。其他的企业也在这么做,只是规模上稍微小了一些。对于那些与Google或者Facebook规模差不多的公司来讲,都可以采用这样的形式。不过现在Google和Facebook正在探索新的方法,从而让每个人都能从中获益。

两大IT巨头目前都在研究,如何让超大规模的开源版本控制系统可供所有人使用。这项研究是基于已经存在的Mercurial系统开展的。“我们正在尝试,是否能够把Mercurial系统扩展到Google代码仓库的规模。”,Potvin指出。目前Google正在和编程大师Bryan O’Sullivan以及其他Facebook的程序员们通力合作,争取在这方面取得突破。

这看上去也许有点儿极端。毕竟目前大多数公司对代码的操作都达不到Google或者Facebook的那个级别。但是在不久的将来,他们就会变成那样。

目录
相关文章
|
vr&ar 开发工具 图形学
Unity引擎更新收费模式:从收入分成转向游戏安装量,将会有哪些影响呢
Unity引擎更新收费模式:从收入分成转向游戏安装量,将会有哪些影响呢
|
存储 Web App开发 大数据
iPhone 数据将会存在国内公司的服务器上,这会有哪些影响?
iPhone 数据将会存在国内公司的服务器上,这会有哪些影响?
254 0
OFFICE技术讲座:标点压缩分两个独立的阶段
OFFICE技术讲座:标点压缩分两个独立的阶段
77 0
|
JavaScript 数据库
toLocalDateString原来有如此之多的功能
toLocalDateString原来有如此之多的功能
439 0
toLocalDateString原来有如此之多的功能
|
IDE Java 开发工具
推荐一款代码神器,代码量至少省一半!
在我们 Java 项目里面,有很多 Java Bean 需要为每个属性生成 get/ set 方法,增删改属性都需要维护这些 get/ set 方法甚是麻烦。 今天给大家介绍一款能帮助我们简化这些代码的神器:Lombok!有了这个神器,你的 Java Bean 类的代码量至少可以省一半。
162 0
推荐一款代码神器,代码量至少省一半!
|
存储 人工智能 弹性计算
让数据更安全可用,阿里云存储多项新功能发布
9月23日,第六期阿里云存储新品发布会如约而至,带来公共云存储、混合云存储产品的最新进展与技术突破,助力用户在数字经济时代全面转型。
3492 0
让数据更安全可用,阿里云存储多项新功能发布
|
运维 监控 安全
远程研发能有多高效?手淘新版本上线只用了5天!
2020年注定是不平凡的一年,一场突如其来的新型冠状病毒肆虐全球,部分企业还在复工的路上稳阵脚、备粮草、找契机,“静候”复工的指令,而阿里的同学早已吹响了“无接触,云办公”的号角,全面开启远程研发协同办公的模式,利用移动研发平台,在短短一周时间且足不出户的情况下就实现了一个客户端新版本的研发、测试、灰度、发布、监控、运维、运营等一系列工作。
970 0
远程研发能有多高效?手淘新版本上线只用了5天!
|
SQL 流计算 算法
一个周内上线50个增长策略,竟然能这么高效!
年初的一个晨会上,用户增长负责人湘翁问我说:一个周内上线50个增长策略,技术兄弟们能做到么?
2644 0
一个周内上线50个增长策略,竟然能这么高效!
|
程序员
程序员总数3W+,阿里巴巴首次公开2018代码数据报告
扫描上述二维码或点我直达 免费领!
14052 0
|
开发者
【评论】有多少开发人员是超过四十的?
导读:原文作者Davy Brion在davybrion.com上发表的一篇《Thoughts On Developer Longevity》,由国内整理编译《有多少开发人员是超过四十的?》。文中探讨了开发人员是如何规划工作职责、提升自我价值。
855 0