版权声明:本文为博主原创文章未经博主允许不得转载。 /song/article/details/
Google兑换代码有多庞大要回答这个问题,我们可以看收入看股价,看客户数量看影响力。但是这都还不够充汾说到规模,那么Google兑换代码绝对是一个巨大的计算机软件帝国为了印证着一点,我们还可以看看Google兑换代码的代码规模
周一,Google兑换代碼员工 在一个硅谷举办的工程会议上提到了代码量这个问题(戳看视频请科学上网)。根据她的估计你平时用到的Google兑换代码互联网服務的软件(包括搜索服务、邮箱、地图)的总代码量,大约有20亿行之多相比之下,微软公司的Windows操作系统作为世界上最复杂的个人电脑操作系统,从1980年代至今不断研发和演化其代码量规模也不过是5千万行而已。
所以说把Google兑换代码的代码全部重新构建一次,其规模相当於把Windows系统构建40次之多其实和Windows系统作比较是合乎情理的(译注:作者的意思是:可能会有人质疑,Windows只是一个操作系统软件但是Google兑换代码搜索,GmailGoogle兑换代码地图是好几个软件,用一个软件的代码量与好几个软件的代码总量做比较貌似不合乎情理,作者在后面会解释这个问題)
和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兑换代码做到了。
简单来说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这种系统中收益呢当然可以,并且他们正在这样做Facebook应用的总代码量也已经达箌了2亿行之多,而且Facebook也是将整个代码看成一个整体工程的其他的企业也在这么做,只是规模上稍微小了一些对于那些与Google兑换代码或者Facebook規模差不多的公司来讲,都可以采用这样的形式不过现在Google兑换代码和Facebook正在探索新的方法,从而让每个人都能从中获益
两大IT巨头目前都茬研究,如何让超大规模的开源版本控制系统可供所有人使用这项研究是基于已经存在的Mercurial系统开展的。“我们正在尝试是否能够把Mercurial系統扩展到Google兑换代码代码仓库的规模。”Potvin指出。目前Google兑换代码正在和编程大师Bryan O’Sullivan以及其他Facebook的程序员们通力合作争取在这方面取得突破。
這看上去也许有点儿极端毕竟目前大多数公司对代码的操作都达不到Google兑换代码或者Facebook的那个级别。但是在不久的将来他们就会变成那样。