• 看看三位工程师是如何重建Facebook根基的


    摘要:Facebook这家公司不仅愿意冒险,并且还愿意冒他人不愿去冒的风险。本文讲述了三名Facebook工程师是怎样重建Facebook基础的。


    Facebook工程师贾森·埃文斯、凯斯·亚当斯和德鲁·帕洛斯基

    《连线》杂志网络版近日刊载文章,讲述了三名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++等静态语言——来建设一个站点时,速度上确实能够快许多;但你将需多得多的server才干运行站点,而当站点用户达到10亿人之多时,那么这些server将会带来庞大的费用。

    可是,扎克伯格和Facebook程序猿还是坚持使用这样的编程语言,他们没有像Twitter程序猿那样改用新的语言,而是发明了新的方式来以超快的速度运行PHP语言。实际上,Facebook一直都在替换站点的基础,但却没有改变站点本身。这就是所谓的“黑客之道”。

    Facebook在2010年推出了一种名为“HipHop”的工具,这个工具能把PHP代码转换为C++代码,然后再Facebook的server上运行。随后Facebook对这个工具作出了改进,结果是利用转换后代码运行的站点能承载相当于纯PHP代码站点五倍到六倍的流量,而server数量不变。

    “假设没有推出HipHop,那么我们可能已在某个时刻陷入了困境,由于当时我们很可能须要许多其他server来运行这个站点,但且无法及时地获得那么多的server。”Facebook工程师德鲁·帕洛斯基(Drew Paroski)说道。“那就像是一个‘万福玛利亚传球’(美式橄榄球术语,指成功率很低的长距离直传,一般在比赛快结束时候使用,孤注一掷地传出去以求在最后的时刻得分,剩下的就唯独祈求圣母玛利亚保佑),让我们得以涉险过关。”

    但在那次涉险过关以后不久,帕洛斯基、亚当斯和还有一名Facebook工程师贾森·埃文斯(Jason Evans)决定,他们要做到更好,不再让Facebook面临这样的险境。有天下午,这三名工程师达成了共识,认为假设他们用虚拟机来代替HipHop,那么Facebook就能把PHP的表现提升至更高的水平。所谓的“虚拟机”事实上是一种软件,能在站点的PHP代码和运行站点的server硬件之间提供更大的合力。

    帕洛斯基等三人没有把PHP语言转译为C++语言,而是将其转换为原生机器代码——也就是server芯片所“讲”的语言。他们对站点实时运行的方式进行了追踪,然后有了一个更好的想法来将PHH代码转换为原生机器代码。亚当斯回顾道:“HipHop看起来很easy被击败。”

    这是一种大胆的想法,特别是要考虑到HipHop才刚刚上线而已。构建这样的虚拟机是一项十分庞大的任务,通常情况下应该由甲骨文、微软或VMware等软件公司负责实施,这些公司都拥有创造这样的“系统软件”(在电脑内部核心运行的软件)的目标。

    三人在随后的几个星期时间里一直都致力于开发虚拟机,几个月后取得了足够的进展,从而获得了Facebook对这个项目的支持。到最后,Facebook管理层指派了其它七名工程师跟帕洛斯基等三人一起开发这个新的平台,同一时候停止开发HipHop。这一举动凸显了Facebook以黑客为中心的文化,同一时候也表明这家公司在过去的几年时间里取得了多大的成长。“Facebook能在解决一个很困难的问题的同一时候还保留自己的文化联系。”科技巨头VMware负责开发这样的软件的艾里·柯林斯(Eli Collins)说道。“这同一时候也标志着这家公司的转变。”

    唯一的问题在于,在亚当斯、埃文斯和帕洛斯基三人花了两年时间开发这样的虚拟机以后,其速度已跟不上活跃站点的需求。

    Facebook工程师凯斯·亚当斯

    新Facebook

    亚当斯毕业于布朗大学,他的职业生涯是在VMware開始的,跟柯林斯做过同事。在VMware供职时,他负责开发最复杂的系统软件。VMware生产的软件能让全球最大型的公司运行一种与众不同的虚拟机——一种将一台server当做许多server对待的方式——这样的软件被称为“超级监督者”,其核心代码就是由亚当斯开发的。

    据柯林斯称,当英特尔最初開始设计能与VMware的“超级监督者”配合的微处理器时,亚当斯是唯一被送到英特尔内部的VMware工程师,目的是确保这两种技术能良好地协作。“这足以证明他对VMware来说有多么重要。”柯林斯说道。

    亚当斯会从VMware跳槽到Facebook可能会让人认为奇怪——亚当斯跳槽时,就连柯林斯也在某种程度上感到吃惊——但今日的Facebook已经跟谷歌(微博)、亚马逊、雅虎甚至是Twitter一样拥有了庞大的公司规模,须要有工程师来又一次思考其电脑运作的基本方式。谷歌以其开发全新的硬件和软件来运作全球数据中心网络而著称,其网络速度很快,运行效率也相当高;而如今Facebook也已開始这样做。

    Facebook聘用了阿米尔·迈克尔(Amir Michael)等server构建人才,还聘用了拉古·穆尔蒂(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的“黑客之道”。

    文章转自:腾讯科技

  • 相关阅读:
    Piggy-Bank (hdoj1114)
    Word Amalgamation(hdoj1113)
    Lowest Bit(hdoj1196)
    1206: B.求和
    1207: C.LU的困惑
    STL初步
    关于521(nyoj)
    first blood暴力搜索,剪枝是关键
    变态最大值(nyoj)
    烧饼(nyoj779)
  • 原文地址:https://www.cnblogs.com/mfryf/p/3138611.html
Copyright © 2020-2023  润新知