2019年8月3日 阅读
1.Google论文与开源
自1998年成立,至今Google已走过20个年头。在这20年里,Google不断地发表一些对于自己来说已经过时甚至不再使用的技术的论文,但是发表之后总会有类似系统被业界实现出来,也足以说明google的技术至少领先业界数年。在Amazon不断引领全球云计算浪潮开发出一系列面向普罗大众的云产品的同时;Google也在不断引领构建着满足互联网时代海量数据的存储计算和查询分析需求的软硬件基础设施。
本文对Google在这20年中发表的论文进行了一个简单的总结和整理,主要选择了分布式系统和并行计算领域相关的论文,其中内容涉及数据中心/计算/存储/网络/数据库/调度/大数据处理等多个方向。通过这样的一个总结,一方面可以一窥Google强大的软硬件基础设施,另一方面也可以为不同领域的开发人员提供一个学习的参考。可以通过这些文章去了解上层应用的架构设计和实现,进而可以更好的理解和服务于上层应用。同时这些系统中所采用的架构/算法/设计/权衡,本身也可以为我们的系统设计和实现提供重要的参考。
通过Google论文可以了解到系统整体的架构,通过对应开源系统可以在代码层面进行学习。具体如下图:
两个维度:时间维度上可以分为过去,现在和未来。Google的那些论文就属于未来,看看它们,那可能是未来要做的,当然慢慢地它们也会成为过去;经典的理论的东西,放到过去这个维度,它们是非常重要的,这决定了对系统理解的深度和高度;现在,就是正在做的或者符合目前实际环境可以直接借鉴的。人们有时候往往喜欢抓着未来,总是忽略了过去和现在,又或者是仅看着当前,忽略了未来和过去。空间维度上可以分为上层和底层,上层是指依赖于我们自己系统的那些应用,底层则指我们的系统本身底层所依赖的那些。有时候为了继续前进,需要跳出当前的框框,从多个维度上去学习,通过不断学习反过来进一步促进当前系统的演化。
三个层次:如果要了解其他系统,可以从三个层次去学习,先大概了解架构,然后深入到一些具体的细节问题,最后如果有时间还可以继续深入到代码级别。结合本文的第一张图来说就是:可以通过Google论文了解整体架构,然后通过开源系统相关wiki或文档可以了解到更细节的一些东西,最后结合开源系统还可以看到实际的代码实现。
3.2 合久必分,分久必合
天下大事,合久必分 分久必合
–三国演义
3.2.1 分
实例:
1.分布式数据库:从MegaStore开始到后来的Spanner F1,不断弥补着NoSQL的不足。同时Spanner自身仍在不断演化,开始具备更加丰富的SQL和OLAP支持。
2.流处理和批处理的统一:Cloud DataFlow完成了编程接口层面的统一,而Mesa则解决了数据层面的结合。
3.在线离线混部:Borg。
4.软硬件结合:整个基础设施,就是在解决一个软件如何适配新硬件的问题。通过上层分布式系统屏蔽底层数据中心细节,实现”Datacenter As a Computer“。
3.3 理论与实践相结合
3.3.1 ”新瓶装旧酒“
纵观过去的20年,我们可以看到如果单纯从理论上看,Google的这些论文并没有提出新理论。它们所依赖的那些基础理论,基本上都是上个世纪70/80年代就已经提出的。而Google的系统只是把这些经典理论结合自己的业务场景,进行了实践并发扬广大使之成为业界潮流。看起来虽然是”新瓶装旧酒”,但是却不能小觑这一点,因为旧酒在新瓶里可能会产生新的化学反应,进而创造出新的完全不同的“酒”。如果忽略了它,当新”酒“成为新浪潮之时,就再也无法站立在浪潮之巅。
3.3.2 两个阶段
如果从理论与实践的这个角度来看,我们可以把过去的20年分成两个阶段:前十年主要解决的是可扩展性问题,理论主要源自分布式系统领域;后十年在解决了可扩展问题后,开始考虑易用性问题,提供更加方便的编程接口和一致性模型,这个阶段更多地是借鉴传统关系数据库领域的一些做法。再回到当下,从AI的再度流行中我们依然可以看到其所依赖的理论基础,依然是在上个世纪就已经提出的,而今天在互联网时代大规模的数据和计算能力这个背景下,重新焕发了生命。在解决完可扩展易用性问题后,使得可以对大规模数据进行方便地存储计算和查询之后,下一个十年人们开始关注如何进一步挖掘数据,如何借助这些数据去完成以前未完成的构想,这个过程中仍在不断学习应用前人的经典理论。
3.3.3 实践联系理论
从另一个方面来说,如果要真正理解这些论文,除了论文本身内容之外,也还需要去了解传统的分布式系统和关系数据库理论。比如Spanner那篇论文,如果只看论文本身,没有关系数据库和分布式系统理论基础的话估计很难看懂。有时候可能还需要多看看论文的参考文献,之后再看才会理解一些。很多研究领域的大牛们,经常会调侃做工程的家伙们,他们说”这些家伙看着就像生活在5,60年代的老家伙“,为什么呢,因为这些家伙们总是用一些很丑陋的方法去解决一个科学家们早在几十年前就给出了完美解决方案的问题,但是这些家伙看起来对此一无所知。当然了,做工程的也会挖苦下那些研究家们老是指指点点,从来不肯俯下身子来解决实际问题。但是实际上,如果你是做工程的,那就应该多看看研究家们的成果,其实很多问题的确是人家n多年前就已经提出并很好解决了的。如果是做研究的,那就多接触下工程实践,理解下现实需求,弥补下理论与实践的差距。
3.3.4 分布式理论实践
具体到分布式系统领域,我们可以发现正是通过与实践相结合,理论才逐渐赢得科学界和工业界的重视。在此之前,分布式理论研究一直处于非常尴尬的状态,与实践的隔阂尤其严重,很多研究工作局限在研究领域,严重脱离现实世界。关于这一点从图灵奖的颁发上可以看出来,自1966年图灵奖首次颁发以来,直到2013年Lamport获奖之前,可以说还没有一个人因为在分布式系统领域的贡献而获得图灵奖。虽然有些获奖者的研究领域也涉及到分布式系统,但是他们获奖更多是因为在其他领域的贡献。而反观程序设计语言/算法/关系数据库等领域均有多人获奖,同时这些领域的研究成果早已被广泛应用在工业界,通过实践证明了其价值。可以说正是因为互联网的兴起,在Google等公司的分布式系统实践下,分布式理论逐渐被广泛应用到各个实际系统中,这也是 Lamport能够获得图灵奖的重要原因。
4.云计算的起源与发展
本节我们将跳出Google论文的范畴,以更广泛的视角看一下今天的云计算。下面更多的是描述一些历史,进行一些”考古”,希望这个过程可以带来更多的启发和思考。
4.1 从Google论文说起
4.1.1 “冰山一角”
首先还是回到第一张图,我们把图缩小一下,并重点关注图的顶部。
可以看到,在Google强大的软硬件基础设施之上,在其云平台上暴露给外部用户使用的则寥寥无几。这个场景就像我们看到了一座冰山,露在水面上的只有那一角。即便是已经开放给外部用户的Cloud Bigtable是2015年才发布的,此时距离Bigtable论文发表已经过了快10年。Cloud Spanner是2017年,也已经是论文发表5年之后。虽然在2008年就推出了GAE,但是也一直不温不火。
将Google的这些系统与AWS的各种云产品对比一下,可以发现两者的出发点类似都是为了实现”Datacenter As a Computer“,但是目标用户不同。Google这些系统面向的是内部的搜索广告业务,而AWS则致力于让外部客户也能实现”Datacenter As a Computer“。就好比一个是面向大企业客户的国有大银行,一个是面向小微客户的普惠金融。从技术->产品->商品->服务的角度来看,Google在技术上做到了独步天下,但是要提供给外部客户后面的短板仍然需要补足。
早在2011年,Google员工Amazon前员工Steve Yegge在G+上发表了一篇文章对Google和Amazon进行了有趣的对比:Stevey’s Google Platforms Rant ,中文版。其中非常重要的一点就是Amazon对于服务及服务化的重视。
2015年Sundar Pichai成为Google新任CEO。进行了一系列调整,找来了VMware的联合创始人Diane Greene领导谷歌的企业及云业务,相关新闻:谷歌公有云GCP轰隆崛起?,可以看到Google正在做出很多改变,开始将云计算作为公司重要战略。同时开源了很多技术如Kubernetes和TensorFlow,试图通过容器、CloudNative和AI等新兴领域实现弯道超车。
4.1.2 为啥要发论文
还有一个有趣的对比,可以看到在过去20年Google发表了非常多的论文来介绍它的内部系统,但是反观Amazon,对于它的云产品内部实现可以说介绍的非常少,相关论文只有寥寥几篇。
对于Google来说,发表论文主要是为了增加个人和公司的业界影响力,便于赢得声誉吸引人才。当然Google内部同样有非常严格的保密机制,禁止员工向外界透露内部系统信息,除非获得了授权。通过前面的一些论文也可以看到,从系统做出来上线算,真正论文发表通常是5年之后的事情了,而发表的时候内部已经有下一代系统了。按照中国古话说”富贵不还乡,如锦衣夜行“,内部再牛逼别人看不到就没有存在感。
反观Amazon,则没有这个苦恼,因为它云平台上的所有系统都是对外开放的,外面的人可以切实地感受到它的存在,大部分情况下都不需要通过论文来提升存在感。
4.2 ”5朵云“的起源
IBM的CEO Thomas J. Watson在1943年说过这样一段话:”I think there is a world market for maybe five computers,” 后来在Cloud Computing概念提出后,逐步演变成5朵云的说法。
4.3 AWS
关于售卖计算能力给外部客户的想法最早源自2003年Benjamin Black和Chris Pinkham写的一篇报告中,这个想法引起了Jeff Bezos的兴趣。之后2004年就开干了,当时大家一致觉得Pinkham最适合去干这件事,但是他那个时候正想着回到他的家乡南非,于是Amazon就让他在南非开了新的办公室,在那里他们创建了EC2团队并开发出了EC2。Benjamin Black 在一篇文章中介绍了这段有趣的历史。
2006年AWS正式上线了EC2和S3,自此拉开了云计算的序幕。其后续整个发展的详细历程可以参考:Timeline of Amazon Web Services。
此外还有一个比较有意思的问题:为什么 AWS 云计算服务是亚马逊先做出来,而不是 Google ?其中有偶然也有必然,简要总结一下就是”天时、地利、人和“。
参考文献
https://www.gcppodcast.com/post/episode-46-borg-and-k8s-with-john-wilkes/
https://blog.risingstack.com/the-history-of-kubernetes/
Borg, Omega, and Kubernetes
http://www.wired. com/2015/09/google-2-billion-lines-codeand-one-place/
https://en.wikipedia.org/wiki/Eric_Brewer_
如何看待谷歌工程师透露谷歌有20亿行代码,相当于写40遍Windows?
Return of the Borg: How Twitter Rebuilt Google’s Secret Weapon
http://www.infoq.com/cn/news/2014/08/google-data-warehouse-mesa
https://en.wikipedia.org/wiki/Amazon_Web_Services
https://en.wikipedia.org/wiki/Thomas_J._Watson