面对“Google 这家公司有多大?”这种问题,你可能会用收入、股票价格、客户数量或者是形而上学的影响力来回答这个问题。但是,这还不是全部。Google 作为全球最大的互联网公司,我们当然可以用“互联网思维”来思考这个问题,比如用代码数量来衡量它。来自于 Google 的 Rachel Potvin,在周一举办的硅谷工程会议上给了我们一个可以参考的答案。

她表示,运行所有 Google 互联网服务的软件,包括了 Google 搜索、Gmail、Google 地图等,大约有20亿行代码。相比之下,从20世纪80年代就开始开发的 Windows 操作系统——有史以来为单一计算机所开发的最复杂的软件工具之一,只有5000万行代码。

所以简单一刀切的话,建立 Google 相当于建40个 Windows 系统。

当然,5000万行代码驱动的仅仅是 Windows 系统本身,而20亿行代码则是 Google 的全部。Google 的业务覆盖范围及其广,包含了搜索、地图、文档、社交、日历、邮件、视频,以及其他互联网服务,所有20亿行代码都存放在代码资源库中,提供给全部2.5 万名 Google 工程师调用。在公司内部,Google 对待它的代码就像对待一个巨大的操作系统。Potvin 表示:“虽然不能证明这一点,但我认为这是全球最大的单一信息库。”

Google 是一个极端例子,但它展示了如今的软件在互联网时代有多复杂,以及我们如何改变使用的编码工具和理念,以适应这种复杂性。Google 的巨大资源库仅适用于内部程序员,但在某种程度上,它已经类似于Github——一个向所有公众开放的源代码库,工程师可以通过互联网共享代码。我们正在 走向一个需要经常大规模合作代码的世界,也只有这样才能跟上现代互联网服务的发展。

GitHub 就表示:“Google 拥有2.5万名工程师,他们可以与内部拥有各种不同技能的人分享代码。但是小公司可以使用 GitHub 和开源,得到同样的优势。”

另一方面,建立并运行一个20亿行代码的庞大系统,并不简单。Lambert 表示:“这是一项技术挑战,也是一个巨大壮举,数字相当惊人。”

GitHub 可以让程序员轻松共享代码和协作,它涵盖了数以百万计的项目,但没有直接容纳软件项目。Google 则更进了一步,将很多项目合并成一个。鉴于涉及许多工程师以及同时应付如此多代码的难度,能做到这一点十分地疯狂。

Piper

Google 为了同时应付所有代码,已经建立了自己的“版本控制系统”:Piper。它在整个庞大的网络基础设施上运行,系统覆盖了10个不同的 Google 数据中心。

这 一系统不仅将所有20亿行代码都存放在单一的系统内,并提供给公司内部工程师调用,更给工程师提供了更多自由,可以使用及合并横跨无数项目的代码。 Potvin 表示:“当你开始一个新项目,Google 已经提供了有丰富资源的图书馆,几乎一切事情都已经帮你完成。更重要的是,工程师可以在所有 Google 服务中进行代码变更和立即部署。更新一件事,就能够更新一切。”

当然使用这个系统也有限制。Potvin 表示,某些高度机密的代码,如PageRank 搜索算法,被存储在一个单独的资源库中,只提供给特定员工。而且,由于Android 和 Chrome两个操作系统与那些在线服务有非常大的区别,Google 会将它们的代码存储在单独的版本控制系统中。但在大多数情况下,Google 代码都是一个整体。

机器程序员

Lambert 指出,构建和运行这样的一个系统,不仅需要知道如何做到这种事,还需要庞大的计算能力。Piper 每天需要处理大约85TB的数据(即85000GB),Google 的 2.5万名工程师每天会对资源库做出45000次提交(修改)。

与 此同时,Piper 还必须能删去人类程序员所产生的大量冗余。它必须确保代码准确无误,程序员不会相互干涉,要能从资源库中删除错误和未使用的代码。而正是存在这一切困 难,Piper不得不接手一些人类的工作。现在,Google 已经从之前的一个版本控制系统Perforce,切换到了 Piper,让机器来完成一部分工作。

这并不意味着 Google 要让机器人编写代码,但它们确实可以生成很多运行软件所需的数据和配置文件。程序员和机器人需要协调一致,维护代码健康。现在已经不只有人类在维护代码了。

让所有人受惠的 “Piper”

其他公司能否受益于同类系统呢?当然能,而且也确实有公司这样做了。Facebook 的主应用有2000万行以上代码,公司把整个事情作为一个单独的项目。还有一些公司以较小规模在做同样的事情,而当这些公司不断接近 Google 或 Facebook 的规模,也会做同样的事。但Google 和 Facebook 都在探索能够改变每个人的方法。

两家巨头正在开发一个开源的版本控制系统,任何人都可以用它来处理大规模代码。它基于现有系统Mercurial,Google正试图扩展 Mercurial 资源库,达到Google的规模。

文章转载自 开源中国社区[https://www.oschina.net]

面对 20 亿行代码,Google 如何管理?相关推荐

  1. 2020 年腾讯新增 20 亿行代码,鹅厂第一编程语言还是它

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:推荐19个github超牛逼项目!个人原创100W +访问量博客:点击前往,查看更多 近日,腾讯发布了<20 ...

  2. 腾讯 2020年新增 20 亿行代码,C++蝉联腾讯最受欢迎的编程语言

    作为国内科技巨头,腾讯的产品早已覆盖到了每个国人手中,不过这家公司对于自身技术一直比较「低调」.3 月 18 日下午,腾讯今天对外发布 2020 年度<腾讯研发大数据报告>,披露了 202 ...

  3. 为什么Google上十亿行代码都放在同一个仓库里?

    导读:相对于一般公司,Google 使用了单一代码仓库,很多人不理解为什么这么做.本文作者是谷歌基础设施小组的工程师,对这个问题进行了详细解读.译者在翻译过程中受益良多,也相信大家看完之后会认为自己还 ...

  4. IBM开源了5亿行代码数据集,里面最多的编程语言却不是Python

    谷歌服务包含 20 亿行代码,一辆汽车的系统包含 1 亿行代码--写代码.debug 这么大的工作量不交给 AI 来做能行? 机器之心报道,编辑:小舟.陈萍. 让 AI 自动生成代码,是很多开发者的梦 ...

  5. Google 为什么把几十亿行代码放在一个库

    <ACM通信>有一篇论文<为什么 Google 要把几十亿行代码放在一个库?>,作者是谷歌基础设施小组的工程师.作者详细讲述了Google的代码为什么全部放在一个库里面. 一. ...

  6. 1100亿行代码!华为是如何管理的?

    二十年前,我第一次写代码的时候,用记事本写的ASP程序,写完手工复制到IIS服务器上,然后检查下页面的基本功能,就算是测试通过了. 那个时候,业务简单,系统也简单,可以用这种手工作坊的方式来干,随着软 ...

  7. 谷歌为什么把几十亿行代码放在一个库?

    <ACM通信>有一篇论文<为什么 Google 要把几十亿行代码放在一个库?>,作者是谷歌基础设施小组的工程师.作者详细讲述了Google的代码为什么全部放在一个库里面. 一. ...

  8. Python 在腾讯研发排第 5,鹅厂 2019 年新增 12.9 亿行代码

    综合整理:程序员的那些事(id:iProgrammer) 2020 年元旦,蚂蚁金服在其元旦微博中提到,支付宝在 2019 年一共新增了 4 亿代码. 近日,腾讯发布了<2019 年腾讯研发大数 ...

  9. 12亿行代码,阿里巴巴这一年的技术报告和梦想报告

    78年前,图灵用代码编译出的情报破解系统,让二战至少提前2年结束,挽救了2000万人的生命:50年前,登月科学家敲下的一行关键代码,启动了阿波罗号的着陆,成就了人类的一大步:30年前,蒂姆·伯纳斯·李 ...

最新文章

  1. Serverless的理解
  2. MySQL高级 - 锁 - MyISAM表锁 - 写锁
  3. 树上有10只鸟,打死1只,还剩几只?答案太牛了!
  4. ruby 爬虫爬取拉钩网职位信息,产生词云报告
  5. MySql的Delete、Truncate、Drop分析
  6. python数据分析的发展前景_Python+BI分析5000条招聘数据,原来数据分析工作在这儿最好找...
  7. tensorflow一维卷积输入_深度学习中的反卷积(Transposed Convolution)
  8. LoadRunner参数化---数据文件属性 之 数据分配方法和数据更新方法
  9. java程序设计颜志军_信息管理系统设计方案.doc
  10. ubuntu下,rubyonrails环境搭建
  11. WebService wsdl wsimport
  12. 订阅者Subscriber的编程实现
  13. python ffmpeg模块_python 模块之-ffmpeg 中文参数对照表
  14. 面试必问 K8S 的经典题目,来看看你会几个?
  15. 用matlab画5日均线,用MATLAB求移动平均线,不用MOVAVG函数,求MA5,MA10 – MATLAB中文论坛...
  16. 2023年还在问前端怎么学?一份前端学习指南
  17. Unity Universal RP asset not assigned
  18. 我的世界1.12.2java下载_我的世界java版整合包
  19. python统计元音字母个数_计算Python中的元音(Counting vowels in python)
  20. [职场全攻略] 【职场攻略】看透“潜”职场规则

热门文章

  1. C#[Serializable]在C#中的作用-NET 中的对象序列化
  2. HDU 1248 寒冰王座
  3. NetStream.appendBytes, 走向Flash P2P VOD的第一步
  4. 好像是第一次在公司外的论坛上公开演讲
  5. 实现windows标准的选择文件夹功能
  6. Cookie和会话状态 (转)
  7. 如何得到iterator的当前元素_链表进化!双向链表+迭代器(Iterator)!
  8. 【Android 逆向】类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 拷贝 DEX 文件到内置存储 | 加载并执行 DEX 字节码文件 )
  9. 【OkHttp】OkHttp 源码分析 ( 同步 / 异步 Request 请求执行原理分析 )
  10. 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 )