面对谷歌 这家公司有多大?这种问题,你或许会用收入、股票价格、顾客数目或者是形而上学的影响力来回答这个问题。
但,这还不是全部。
谷歌 作为全球最大的网络公司,大家当然可以用网络思维来考虑这个问题,譬如用代码数目来衡量它。
源于 谷歌 的 Rachel Potvin,在周一举办的硅谷工程会议上给了大家一个可以参考的答案。
她表示,运行所有 谷歌 网络服务的软件,包含了 谷歌 搜索、Gmail、谷歌地图等,大约有20亿行代码。
相比之下,从20世纪80年代就开始开发的 Windows 操作系统有史以来为单一计算机所开发的最复杂的软件工具之一,只有5000万行代码。
所以简单一刀切的话,打造 谷歌 等于建40个 Windows 系统。
当然,5000万行代码驱动的只是 Windows 系统本身,而20亿行代码则是 谷歌 的全部。
谷歌 的业务覆盖范围及其广,包括了搜索、地图、文档、社交、日历、邮件、视频,与其他网络服务,所有20亿行代码都存放在代码资源库中,提供给全部2.5万名 谷歌 工程师调用。
在公司内部,谷歌 对待它的代码就像对待一个巨大的操作系统。
Potvin 表示:虽然不可以证明这一点,但我觉得这是全球最大的单一信息库。
谷歌 是一个极端例子,但它展示了现在的软件在信息互联年代有多复杂,与大家怎么样改变用的编码工具和理念,以适应这种复杂性。
谷歌 的巨大资源库仅适用于内部技术员,但在某种程度上,它已经像Github一个向所有公众开放的源码库,工程师可以通过网络共享代码。
大家正在走向一个需要常常大规模合作代码的世界,也只有如此才能跟上现代网络服务的进步。
GitHub 就表示:谷歌 拥有2.5万名工程师,他们可以与内部拥有各种不同技能的人推荐代码。
但小公司可以用 GitHub 和开源,得到同样的优势。
其次,打造并运行一个20亿行代码的庞大系统,并不简单。
Lambert 表示:这是一项技术挑战,也是一个巨大壮举,数字相当惊人。
GitHub 可以让技术员轻松共享代码和协作,它涵盖了数以百万计的项目,但没直接容纳软件项目。
谷歌 则更进了一步,将不少项目合并成一个。
鉴于涉及很多工程师与同时应对这样多代码的困难程度,能做到这一点十分地疯狂。
Piper谷歌 为了同时应对所有代码,已经打造了我们的版本控制系统:Piper。
它在整个庞大的互联网基础设施上运行,系统覆盖了10个不一样的 谷歌 数据中心。
这一系统不只将所有20亿行代码都存放在单一的系统内,并提供给公司内部工程师调用,更给工程师提供了更多自由,可以用及合并横跨无数项目的代码。
Potvin 表示:当你开始一个新项目,谷歌 已经提供了有丰富资源的图书馆,几乎所有事情都已经助你完成。
更关键的是,工程师可以在所有 谷歌 服务中进行代码变更和立即部署。
更新一件事,就可以更新所有。
当然用这个系统也有限制。
Potvin 表示,某些高度机密的代码,如PageRank 搜索算法,被存储在一个单独的资源库中,只提供给特定职员。
而且,因为Android 和 Chrome两个操作系统与那些在线服务有很大有什么区别,谷歌 会将它们的代码存储在单独的版本控制系统中。
但在大部分状况下,谷歌 代码都是一个整体。
机器技术员Lambert 指出,构建和运行如此的一个系统,不只需要了解怎么样做到这种事,还需要庞大的计算能力。
Piper 天天需要处置大约85TB的数据(即85000GB),谷歌 的 2.5万名工程师天天会对资源库做出45000次提交(修改)。
同时,Piper 还需要能删去人类技术员所产生的很多冗余。
它需要确保代码准确无误,技术员不会相互干预,要能从资源库中删除错误和未用的代码。
而正是存在这所有困难,Piper不能不接手一些人类的工作。
目前,谷歌 已经从之前的一个版本控制系统Perforce,切换到了Piper,让机器来完成一部分工作。
这并不意味着 谷歌 要让机器人撰写代码,但它们确实可以生成不少运行软件所需的数据和配置文件。
技术员和机器人需要协调一致,维护代码健康。
目前已经不仅有人类在维护代码了。
让所有人受惠的 Piper其他公司能否受益于相同种类系统呢?当然能,而且也确实有公司如此做了。
facebook的主应用有2000万行以上代码,公司把整个事情作为一个单独的项目。
还有一些公司以较小规模在做同样的事情,而当这类公司不断接近 谷歌 或 facebook 的规模,也会做同样的事。
但谷歌 和 facebook 都在探索可以改变每一个人的办法。
两家巨头正在开发一个开源的版本控制系统,其他人都可以用它来处置大规模代码。
它基于现有系统Mercurial,谷歌正试图扩展 Mercurial 资源库,达到谷歌的规模。