看三名工程师如何重建Facebook基础
| 2013-06-13 06:55 收藏: 1
《连线》杂志网络版近日刊载文章,讲述了三名Facebook工程师是如何重建Facebook基础的。以下是这篇文章的主要内容:在Facebook位于加利福尼亚州门罗帕克的新公司总部的边缘地带有一幢18号楼,走到这幢楼的背面,就会发现所谓“战斗洞窟”(The Battle Cave)的遗迹。
今天,这个房间只是开放式办公空间的另一种延伸而已,成排的Facebook员工在这里工作。但如果你看看右手边的墙面上方,那么就会看到两个金属支架,这两个支架曾托起一对平板显示屏,那就是乔尔·珀巴(Joel Pobar)及其组员追踪其每日进度的地方。
珀 巴领导着一个最好的工程师团队,这个团队的任务是重建Facebook这个全球最流行的社交网络的基础。到现在为止,他们已经辛辛苦苦地为这个项目工作了 三年多。在去年秋天,这个团队的工作一度陷入了停滞状态,而且似乎永远也无法看到光明。在这段为期几个星期的时间里,他们一直都在18号楼北面的这个房间 里“蹲点”,几乎把醒着的所有时间都用来写代码和重写代码,努力设法磨练自己的创造力,以便驾驭Facebook这个全球最大的网站之一。
这 个房间之所以被叫做“战斗洞窟”,有着很好的理由。工程师们不仅是在跟软件代码“战斗”,同时也是在跟时间战斗。跟斯坦利·库布里克(Stanley Kubrick)扮演的奇爱博士(Dr. Strangelove)的“作战室”(The War Room)一样,工程师们在“战斗洞窟”里也通过高高挂在墙上的两个显示屏来追踪自己的工作进度,这两个显示屏会不断地提醒他们牢牢记住距离完成自己的工 作还有多远,而他们从事的工作被视为打造Facebook的未来。
从那以后,这些工程师已经搬出了“战斗洞窟”,但那两个金属支架则留了下 来,它们可以提醒在这里工作的员工时常想起Facebook押下的重大赌注——公司创始人兼首席执行官马克·扎克伯格(Mark Zuckerberg)喜欢把这个赌注称作“黑客之道”(The Hacker Way),这是个技术性的赌注,可以作为这家成立至今已经九年的社交网络公司所独有之心态的例证。
“那是一个高风险、高回报的赌注。”杰·帕里克(Jay Parikh)说道,他是Facebook的工程副总裁,负责支撑Facebook运作的硬件和软件的设计和操作等事务。“我们现在的业务运营规模十分庞大,因此必须冒上很大的风险才能生存下去。”
想 要理解Facebook的这个赌注,那就必须首先把时钟拨回到2003年底。如果你看过《社交网络》(The Social Network)这部电影,那么就应该会对这个日子有印象:在那个寒冷的日子里,当时身处美国东北部地区的扎克伯格坐在自己的哈佛大学宿舍里,首次开始致 力于构建自己的社交网络。
黑客之道
就Facebook最初的想法来自何处、扎克伯格最终尝试做些什么以及其他一些问题而言,还多少存在某些争议,但有一件事情则是可以肯定的:当扎克伯格坐下来开始构建这个社交网络时,他使用的是一种名为PHP的电脑编程语言。
在 扎克伯格这样的网络程序员中,PHP在2003年时曾风靡一时。这种编程语言给程序员们带来了一种迅速开发和再开发网络软件的方法,在C++等较为复杂的 编程语言以外提供了一条捷径。而随着时间的流逝,PHP语言可令程序员迅速开发软件的本领对Facebook及其“黑客之道”来说的重要性将会变得更大; “黑客之道”是一种不断迭代的哲学,一直都是推动扎克伯格及Facebook前进的动力。Facebook工程师喜欢改动东西,而且喜欢迅速改动,而 PHP语言能让他们做到这一点。
PHP是一种所谓的“动态打字”的编程语言,也就是说程序员不需要花时间定义程序中每个变量所需要的特定参 数。“如果你让 一屋子的开发者开发一个应用,并让他们使用一种动态语言,那么他们能在较快的时间里完成。”Facebook工程师凯斯·亚当斯(Keith Adams)说道。今天Facebook的全球用户人数已经超过了10亿人,有1000多名工程师正致力于建设和重建这个网站,而他们仍在使用PHP语 言。
从某种程度上来说,这令人感到惊奇。虽然PHP语言很适合迅速开发软件,但不太适合运行像Facebook这样规模庞大的网站。当你用 PHP代码——而不是使用C++等静态语言——来建设一个网站时,速度上确实可以快很多;但你将需多得多的服务器才能运行网站,而当网站用户达到10亿人 之多时,那么这些服务器将会带来庞大的费用。
但是,扎克伯格和Facebook程序员还是坚持使用这种编程语言,他们没有像Twitter程序员那样改用新的语言,而是发明了新的方式来以超快的速度运行PHP语言。实际上,Facebook一直都在替换网站的基础,但却没有改变网站本身。这就是所谓的“黑客之道”。
Facebook 在2010年推出了一种名为“HipHop”的工具,这个工具能把PHP代码转换为C++代码,然后再Facebook的服务器上执行。随后 Facebook对这个工具作出了改进,结果是利用转换后代码运行的网站能承载相当于纯PHP代码网站五倍到六倍的流量,而服务器数量不变。
“如 果没有推出HipHop,那么我们可能已在某个时刻陷入了困境,因为当时我们很可能需要更多服务器来运行这个网站,但且无法及时地获得那么多的服务 器。”Facebook工程师德鲁·帕洛斯基(Drew Paroski)说道。“那就像是一个‘万福玛利亚传球’(美式橄榄球术语,指成功率很低的长距离直传,一般在比赛快结束时候使用,孤注一掷地传出去以求 在最后的时刻得分,剩下的就只有祈求圣母玛利亚保佑),让我们得以涉险过关。”
但在那次涉险过关以后不久,帕洛斯基、亚当斯和另一名 Facebook工程师贾森·埃文斯(Jason Evans)决定,他们要做到更好,不再让Facebook面临这样的险境。有天下午,这三名工程师达成了共识,认为如果他们用虚拟机来取代 HipHop,那么Facebook就能把PHP的表现提升至更高的水平。所谓的“虚拟机”其实是一种软件,能在网站的PHP代码和运行网站的服务器硬件 之间提供更大的合力。
帕洛斯基等三人没有把PHP语言转译为C++语言,而是将其转换为原生机器代码——也就是服务器芯片所“讲”的语言。他们对网站实时执行的方式进行了追踪,然后有了一个更好的想法来将PHH代码转换为原生机器代码。亚当斯回忆道:“HipHop看起来很容易被击败。”
这是一种大胆的想法,特别是要考虑到HipHop才刚刚上线而已。构建这样的虚拟机是一项十分庞大的任务,通常情况下应该由甲骨文、微软或VMware等软件公司负责实施,这些公司都拥有创造这种“系统软件”(在电脑内部核心运行的软件)的目标。
三 人在随后的几个星期时间里一直都致力于开发虚拟机,几个月后取得了足够的进展,从而获得了Facebook对这个项目的支持。到最后,Facebook管 理层指派了其他七名工程师跟帕洛斯基等三人一起开发这个新的平台,同时停止开发HipHop。这一举动凸显了Facebook以黑客为中心的文化,同时也 表明这家公司在过去的几年时间里取得了多大的成长。“Facebook能在解决一个非常困难的问题的同时还保留自己的文化联系。”科技巨头VMware负 责开发这种软件的艾里·柯林斯(Eli Collins)说道。“这同时也标志着这家公司的转变。”
唯一的问题在于,在亚当斯、埃文斯和帕洛斯基三人花了两年时间开发这种虚拟机以后,其速度已跟不上活跃网站的需求。
Facebook工程师凯斯·亚当斯
新Facebook
亚 当斯毕业于布朗大学,他的职业生涯是在VMware开始的,跟柯林斯做过同事。在VMware供职时,他负责开发最复杂的系统软件。VMware生产的软 件能让全球最大型的公司运行一种与众不同的虚拟机——一种将一台服务器当做许多服务器对待的方式——这种软件被称为“超级监督者”,其核心代码就是由亚当 斯开发的。
据柯林斯称,当英特尔最初开始设计能与VMware的“超级监督者”配合的微处理器时,亚当斯是唯一被送到英特尔内部的VMware工程师,目的是确保这两种技术能良好地协作。“这足以证明他对VMware来说有多么重要。”柯林斯说道。
亚 当斯会从VMware跳槽到Facebook可能会让人觉得奇怪——亚当斯跳槽时,就连柯林斯也在某种程度上感到惊讶——但今日的Facebook已经跟 谷歌、亚马逊、雅虎甚至是Twitter一样拥有了庞大的公司规模,需要有工程师来重新思考其电脑运作的基本方式。谷歌以其开发全新的硬件和软件来运作全 球数据中心网络而著称,其网络速度非常快,运行效率也相当高;而现在Facebook也已开始这样做。
Facebook聘用了阿米尔·迈克 尔(Amir Michael)等服务器构建人才,还聘用了拉古·穆尔蒂(Raghu Murthy)等工程师,当然也有亚当斯这样的人才。亚当斯是在2009年加盟Facebook的,最开始负责搜索引擎相关工作,但后来他碰到了埃文斯和 帕洛斯基两人。埃文斯毕业于爱荷华大学,专业是生物信息学,他曾开发过一种用于管理电脑内存使用的新工具。帕洛斯基则是从微软跳槽到Facebook的, 他在微软供职时曾负责.NET项目。
对这三个人来说,开发一种能对Facebook的PHP代码进行加工的虚拟机是唯一有意义的事情。但是,开发这种虚拟机并非易事。
据 珀巴和其他曾从事这个项目的Facebook工程师称,当时以最大力度推进虚拟机想法的是亚当斯,他说服Facebook管理层相信这是未来的最好之路。 到最后,Facebook为这个项目投入了大量的资源,调派了马克·威廉姆斯(Mark Williams)、欧文·山内(Owen Yamauch)、亚拉文·梅农(Aravind Menon)、布莱特·西莫斯(Brett Simmers)、吉列尔梅·奥托尼(Guilherme Ottoni)和乔丹·德隆(Jordan DeLong)等工程师来帮助帕洛斯基等三人,并组建了以珀巴为首的团队。珀巴是一名经验丰富的工程经理,跟帕洛斯基一样也是从微软跳槽到 Facebook的。
Facebook工程师德鲁·帕洛斯基
但 是,开发这个项目花费的时间远远超过了预期。亚当斯称,一部分原因在于他们低估了这项任务的复杂性,但另一个问题则是HipHop继续改进。在最开始的几 个月时间里,他们根本找不到固定的目标。而在两年以后,他们已经能用虚拟机来运作整个Facebook网络,但其速度仍旧比最初的HipHop系统慢三 倍。
在随后的时间里,这些工程师继续致力于弥补速度上的差距,但到2012年夏末为止,虚拟机的速度仍旧仅相当于活跃网站的65%。也正因如此,他们才会到“战斗洞窟”里去“闭关”。
Facebook“战斗洞窟”房间里的墙壁
工程师“闭关”
在 高科技的世界中,“闭关”是经常都会发生的事情。在“闭关”的过程中,整个开发团队都会被锁在自己的房间里,团队成员基本上都是闭门不出,直到项目完成时 为止。“那是很常见的事情。”在谷歌供职时帮助开发了谷歌文档(Google Docs)的山姆·世朗瑟(Sam Schillace)说道,他现在担任硅谷创业公司Box.com的工程副总裁。
珀巴将Facebook的虚拟机团队管道了18号楼底楼的 一个房间里,那里的工程师相对较少。据帕洛斯基称,当时他们甚至没有告诉任何人说他们在这个房间里“闭关”。“那种感觉就像是我们在沙漠里迷路了,正等着 有人开着直升机来救我们。”亚当斯回忆道。“但我们决定,必须靠自己的力量升上去。我们并不确切地知道自己要走向何方,但必须靠自己的力量做到这一点。”
工 程师们在“战斗洞窟”房间的墙上挂了一块大大的白板,上面贴满了便利贴,每张便利贴上都写了一种有可能改进虚拟机系统的方法,按需要多长时间才能取得进步 的顺序排列。如果哪个便利贴上的方法被证明是没有出路的,那么就会马上被移到一边去。随后,工程师们又在白板的上方安装了两个监视器,追踪新系统相对于 HipHop系统的速度。最开始的时候,代表新系统的曲线几乎没什么变化,但随着亚当斯等人值早班工作、埃文斯和帕洛斯基等人轮晚班工作,废寝忘食地努力 了五个星期以后,情况终于开始有了起色。
据参与过这个项目的工程师是,亚当斯主要负责提出想法,埃文斯负责编写大量代码来找到一种将这些想法变成现实的方法,而帕洛斯基则负责确保这些想法不会偏离轨道,以免超出PHP语言的能力范围。
就这样,代表新系统速度的曲线开始抬头,在2012年11月6日的美国总统大选日中终于超过了HipHop系统。在那个周末,亚当斯曾跟柯林斯一起骑自行车兜风。“我对那件事情仍记忆犹新。”柯林斯说道。
为了纪念Facebook最早的PHP代码转换工具,他们决定把新系统命名为“HipHop虚拟机”(HipHop Virtual Machine),简称为“HHVM”。
Facebook工程师贾森·埃文斯
花园州
在 有了“HipHop虚拟机”以后,Facebook能以大多数开发者永远都想象不到的速度运行PHP代码。但是,仍旧有人质疑为何这家公司要这么走极端。 长期开发者、编程权威人士大卫·波拉克(David Pollack)就不认同Facebook坚持使用PHP语言的作法。“PHP语言用来构建一个应急网站是最好的。对我来说,Facebook能利用这种 语言构建像Facebook网站那样强大而灵活的网站确实令人印象深刻,但我不认为PHP是构建一个网站的最好方法,这就像是住在新泽西州的人非要把这个 州称作‘花园州’一样。”
就连亚当斯也承认,虽然他曾宣称动态语言能让开发者更具生产力,但这种说法在某些情况下也值得商榷。埃文斯也承认,虽然PHP这样的语言或许能在短期内提高生产力,但从长期来看则会带来更多困难。
当 然,Facebook之所以还在坚持使用PHP语言,在很大程度上是因为用另一种语言来重新编写整个网站的代码是一项更加庞大的任务。Facebook将 此称为“遗留问题”(The Legacy Problem)。“到最后,总有一天网站的规模会大到不重写不行的地步。”帕洛斯基说道。
但 从《连线》杂志与亚当斯等人的对话来看,很明显Facebook仍旧喜欢PHP语言的感觉。虽然为这种语言开发一种新的虚拟机确实颇具风险,但 Facebook这家公司不仅愿意冒险,而且还愿意冒他人不愿去冒的风险。其他人或许会对此感到无法理解,但他们也并不理解Facebook的“黑客之 道”。