Reload Original PagePrint PageEmail Page

Facebook的黑客之道——这三个人重建了Facebook的基础 | 36氪

"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代表着创新。优雅并不是它的诉求,它为创新而生。它通过大胆的试验和超人的速度来击败所有人。”

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