Google Search、Google Maps、Google Docs、Google+、Google Calendar、Gmail、YouTube……实现所有 Google 服务的全部 20 亿行程式码统统放到一个程式库进行管理,这也许是全球在用的最大的单一程式库了。
Google 有多大?我们可以用收入、股票价格、客户规模,或者用虚拟的影响力来回答这个问题。不过这些并不是全部。Google 还是一个软件帝国。因此我们可以用程式码来回答这个问题。
在几天前出席 @Scale 大会时,Google 的 Rachel Potvin 给出了一个相当接近的答案。她估计执行 Google 所有网络服务(搜寻、Gmail、Google Maps 等)所需的软件大概相当于 20 亿行程式码。相比之下,自 1980 年代开始就一直研发的微软 Windows 操作系统(有史以来最复杂的单机软件之一)大概是 5,000 万行。
也就是说 Google 的开发量相当于 Windows 的 40 倍。
更令人吃惊的是,供 Google 25,000 名工程师使用的这 20 亿行程式码全部都放在了一个程式库。在公司内部,Google 把它的程式码当作了一个巨大的操作系统。“虽不能证明,”Potvin 说:“但我估计这是全世界在用的最大的单一程式库。”
Google 是一个极端的例子。但它的例子显示出在网络时代,我们的软件已经发展到何等复杂的地步──同时还显示了我们是如何变革程式码工具和哲学来适应这种增加的复杂性的。Google 的庞大程式库仅对内部使用,但是从某种程度来看,它相当于大家在网络上共用海量程式码的开原始程式码托管工具 GitHub。世界正在快速走向大规模程式码协作,这是我们跟上快速演变的网络服务的唯一办法。
GitHub 系统总监 Sam Lambert 说:“像 Google 这样拥有 25,000 名开发者,就意味着有着各种不同技能的人一起分享程式码。但是做为小公司你一样可以利用 GtHub 和开源获得其中的一部分优势。”
但麻烦的一面是开发管理 20 亿行规模的巨无霸并非简单的任务。
GitHub 实现的是让写程式码的人很容易就能分享程式码和协作。不过 GitHub 托管的不是一个软件专案,而是数百万。Google 则走得更远,把许多专案组合成了一个。由于要在那么多的工程师间协调如此庞大规模的程式码,这听起来似乎有点疯狂。但 Potvin 说他们做到了。
Piper 在弹奏
实际上,Google 开发了自己的“版本控制系统”来管理这些程式码,这个系统叫做 Piper,Piper 遍及了 Google 建构用来执行其所有线上服务,共覆盖了 Google 的 10 个资料中心。
当然,这个系统并不是装了 20 亿行程式码让公司内部人人都能读取那么简单。它还赋予了 Google 工程师非同寻常的方式来自由去使用和组合来自无数专案的程式码。Potvin 说:“这样的话做新专案的时候手上就有了海量的数据库。几乎所有事情都干完了。”此外,工程师的一次程式码变更可以马上部署到所有 Google 服务。也就是说一次更新就完成了全部升级。
这套系统也有一些限制。Potvin 说一些高度机密的程式码──如 Google 的 PageRank 搜寻算法是放在单独的数据库里面,仅供特定员工进入的。此外,Google 的设备操作系统 Android 和 Chrome 由于不在网络上跑,而且跟其他服务有很大的不同,所以也是单独存放在独立的版本控制系统里面的。但大部分 Google 程式码都是可以让软件模组、创意和解决方案进行自由流动。
软件助手
正如 Lambert 所言,开发经营这样一套系统需要的不仅仅是技术诀窍,更包括海量的计算能力。Piper 的资料量大概有 85TB,Google 的 25,000 名工程师每天要进行 45,000 次提交(变更)。这种资料规模和活动频繁度是相当壮观的。我们可以比较一下,Linux 操作系统大概有 1,500 万行程式码,分布在 40,000 个档案上,而 Google 的工程师每周就要修改 1,500 万行程式码,而且是分散在 250,000 份档案上。
同时,Piper 还必须减轻人类程式编写者的负担。它必须确保编写者程式码中添加了所有必要的档头;确保程式码变更时不会互相冲突;确保可以方便地排除错误和没用的程式码。这些事情都非常棘手,棘手到其中的部分工作已经不是人可以干的了。所以 Google 已经从原来的版本控制系统 Perforce 迁移到 Piper,现在大部分的 commit 都是由软件自动完成了。
这不是说自动软件去写程式码。它们的工作是生成软件执行所需的大量资料和设定档。“需要齐心协力才能保持程式码健康,”Potvin 说:“而这不仅仅是人的工作,也包括自动软件的。”
Piper 为人服务
其他人是否也能受益于类似的系统?当然。而且的确也有人这么做了。Facebook 的主应用程序大概有 2,000 万行程式码,他们也是把这些程式码当作一个专案。还有的也在做类似的事情,只是规模要小一些。但是一旦那些公司接近 Google 或 Facebook 这样的规模,那后勤保障可能就会出问题。好消息是 Google 和 Facebook 正在探索改变这一点──替所有人改变这一点。
这两家巨头目前正在合作一款开源版本控制系统,让所有人都可以进行大规模的程式码处理。其基础是 Mercurial。“我们在尝试看能不能让 Mercurial 达到 Google 程式库的规模,”Potvin 说。她表示,Google 正在监管 Facebook 类似工作的程式设计大咖 Bryan O’ Sullivan 等人密切合作。
这种做法似乎有些极端。从现在来看,没有几家公司的程式码能做到 Google 或者 Facebook 的规模。但在不久的将来,会的。因为软件正在蚕食世界。
- Google Is 2 Billion Lines of Code—And It’s All in One Place
(本文由 36Kr 授权转载)