面对20亿行代码,Google如何管理?

面对“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的规模。

原文发布时间为:2015-09-21

时间: 2024-11-05 14:41:03

面对20亿行代码,Google如何管理?的相关文章

面对 20 亿行代码,Google 如何管理?

面对"Google 这家公司有多大?"这种问题,你可能会用收入.股票价格.客户数量或者是形而上学的影响力来回答这个问题.但是,这还不是全部.Google 作为全球最大的互联网公司,我们当然可以用"互联网思维"来思考这个问题,比如用代码数量来衡量它.来自于 Google 的 Rachel Potvin,在周一举办的硅谷工程会议上给了我们一个可以参考的答案. 她表示,运行所有 Google 互联网服务的软件,包括了 Google 搜索.Gmail.Google 地图等,

每月亿行代码、全球数万研发,落地DevOps的协同平台DevCloud

为什么传统开发模式存在问题? 在信息化企业的这条路上,我们已经走得很远了,从少数单机到集群的规模壮大;软件生态也不断丰富完善,从底层系统到上层的业务分析,ERP ,数据库等自研定或是第三方应用.正式因为有了这些IT 基础,云计算也开始生根发芽. 越来越多的社会业务依赖着IT 技术,IT 技术工作者们也越来越期望自己的产品可以更快地响应社会不断变化的需求.首个软件公司的诞生已经过去了七十年,技术日新月异,业务发展迅速的公司也逐渐发现传统开发模式已经不再适用了.市场机遇不断扩大,企业业务需求相应增加

多少行代码才能完成下列项目?1亿行代码是神马概念?

class="post_content" itemprop="articleBody"> 多少行代码才能完成下列项目?据统计,平均一个 iPhone APP 是4万行代码,PS CS6 是5百万行,facebook 的总体项目则高达6000多万行代码-- 我们也可以从这张信息图中看到,早期的 Windows 3.1 只有200多万行代码,到了 Vista 年代则是将近5000万行,也可以看出 Windows 7 比 viata 精简了许多.

drawpath-只有20行代码!请大神帮忙看看,为什么drawPath( )会失效,但drawCircle( )却管用

问题描述 只有20行代码!请大神帮忙看看,为什么drawPath( )会失效,但drawCircle( )却管用 public class Hehe extends View { Path p; Paint p1; public Hehe(Context context AttributeSet attrs) { super(context attrs); // TODO Auto-generated constructor stub p=new Path();//定义一个路径 p.moveTo

南玻A发行20亿元公司债券获得证监会核准

网易财经9月8日讯 南玻A周三晚间发布公告称,公司发行不超过人民币20亿元公司债券的申请,已于2010年9月8日获得中国证券监督管理委员会发行审核委员会审核通过. 南玻A此前发布的公告显示,公司拟发行期限不超过7年的公司债券,发行规模上限为20亿元,可以为单一期限品种,也可以是多种期限的混合品种,且不向公司原股东作优先配售的安排. 公司承诺,此次发行公司债券的募集资金只用于偿还银行短期借款.补充公司营运资金,不直接或间接投资房地产业务.不直接或间接用于参股从事房地产业务的企业.

20个正则表达式必知(能让你少写1,000行代码)_正则表达式

正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 列目录时, dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的. 构造正则表达式的方法和创建数学表达式的方法一样.也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式.正则表达式的组件可以是单个的字符.字符集合.字符范围.字符间的选择或者所有这些组件

20个正则表达式必知(能让你少写1,000行代码)

正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 列目录时, dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的. 构造正则表达式的方法和创建数学表达式的方法一样.也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式.正则表达式的组件可以是单个的字符.字符集合.字符范围.字符间的选择或者所有这些组件

Keras 之父讲解 Keras:几行代码就能在分布式环境训练模型 | Google I/O 2017

作为号称是 TensorFlow 最好用.对新手最友好的 API,一起来看看它的神通在哪里. Francois Chollet:对许多使用场景而言,canned estimator 是相当不错的选择.但如果你要做的事并没有现成的 canned estimator,怎么办?如果需要写自己的定制模型呢?这时,就到了 Keras API 派上用场的时候. 什么是 Keras API? 简而言之,它就是一个用于创建 TensorFlow 模型的高级 API,你可以与它一起使用 estimator cla

魅族20亿融资背后:营销存短板 估值仅小米1/9

中介交易 SEO诊断 淘宝客 云主机 技术大厅 原标题:魅族大变革:黄章复出半年做了什么,估值仅小米1/9 比小米早成立3年的魅族,却被后来者所反超,其病症在于营销推广和人员激励. 理财周报见习记者 李碧雯 实习记者齐欢乐/深圳报道 国内移动手机市场目前是一片红海,竞争激烈程度堪比三国杀. 国内手机厂商不仅要面对外资手机生产商如苹果.三星手机的冲击,而且还要面对来自于TCL.美图等后来者的追赶,随时都将面临被抢市场份额的风险,如此竞争环境足以让每个做手机的大佬们夜不能寐了. 因此,为了在风云变幻