面对“谷歌有多大?”这个问题,你可能会从收入、股价、客户数量或形而上的影响力等方面来回答这个问题。但这还不是全部。作为全球最大的互联网公司,谷歌当然可以用“互联网思维”来思考这个问题,比如用代码量来衡量。来自谷歌的RachelPotvin在周一的硅谷工程会议上给了我们一个可以参考的答案。她说,运行谷歌所有互联网服务(包括谷歌搜索、Gmail、谷歌地图等)的软件大约有20亿行代码。相比之下,自1980年代以来一直在开发的Windows操作系统——有史以来为单台计算机开发的最复杂的软件工具之一——只有5000万行代码。所以如果简单,一刀切的话,建谷歌相当于建40个Windows系统。当然,5000万行代码驱动的只是Windows系统本身,而20亿行代码则全是Google的。谷歌的业务覆盖范围极其广泛,包括搜索、地图、文档、社交、日历、邮件、视频和其他互联网服务。所有20亿行代码都存储在代码存储库中,并提供给所有25,000名Google员工。工程师电话。在内部,Google将其代码视为一个巨大的操作系统。“虽然我无法证明这一点,但我认为它是世界上最大的单一信息库,”Potvin说。Google是一个极端的例子,但它显示了当今互联网时代的软件是多么复杂,以及我们如何改变了我们使用它的方式。编码工具和概念以适应这种复杂性。Google庞大的代码库只对内部程序员开放,但在某种程度上,它已经变得类似于Github——一个对所有公众开放的源代码库,工程师们可以通过互联网共享代码。我们正在走向一个经常需要大规模协作代码以跟上现代Internet服务步伐的世界。GitHub表示:“谷歌有25,000名工程师,他们可以在内部与不同技能的人共享代码。但小公司可以使用GitHub和开源获得同样的优势。另一方面,构建并运行一个拥有20亿行代码的庞大系统并不简单。兰伯特说:“这是一项技术挑战,也是一项巨大的壮举。数字相当惊人。”“GitHub允许程序员轻松共享代码和协作,它跨越数百万个项目,但并不直接容纳软件项目。Google更进一步,将许多项目合并为一个项目。鉴于涉及的工程师众多,而且同时进行,这太疯狂了处理这么多代码是困难的。PiperGoogle建立了自己的“版本控制系统”,以便一次处理所有代码:Piper。它运行在整个海量网络基础设施上,该系统覆盖了10个不同的Google数据中心。这系统不仅将所有20亿行代码存储在一个系统中,并提供给内部工程师调用,而且还为工程师提供了更多的自由,可以跨无数项目使用和组合水平代码。Potvin说:“当你开始一个新的项目,谷歌已经提供了丰富的资源库,几乎所有的事情都已经为你做好了。此外,工程师可以更改代码并即时部署到所有Google服务中。更新一件事并更新所有内容。“当然,使用这个系统有一些限制。某些高度机密的代码,例如PageRank搜索算法,存储在一个单独的存储库中,并且只对特定员工可用,”Potvin说。这些在线服务非常不同,Google将它们的代码存储在单独的版本控制系统中。但在大多数情况下,谷歌代码是一个整体。机器程序员兰伯特指出,构建和运行这样一个系统,不仅需要知道如何做这种事情,还需要巨大的计算能力。Piper每天需要处理大约85TB的数据(即85,000GB),Google的25,000名工程师每天会向存储库提交45,000次(修改)。与此同时,Piper必须能够消除人类程序员创造的大量冗余。它必须确保代码正确,程序员之间不会相互干扰,并且必须能够从存储库中删除错误和未使用的代码。由于所有这些困难,派博不得不接手一些人工工作。现在,谷歌已经从以前的版本控制系统Perforce切换到Piper,让机器完成一些工作。这并不意味着谷歌会让机器人编写代码,但它们确实会生成运行软件所需的大量数据和配置文件。程序员和机器人需要协调以维护代码健康。人类不再是唯一维护代码的人了。“Piper”的其他公司能否从类似系统中获益?当然可以,而且有公司这样做。Facebook的主要应用程序有超过2000万行代码,公司将整个应用程序视为一个单独的项目。也有一些公司正在做同样的事情,但规模较小,并且在接近谷歌或Facebook的规模时也会做同样的事情。但谷歌和Facebook都在探索改变每个人的方法。这两家巨头正在开发一个开源版本控制系统,任何人都可以使用它来处理大规模代码。它基于现有系统Mercurial,Google正试图将Mercurial存储库扩展到Google的规模。
