Twitter的本海因德曼
《连线》周二刊登了一篇署名为卡德梅茨(Cade Metz)的评论文章,借谷歌网络帝国最核心的软件系统伯格(Borg)分析了Twitter如何重建谷歌的秘密武器。
原文如下:
约翰威尔克斯(John Wilkes)说,加入谷歌就象是《黑客帝国》中的尼欧(Neo)吞下红药丸一样,那就是选择了觉醒。
4年前,威尔克斯只是知道谷歌这家公司而已。他与芸芸众生一样,每天的生活都与谷歌的各种服务如谷歌搜索、Gmail、谷歌地图等息息相关。随后,他加入了谷歌网络帝国最核心的工程技术团队,那个技术团队就相当于谷歌的大脑,支持谷歌所有的网络服务所需的最基本的硬件和软件系统都是由他们设计的。
这些系统横跨在一个全球性的数据中心网络之上,每一秒处理的网络指令高达数十亿条。威尔克斯第一次看到那些系统工作时的场景时,他感觉自己就象是吞下了红药丸之后的尼欧一样,摆脱了矩阵(Matrix)创造的虚拟世界,突然就看到了一个由无数机器组成的庞大网络。
看着庞大的网络,他变得不知所措了。要知道,他可是一位在惠普试验室工作了25年的资深研究员,多年来一直在从事现代计算最先进技术的研究工作。
威尔克斯说:“我是过去时代的人,我认为兆级容量就已经很大了。但是等我到了谷歌之后,我必须在所有的数据后面都加上3个0。”他解释说,那种感觉就象是一个人从生活了很多年的小地方突然来到一个全新的广阔天地一样。在谷歌,某个存储数据的系统剩余的空间还剩几个PB(存储容量单位,1PB=1000GB=1000000MB)时,系统就会向管理员发出警报。换句话说,只要几个小时,谷歌数据中心里的一组设备就会被海量的数据填满。
当他还在绞尽脑汁地想象谷歌的数据中心帝国到底有多大时,威尔克斯接到任务,负责开发支持谷歌整个网络帝国的软件系统。
这个软件系统被称作“伯格”(Borg)系统,它也是谷歌之所以能够迅速成为互联网上最强大的力量背后的最隐秘的机密之一。威尔克斯甚至都不愿叫它“伯格”。他说:“我宁愿称之为不会被命名的系统。”但他透露,谷歌使用该系统已有9、10年的光景了。他和他的团队正在开发一个新版本的工具,产品代码为“欧米茄”(Omega)。
伯格系统可以非常高效地将任务分配到谷歌数量庞大的计算机服务器中去。威尔克斯称,这个系统的效率非常高,它可能帮谷歌省下了足以再多建一个数据中心的成本。没错,一个完整的数据中心。那也许看起来就象是天外来客一样,从某种角度来说,它确实是天外来客。但是,谷歌为了运行其庞大的网络帝国而开发的新时代硬件和软件通常会慢慢地渗透到互联网的各个角落。伯格系统也不例外。
在Twitter,有一个小规模的工程师团队利用加州伯克莱大学的研究员们开发出来的一个名为“Mesos”的软件平台开发出了一款类似的系统。由于“Mesos”平台是一款开源软件,因此任何人都可以免费使用它,这个平台也逐渐在向其他领域扩展。
伯格这个名称非常贴切。谷歌的这个系统就是一个中央大脑,可以控制谷歌所有数据中心上的全部任务。谷歌不用为每一个软件系统如谷歌搜索、Gmail、谷歌地图等各搭建一组独立的服务器,它只需搭建一组服务器来同时执行各种不同的任务就行了。所有的任务都会被分割成细小的任务,然后由伯格系统将那些任务发送到它能找到空闲计算资源的地方。
威尔克斯说,这就好像是一大堆积木一样,每块积木的外形和大小都是不同的。伯格系统的任务就是找到一种将所有的积木都装入木桶中的方法。这里所说的积木就好比是计算机任务,木桶就好比是服务器,关键是不能浪费木桶中的任何空间。
威尔克斯说:“如果你只是简单地将积木丢到木桶里,那么你要么会剩下很多积木装不进去,要么会造成有的木桶装得满,有的木桶装不满的情况,因为积木与积木之间贴合得并不紧密,那样就会浪费掉不少的空间。但是如果你细心去安排如何装积木的话,你就可以减少木桶的需用量。”
还有其他的方法可以做到这一点。你可以利用服务器虚拟化技术来达到相同的目的。但是虚拟化会额外增加不必要的复杂性,如果去掉这个因素,谷歌就可以将数据中心基础设施的规模减小几个百分点。考虑到谷歌数据中心网络的规模,那几个百分点对应的可能就是一个完整的数据中心。
威尔克斯说:“那就相当于另外再建一个数据中心,这里增加一点,那里增加一点,最后汇总起来,那就是一大笔开支。”
在Twitter,Mesos并不具备与伯格系统一样规模的影响力。Twitter的业务规模比谷歌的业务规模要小得多,但是Twitter的业务总是在不断的发展壮大,Mesos可以更好地控制业务规模的增长速度。伯格和Mesos并不只是从服务器群中提取计算能力。它们可以让谷歌和Twitter那样的公司将数据中心当做一台设备来对待。
谷歌和Twitter可以象你在你的台式机电脑上运行软件那样在这些计算设备上运行软件。这样就可以简化Gmail、谷歌地图和Twitter应用的开发人员的工作。
曾经在加州伯克莱大学创立Mesos项目、目前在Twitter担任Mesos项目总监的本海因德曼(Ben Hindman)称:“Mesos可以简化Twitter工程师的工作,他们只需考虑在一个数据中心的平台上运行他们开发的应用软件就行了。那真的是很棒。” #p#
它是一个数据中心,但它看起来就象是一块芯片
伯格和Mesos都是规模庞大的项目。但是为了更好地理解它们,最好还是先从英特尔提供给海因德曼的测试用计算机芯片来说起。
大约在5年前,当时海因德曼还在加州巴克莱大学攻读计算机科学博士学位,计算机芯片还处于多核时代。处理器是计算机的中央大脑,以前的处理器一次只能执行一条指令。但是多核处理器出现后,处理器一次就可以处理多条指令。从本质上来说,它是一个包括了许多个处理器或核心的芯片。
在加州伯克莱大学,海因德曼的研究目标是将计算任务尽可能有效地分布到那些芯片中。英特尔为他提供试验用的芯片,他将那些芯片连接在一起,制作出拥有64个核心或128个核心的计算机样品。然后他开发了一套系统来运行多种应用软件,并且将计算负载平均地权分配给所有的处理器核心,不管哪里出现闲置的计算能力,都可以马上发送一条指令过去。
海因德曼说:“我们发现,应用程序在将它们的计算任务分配给这些计算资源时做得非常巧妙,但是它们仍然想要获得尽可能多的计算资源。他们忽略掉其他可能正在运行的应用程序,将所有的计算资源都抓在手里。因此我们开发了一套系统,只让一个应用程序使用一定数量的处理器核心,然后将其他的核心分配给其他的应用程序。而且,这种计算资源分配模式是可以随着时间的推移而发生变化的。”
海因德曼一直是在一台计算机上做研究。但是当他的研究完成后,他就可以将那个本质性的系统应用到整个数据中心里。他说:“在一块芯片上安装64个核心或128个核心看起来就好像是一个数据中心里的64台计算机或128台计算机。”他就是那么做的,但是并非有意为之,只是巧合罢了。
海因德曼一直在研究多核心处理器,而他的朋友和同事安迪孔维因斯基(Andy Konwinski)和马泰扎哈里亚(Matei Zaharia)一直在研究能够跨多个庞大的数据中心运行的软件平台。这些被称作“分布式系统”,它们构成了目前的大多数大型网络服务的支柱。它们包括很多组件,比如利用海量服务器来处理数据的Hadoop、在很多台设备上储存信息的各种NoSQL数据库等。
之后,海因德曼和他的朋友们决定共同开发一个项目,当然原因可能并不仅仅是他们彼此都很欣赏对方。但是他们很快意识到,他们研究的领域是完全不同的,而且竟然是互补的。
以前,象Hadoop那样的分布式系统是运行在一个庞大的服务器群组上的。然后,如果想运行另一个分布式系统,就必须再搭建一个新的服务器群组。但是海因德曼和他的朋友们很快发现,如果他们可以借鉴海因德曼研究的芯片项目的经验,他们就可以更高效地运行分布式系统。就象海因德曼去研究如何在一个多核心处理器上运行多种应用程序一样,他们可以建立一个平台来,让很多个分布式系统在一个服务器群组上运行。
结果就有了Mesos系统。 #p#
“我们怀念伯格”
2010年3月,Mesos项目启动后大约过了一年的时候,海因德曼和他的朋友们去Twitter讲座。起先,他感到非常失望。因为只有8个人来听他的讲座。但是Twitter的首席科学家对他说,8个人已经很多了,占到公司员工总数的10%左右。当他演讲完之后,还有3个人与他进行了交谈。
那3个人是Twitter的工程师约翰西罗伊斯(John Sirois)、特拉维斯克劳福德(Travis Crawford)和比尔法尔纳(Bill Farner),他们以前都曾在谷歌工作过。他们对海因德曼说,他们很怀念伯格系统,而且Mesos似乎可以通过一种完美的方式来重建它。
不久之后,海因德曼担任了Twitter的顾问,与上面提到的3名工程师密切地共事,以拓展Mesos项目。之后他作为临时员工加入了Twitter。一年后,海因德曼成为Twitter的一名正式员工。海因德曼回忆说:“我的老板当时说,如果你在一年前就加入公司的话,你可能已经获得了一年价值的Twitter股票,你当时在想什么呢?”之后,他和他的同事们继续将Mesos作为一个开源软件项目来开发,但他同时还在努力将Mesos平台搬到Twitter的数据中心里去使用,情况跟谷歌的伯格系统非常相似。
(图注:由于使用了伯格和后续的欧米茄系统,谷歌不用在不同的服务器群组上运行各自的软件系统,而是将所有的东西放在一个服务器群组上运行。)
谷歌并未正式参与那个项目。但是它为巴克莱AMP试验室提供了资金,而AMP试验室正是Mesos项目的主要研究机构。而且,那些参与了Mesos项目的研究人员也经常与威尔克斯那样的谷歌员工交换想法。威尔克斯称:“我们发现他们正在开发它,我开始安排自己的日程表,以便每6个月就可以跟他们碰一次头,有时只是为了在一起聊聊。”
孔维因斯基也在谷歌临时工作了一段时间,并且还在威尔克斯手下干了一段时间。孔维因斯基说:“我们从未针对谷歌内部运行的某些特定的系统交换过想法,因为谷歌在那些项目的保密性上面管得非常严。但是我们还是得到了很多有用的反馈信息,都是在很高层面上的,比如具体的问题是什么,我们应该关注哪些问题等等。”
Mesos项目与伯格系统有一点不同,后者的历史要比前者长一些。但是它们本质性的问题是一样的。据海因德曼称,谷歌的新版伯格系统即欧米茄与Mesos的模式更为接近。
这些系统被称作“服务器群组管理系统”,它们与多年以前就在开发的很多被用来运行超级电脑和Sun Grid Engine等服务的工具很相似。欧米茄和Mesos都可以让你在同一个服务器群组上运行多套分布式系统。你不需要专门为Hadoop分配一个服务器群组,然后为Storm(一种可以实时处理多条数据流的工具)分配另一个服务器群组,你可以将它们放在同一个服务器群组上运行。威尔克斯称:“这就是我们开发的方向,它可以提高效率,这也就是我们开发这些系统的原因。”
那些工具还提供了一个接口,软件设计师们可以利用那个接口在伯格或Mesos平台上运行他们自己的应用程序。在Twitter,这个接口被称作“Aurora”。例如,一组工程师可以利用Aurora来运行Twitter的广告系统。海因德曼当时说,公司大约20%的服务都是以这种方式运行在Mesos平台上的。
威尔克斯称,现在谷歌提供了很多工具,帮助工程师们将各项资源分配给他们的应用程序。但是欧米茄的目的是处理更多这样的任务,因此工程师们不必担心细节问题。他说:“你可以将它看作是自动挡汽车与手动挡汽车的对比,你想要跑得更快,你没必要去调整压缩比或进口歧管。”
欧米茄项目仍处于开发状态,但是公司已经开始在实际数据中心中进行样品测试了。
Twitter的本海因德曼 #p#
克隆的攻击
据威尔克斯称,谷歌打算发布一份关于伯格系统的研究报告。谷歌通常不愿意透露其支撑着它的网络帝国的各种系统的资料。从竞争的角度来说,那些技术具有非常重要的意义;但是一旦这些工具达到一定的成熟阶段,谷歌就会向外公布。
在发布那样一份研究报告和Mesos在Twitter的兴起期间,伯格模式将在网络上得到进一步扩散。其他一些公司如AirBNB、Conviva和另外一家与加州伯克莱大学关系密切的公司已经开始使用Mesos系统,威尔克斯相信,Mesos项目背后的基本构想可能会极大地改变企业运行分布式系统的方式。
是的,还有很多其他方式可以高效地将工作负载分配到服务器群组中去。你可以使用虚拟化解决方案,在物理服务器上运行虚拟服务器,然后把你想要加载的任何软件加载到虚拟服务器上去。但是在伯格和Mesos平台上,你不用担心去担心那些虚拟机。
海因德曼称:“接口是最重要的东西。虚拟化解决方案给你的接口是一个新的虚拟机,我们不想那样,我们要想一种更简单的解决方案。我们希望人们可以管理数据中心,就象他们管理笔记本电脑一样。”
威尔克斯称:“如果你是一名工程师并建立起一个虚拟机,你会得到一个看起来象是另一台硬件的东西。你必须在它上面运行一款操作系统,你必须去管理它,你必须升级它,你必须去做需要对一台物理设备做的所有工作。”
他接着说:“但那并不是一名工程师利用他的时间的最好方式。他们真正想要做的是运行他们的应用程序。我们为他们提供了一种实现那个目标的方法,而且不需要去使用虚拟机。”
显然,很多工程师宁愿使用原始的虚拟机。这就是他们从亚马逊EC2服务中获得到的东西。亚马逊的云计算服务已经成为运行软件应用程序最流行的方式,以致于无数公司都在努力为开发人员和企业用户提供相似的工具。
毕业于加州巴克莱大学、同样在威尔克斯手下干过一段时间临时工的查理雷斯(Charles Reiss)并不认为现在的这个系统能够提供比其他可比解决方案更大的优势。但是他同时也补充说,欧米茄就不同了。
谷歌打算通过欧米茄项目让整个流程变得更加顺畅,就象Twitter利用Mesos平台和Aurora实现的目标一样。从长期角度来说,其他公司肯定会模仿它们。谷歌和Twitter将数据中心当做一个超大型的计算机来看待,最终全世界也会这样做。计算机科学总是利用这样的方式向前发展。我们从一种复杂的接口起步,慢慢地开发出一种不再复杂的接口。这样的事情在台式机电脑、笔记本电脑和服务器领域都已经发生过了。现在,轮到数据中心了。