HHVM:Facebook高性能PHP虚拟机的前生今世(转) :: 电子商务行者,行者无疆!

他们将新系统命名为HipHop Virtual Machine,或 HHVM,以向公司原来的 PHP 转化器 HipHop 致敬。很快 HHVM 被安装至 Facebook 的后台,并使用至今。HHVM 使用即时编译,能将 Facebook 的 PHP 代码在服务器上被执行时转化为原生计算机语言。这正是 Java 的运行方式,但 Java 的虚拟机的制作历时数年,且为整个行业的所有程序员服务。而 HHVM 是为 Facebook 度身定制的——虽然 Facebook 已经将它同公司基础设施的其他许多部分一样开源了。

“Apple is about polish. Google is about scale. Microsoft is about, well, 30 years old. But Facebook is about innovation. They’re not necessarily optimized for elegance. They’re optimized for innovation. The idea is to crush everyone with pure experimentation and velocity.” This is the Hacker Way.

 

从左至右依次为:Jason Evans, Keith Adams, and Drew Paroski

18 号楼矗立于 Facebook 位于加州门罗帕克的新总部边上。走进它的后方,可以找到战斗之穴(The Battle Cave)的遗址。今天,这个曾经的战场俨然已经成为 Facebook 开放办公室的普通的一部分。但如果你注意到右手边的墙顶上的那两个金属支架,你能依稀发觉历史的踪影。在那儿曾摆放着一对纯平显示器,上面记录着当年 Joel Pobar 和他的团队在那个战场度过的每一天。

Pobar 负责监督一支一流的工程师团队——他们肩负着重建这个星球上最流行的社交网络的运行基础的使命。为此他们已经付出了三年多的心血,但在已经过去的那个秋天的几周里,项目陷入了瓶颈,显得毫无希望。他们被扔进了这个 18 号楼后方的房间,除了睡觉之外就是在编写或重写代码,为了完成自己的使命而绞尽脑汁。这个房间被称作战争之穴,他们打着一场没有硝烟的战争,而敌人则是代码和时间。仿照 Stanley Kubrick 的电影 Dr.Strangelove 中的战争之室(The War Room)中的情节,高悬在墙头的一对显示屏记录着他们的工作,同时也在不断提醒着他们距离创造 Facebook 的未来还有多远。

他们之后搬出了战斗之穴,但那两个金属支架却没有被取下来,似乎是有意提醒人们 Facebook 曾经押的一个巨大的赌注——为了证明这家九岁的公司所赖以生存的独特态度。Mark Zuckerberg喜欢称之为“黑客之道”(The Hacker Way)。“这是一个高风险高回报的赌注,”主管Facebook基础性软硬件设计和运作的工程部副总裁 Jay Parikh 指出:“我们现在运营着如此大规模的网站,必须要冒着相应的风险来生存。”为了了解这是个怎样的赌注,我们将时间调回至 2003 年底的某个时候,如果你看过 The Social Network,那你一定知道,在那个东北部的大冷天,Zuckerberg 坐在哈佛寝室里,开始构建他脑海中的社交网络。

黑客之道

在电影中,关于 Facebook 的起源颇具争议,Zuckerberg 究竟想要做什么,他是否在加勒比之夜后立即开始了他的计划,这些都没有定论。但有一点是可以确定的,他当时创建 Facebook 时用的编程语言是 PHP。要知道 PHP 在 2003 年那会儿风靡一时。相比起更加复杂的 C++ 或 Java,它给程序员们提供了一种特别快速的创建和重建网页软件的方法。在之后的那几年,PHP 的快速开发能力对 Facebook 以及它所信奉的”黑客之道“来说,显得尤其关键,Facebook 的工程师们勇于寻求改变,并且力求迅速改变,PHP 让他们能做到这一点。而黑客之道则是驱动着 Zuckerberg 以及全公司前进的不断迭代的哲学。

PHP 是一种动态编程语言,它让你不需要花时间去定义程序中的每一个变量参数。“如果你让满屋的开发者们制作一个应用,他们会选择动态语言,”Facebook 工程师 Keith Adams 说:“这样他们能完成得更快。”Facebook 已经拥有 10 亿以上的用户,有一千多名工程师前赴后继地为此做着贡献,而他们使用的依然是 PHP,从某种意义上来说,这显得不可思议。PHP 的确能让网站开发更快速,但它不适合运行像 Facebook 这样数据如此庞大的网站。使用 PHP 语言,而非 C++ 这种静态语言,的确可以更快速地创建网站,但却需要更多的服务器来维持它的运行。现在 Facebook 的规模达到了10亿用户之多,光是这些服务器就得花不少钱。即便如此,Zuckerberg 和公司还是没有动摇,他们没有像Twitter做的那样——投奔了一个新的语言,而是发明了以异常快的速度运行PHP的方法。从本质上来讲,他们不停地更换着网站的地基——而网站本身保持原状,这就是传说中的黑客之道。

Facebook 在 2010 年推出了一个叫做HipHop的工具,它能将 PHP 代码在服务器上被执行前转化成 C++ 代码,在网站原来的基础上提升了 500% 至 600% 的流量处理。“如果没有 HipHop,我们会面临很大的麻烦,我们可能无法及时地找到更多的服务器来运行网站,”Facebook 的工程师 Drew Paroski 说:“幸好 HipHop 这个孤注一掷最终成功了。”就在 HipHop 推出后不久,Paroski、Adams 和 Jason Evans 认为他们能找到比它更好的办法。在一个下午,他们三人经过讨论,相信有一种更牛逼的工具能将 PHP 的表现提升到一个更高的水平,那就是虚拟机。这种软件能在一台物理服务器上模拟出多个虚拟服务器,为 PHP 代码和服务器提供更棒的协同效应。他们不再将 PHP 代码转变成 C++ 代码,而是将它直接转变为原生计算机代码(服务器芯片读取的语言),而且在 PHP 代码被执行时直接转化。通过追踪网站实时执行代码的方式,他们可以用更好的方式将 PHP 代码转变成原生计算机代码,最终提升网站的处理速度。Adams 事后回忆说:“HipHop,在当时看起来似乎不堪一击。”

这是个大胆的想法,要知道 HipHop 也才刚刚上线而已。建造这样的虚拟机,通常都是像甲骨文、微软以及 VMware 这样的系统软件制造公司干的事,而非 Facebook 的强项。他们没有拖延,立即投入了这个工程。几个月后,公司高层指派了 7 名新的工程师加入项目开发,并停止了 HipHop 的研发。这个动作凸显了 Facebook 以黑客精神为中心的公司文化,也反映了公司这几年来的快速成长。“处理这样的难题能让 Facebook 沉淀自己的核心精神,”曾在 VMware 研发虚拟机的 Eli Collins 说:“这也是 Facebook 公司战略的转折点,这证明了他们越来越较真了。”

一切都看上去很美好,唯一的问题是:Adams、Evans 和 Paroski 花了两年时间之后,这个虚拟机的处理速度竟然跟不上 HipHop 的速度。

Keith Adams

新的Facebook

Keith Adams 的经历正体现了 Facebook 近年的演变。从布朗大学毕业的他,在 VMware 开始职业生涯,成为 Eli Collins 的同事,并在那儿开发了最复杂的系统软件。VMware 为全世界的企业提供多种虚拟机软件,Adams 负责这种虚拟机的核心架构。据 Collins 说,当 Intel 第一次推出为 VMware 的虚拟机软件定制的微处理器时,Adams 是唯一一个被派往 Intel 内部确保两种技术能完美结合的工程师。“可见他当时在 VMware 的地位,”Collins 说。

既然如此,Adams 放弃 VMware 的工作来到 Facebook 有些让人费解,但这正是 Facebook 实力的体现。同 Google、Amazon、Yahoo甚至Twitter一样,Facebook 的规模增长如此之快,以至于它需要更多的、能够重新定义计算机运行基础的工程师。Google 因为创建了全新的硬件和软件而闻名,它们大大提高了其全球数据中心网络的运行速度和效率。现在Facebook也做到了。公司请来了像 Amir Michael 这样能架设服务器的硬件工程师,也请来了像 Raghu Murthy 这样能为成千上万的计算机开发出数据处理软件的软件工程师,公司当然也有能力将 Adams 这样的人才招致麾下,后者于 2009 年加入这家社交网络巨头。

刚来的时候,Adams 服务于 Facebook 的搜索引擎开发。后来他偶然认识了另外两位整天浸泡在复杂技术中的工程师——Evans 和 Paroski。作为爱达荷大学的生物信息学毕业生,Evans 创建了一个管理计算机内存的新工具——jemalloc,很快 Mozilla Firefox 便爱上了这个新发明。“基本上他的发明帮助我们将 Firefox 使用的内存量减少至一半,”前 Firefox 员工 Stuart Parmenter 说:“他绝对是我所认识的最聪明的人之一。”同时,Paroski 从微软来到了 Facebook。在微软的时候,他服务于.NET 计算进程——相当于为微软的 C#和 VB.NET 语言开发的虚拟机。从这里也不难看出,只有 Adams、Evans 和 Paroski 这三人才会萌生开发虚拟机的想法,但事实上,把想法变成现实又是另一回事了。

据 Pobar 以及项目的其他成员透露,Adams 是执行这一项目最坚决的那个,并最终让 Facebok 高层相信这是最好的办法。他是一个固执己见的人——能够迅速地找到最充分的理由来支撑自己的立场。“他很强势,”Collins 说:“他加入 Facebook 后立刻成为了公司最杰出的工程师之一,这并不让我感到意外。”最终,公司决定在这个项目上投入大量人力,Mark Williams、Owen Yamauchi、Aravind Menon、Brett Simmers、Guilherme Ottoni 和 Jordan Delong 等工程师陆续加入队伍,并任命同样来自微软的老练的工程部主管 Pobar 带领。

Drew Paroski

事情的进展比预计的要慢很多。Adams 交代,部分原因是他们低估了这个任务的复杂性,另外一个原因则是 HipHop 同时在不断提升性能。所以几个月来,他们都是在追赶一个移动的目标。在两年后,他们终于弄明白了怎样使用虚拟机来运行整个网站,但它的运行速度依然比 HipHop 慢了三倍。后来 Adams 谈起这件事情的时候,你可以从他的声音中听出他当时的心情。“对我来说,那时真是提心吊胆,”他回忆道:“真正让人痛苦的是我们不知道那些多出来的时间去哪儿了。”Evans 和 Paroski 当时的心情和 Adams 一样。“你能感受到这些家伙当时承担的巨大压力,”Pobar 说:“要知道 Facebook 给了他们这么多的资源——然后事情却变成:‘卧槽,这玩意儿到底能成吗?!”虽然他们不断地在缩小着与 HipHop 的速度差距,但到了 2012 年的夏末,虚拟机的运行速度依然只有当时网站的 65%。“我们就像是一个孕妇,唯一的愿望就是赶紧生下这个婴儿,”Pobar 说:“但我们对此毫无头绪。”

然后,他们就被关“禁闭”了。

战斗之穴里的的墙

禁闭的日子

关禁闭是高风险科技公司常用的伎俩——把一整支开发团队关进小黑屋,直到项目完成才被放出来。“这不是什么新鲜事,”曾在 Google 帮助创建 Google Docs 的 Sam Schillace 说:“现在这事儿经常发生。”(Sam Schillace现任硅谷创业公司Box.com的工程部副总裁)

Pobar 将团队转移至了 18 号楼的底层,那里的工程师相对较少。据 Paroski 说,他们甚至没告诉任何人他们去了那儿。“那种感觉就像是,我们迷失在沙漠中,等待着直升机的救援,”Adams 回忆道:“之后我们就决定打起精神来,我们并不清楚终点在何方,但我们一定要靠我们的力量挺到那。”在后来的几个月里,整个团队——尤其是 Adams——苦苦寻找着那块能帮助他们一举解决运行速度难题的拼图。但自从他们被关进了战斗之穴,他们的态度发生了小小的改变,他们不再投机取巧,而是选择脚踏实地地认真处理每一个问题。”我们的目的是为了找到正确的代码,如果改变这个代码起不到什么作用,那我们会赶紧尝试另一个,”Paroski 说。他们将工作进度记录在房间里远处墙上的一块大白板上。板上布着密密麻麻的便利贴,每张上面都记录着一种可能提升系统能力的方法,每个方法都限定了时间,如果到期还未实现的话,那张便利贴就会被移到一边。在大白板的上方,有两台监视器,实时追踪新系统相对于 HipHop 的运行速度。一开始,几乎没什么变化,后来他们采取轮流制,Adams 早上工作,其他人晚上工作,这样轮流工作五周之后,新系统速度出现了微小的提升。

据参与该项目的工程师说,Adams 负责提供想法,Evans 则会迅速编写大量代码努力将想法变成现实,而 Paroski,作为 PHP 专家,他负责将 Adams 提出的想法保持在 PHP 的能力范围之内,不致于天马行空。新系统的速度线慢慢地往上攀升,终于在大选日(2012 年 11 月 6 日)的时候,超过了 HipHop。在那个周末,Adams 决定同他在 VMware 的老同事 Eli Collins 一起骑车放松。“我记的可清楚呢,”Collins 说。他们将新系统命名为HipHop Virtual Machine,或 HHVM,以向公司原来的 PHP 转化器 HipHop 致敬。很快 HHVM 被安装至 Facebook 的后台,并使用至今。HHVM 使用即时编译,能将 Facebook 的 PHP 代码在服务器上被执行时转化为原生计算机语言。这正是 Java 的运行方式,但 Java 的虚拟机的制作历时数年,且为整个行业的所有程序员服务。而 HHVM 是为 Facebook 度身定制的——虽然 Facebook 已经将它同公司基础设施的其他许多部分一样开源了。

Jason Evans

花园州

得益于 HHVM,Facebook 能以多数开发者难以想象的速度运行 PHP 代码,但一些人还是很不解为何 Facebook 会这样走极端。作为一名老资格的开发者和编程专家,David Pollack就对 PHP 帮助 Facebook 更快迭代这个概念不太买账。“PHP 是为创建快速而粗糙的网站而优化的语言,Facebook 能用这样一个快速而粗糙的语言制作出如此强大而灵活的网站,很不寻常,”他说:“但我始终不认为 PHP 是创建网站的最佳语言,这就像是生活在新泽西的人把它称作花园州一样。”

Adams 也承认他所称的“动态语言能让开发者更高效”在某些情况下颇具争议,Evans 也认为 PHP 这样的动态语言即使能让你在短期内更高效,长期来看,它也能让事情变得更棘手。“使用静态语言来编码,你会得到很好的文档,”他说:“但如果你使用像 PHP 这样的动态语言,等两年后回来,那份文档就不见了。”当然,Facebook 不得不使用 PHP,因为将整个网站用其他语言重写一遍是一项更大的工程。人们称这种情况为“遗留问题”。Paroski 说:“最终,你的规模如此之大,大到无法将之全部重建。”

从 Adams 等人的话中,可以发现 Facebook 依然更青睐 PHP,即使为 PHP 创建一个新的虚拟机是风险,公司不仅愿意冒这个险,并且愿意冒其他公司不敢冒的险。“苹果代表精致,Google代表规模,而微软嘛,老咯,(Apple is about polish.Google is about scale.Microsoft is about,well,30 years old)”Sam Schillace开玩笑说:“而Facebook代表着创新。优雅并不是它的诉求,它为创新而生。它通过大胆的试验和超人的速度来击败所有人。”

那些无法领悟黑客之道的人是永远无法理解这一点的。

SOURCE: wired.com

来源URL:http://www.sqlstudy.com/article/hhvm-facebook-high-performance-vm.html