看三名工程師如何重建Facebook基礎(chǔ)
Facebook工程師賈森·埃文斯、凱斯·亞當(dāng)斯和德魯·帕洛斯基(騰訊科技配圖)
《連線》雜志網(wǎng)絡(luò)版近日刊載文章,講述了三名Facebook工程師是如何重建Facebook基礎(chǔ)的。
以下是這篇文章的主要內(nèi)容:
在Facebook位于加利福尼亞州門羅帕克的新公司總部的邊緣地帶有一幢18號(hào)樓,走到這幢樓的背面,就會(huì)發(fā)現(xiàn)所謂“戰(zhàn)斗洞窟”(The Battle Cave)的遺跡。
今天,這個(gè)房間只是開(kāi)放式辦公空間的另一種延伸而已,成排的Facebook員工在這里工作。但如果你看看右手邊的墻面上方,那么就會(huì)看到兩個(gè)金屬支架,這兩個(gè)支架曾托起一對(duì)平板顯示屏,那就是喬爾·珀巴(Joel Pobar)及其組員追蹤其每日進(jìn)度的地方。
珀巴領(lǐng)導(dǎo)著一個(gè)最好的工程師團(tuán)隊(duì),這個(gè)團(tuán)隊(duì)的任務(wù)是重建Facebook這個(gè)全球最流行的社交網(wǎng)絡(luò)的基礎(chǔ)。到現(xiàn)在為止,他們已經(jīng)辛辛苦苦地為這個(gè)項(xiàng)目工作了三年多。在去年秋天,這個(gè)團(tuán)隊(duì)的工作一度陷入了停滯狀態(tài),而且似乎永遠(yuǎn)也無(wú)法看到光明。在這段為期幾個(gè)星期的時(shí)間里,他們一直都在18號(hào)樓北面的這個(gè)房間里“蹲點(diǎn)”,幾乎把醒著的所有時(shí)間都用來(lái)寫代碼和重寫代碼,努力設(shè)法磨練自己的創(chuàng)造力,以便駕馭Facebook這個(gè)全球最大的網(wǎng)站之一。
這個(gè)房間之所以被叫做“戰(zhàn)斗洞窟”,有著很好的理由。工程師們不僅是在跟軟件代碼“戰(zhàn)斗”,同時(shí)也是在跟時(shí)間戰(zhàn)斗。跟斯坦利·庫(kù)布里克(Stanley Kubrick)扮演的奇愛(ài)博士(Dr. Strangelove)的“作戰(zhàn)室”(The War Room)一樣,工程師們?cè)?ldquo;戰(zhàn)斗洞窟”里也通過(guò)高高掛在墻上的兩個(gè)顯示屏來(lái)追蹤自己的工作進(jìn)度,這兩個(gè)顯示屏?xí)粩嗟靥嵝阉麄兝卫斡涀【嚯x完成自己的工作還有多遠(yuǎn),而他們從事的工作被視為打造Facebook的未來(lái)。
從那以后,這些工程師已經(jīng)搬出了“戰(zhàn)斗洞窟”,但那兩個(gè)金屬支架則留了下來(lái),它們可以提醒在這里工作的員工時(shí)常想起Facebook押下的重大賭注——公司創(chuàng)始人兼首席執(zhí)行官馬克·扎克伯格(Mark Zuckerberg)喜歡把這個(gè)賭注稱作“黑客之道”(The Hacker Way),這是個(gè)技術(shù)性的賭注,可以作為這家成立至今已經(jīng)九年的社交網(wǎng)絡(luò)公司所獨(dú)有之心態(tài)的例證。
“那是一個(gè)高風(fēng)險(xiǎn)、高回報(bào)的賭注。”杰·帕里克(Jay Parikh)說(shuō)道,他是Facebook的工程副總裁,負(fù)責(zé)支撐Facebook運(yùn)作的硬件和軟件的設(shè)計(jì)和操作等事務(wù)。“我們現(xiàn)在的業(yè)務(wù)運(yùn)營(yíng)規(guī)模十分龐大,因此必須冒上很大的風(fēng)險(xiǎn)才能生存下去。”
想要理解Facebook的這個(gè)賭注,那就必須首先把時(shí)鐘撥回到2003年底。如果你看過(guò)《社交網(wǎng)絡(luò)》(The Social Network)這部電影,那么就應(yīng)該會(huì)對(duì)這個(gè)日子有印象:在那個(gè)寒冷的日子里,當(dāng)時(shí)身處美國(guó)東北部地區(qū)的扎克伯格坐在自己的哈佛大學(xué)宿舍里,首次開(kāi)始致力于構(gòu)建自己的社交網(wǎng)絡(luò)。
黑客之道
就Facebook最初的想法來(lái)自何處、扎克伯格最終嘗試做些什么以及其他一些問(wèn)題而言,還多少存在某些爭(zhēng)議,但有一件事情則是可以肯定的:當(dāng)扎克伯格坐下來(lái)開(kāi)始構(gòu)建這個(gè)社交網(wǎng)絡(luò)時(shí),他使用的是一種名為PHP的電腦編程語(yǔ)言。
在扎克伯格這樣的網(wǎng)絡(luò)程序員中,PHP在2003年時(shí)曾風(fēng)靡一時(shí)。這種編程語(yǔ)言給程序員們帶來(lái)了一種迅速開(kāi)發(fā)和再開(kāi)發(fā)網(wǎng)絡(luò)軟件的方法,在C++等較為復(fù)雜的編程語(yǔ)言以外提供了一條捷徑。而隨著時(shí)間的流逝,PHP語(yǔ)言可令程序員迅速開(kāi)發(fā)軟件的本領(lǐng)對(duì)Facebook及其“黑客之道”來(lái)說(shuō)的重要性將會(huì)變得更大; “黑客之道”是一種不斷迭代的哲學(xué),一直都是推動(dòng)扎克伯格及Facebook前進(jìn)的動(dòng)力。Facebook工程師喜歡改動(dòng)?xùn)|西,而且喜歡迅速改動(dòng),而 PHP語(yǔ)言能讓他們做到這一點(diǎn)。
PHP是一種所謂的“動(dòng)態(tài)打字”的編程語(yǔ)言,也就是說(shuō)程序員不需要花時(shí)間定義程序中每個(gè)變量所需要的特定參數(shù)。“如果你讓 一屋子的開(kāi)發(fā)者開(kāi)發(fā)一個(gè)應(yīng)用,并讓他們使用一種動(dòng)態(tài)語(yǔ)言,那么他們能在較快的時(shí)間里完成。”Facebook工程師凱斯·亞當(dāng)斯(Keith Adams)說(shuō)道。今天Facebook的全球用戶人數(shù)已經(jīng)超過(guò)了10億人,有1000多名工程師正致力于建設(shè)和重建這個(gè)網(wǎng)站,而他們?nèi)栽谑褂肞HP語(yǔ)言。
從某種程度上來(lái)說(shuō),這令人感到驚奇。雖然PHP語(yǔ)言很適合迅速開(kāi)發(fā)軟件,但不太適合運(yùn)行像Facebook這樣規(guī)模龐大的網(wǎng)站。當(dāng)你用PHP代碼——而不是使用C++等靜態(tài)語(yǔ)言——來(lái)建設(shè)一個(gè)網(wǎng)站時(shí),速度上確實(shí)可以快很多;但你將需多得多的服務(wù)器才能運(yùn)行網(wǎng)站,而當(dāng)網(wǎng)站用戶達(dá)到10億人之多時(shí),那么這些服務(wù)器將會(huì)帶來(lái)龐大的費(fèi)用。
但是,扎克伯格和Facebook程序員還是堅(jiān)持使用這種編程語(yǔ)言,他們沒(méi)有像Twitter程序員那樣改用新的語(yǔ)言,而是發(fā)明了新的方式來(lái)以超快的速度運(yùn)行PHP語(yǔ)言。實(shí)際上,F(xiàn)acebook一直都在替換網(wǎng)站的基礎(chǔ),但卻沒(méi)有改變網(wǎng)站本身。這就是所謂的“黑客之道”。
Facebook 在2010年推出了一種名為“HipHop”的工具,這個(gè)工具能把PHP代碼轉(zhuǎn)換為C++代碼,然后再Facebook的服務(wù)器上執(zhí)行。隨后 Facebook對(duì)這個(gè)工具作出了改進(jìn),結(jié)果是利用轉(zhuǎn)換后代碼運(yùn)行的網(wǎng)站能承載相當(dāng)于純PHP代碼網(wǎng)站五倍到六倍的流量,而服務(wù)器數(shù)量不變。
“如果沒(méi)有推出HipHop,那么我們可能已在某個(gè)時(shí)刻陷入了困境,因?yàn)楫?dāng)時(shí)我們很可能需要更多服務(wù)器來(lái)運(yùn)行這個(gè)網(wǎng)站,但且無(wú)法及時(shí)地獲得那么多的服務(wù)器。”Facebook工程師德魯·帕洛斯基(Drew Paroski)說(shuō)道。“那就像是一個(gè)‘萬(wàn)?,斃麃唫髑?rsquo;(美式橄欖球術(shù)語(yǔ),指成功率很低的長(zhǎng)距離直傳,一般在比賽快結(jié)束時(shí)候使用,孤注一擲地傳出去以求在最后的時(shí)刻得分,剩下的就只有祈求圣母瑪利亞保佑),讓我們得以涉險(xiǎn)過(guò)關(guān)。”
但在那次涉險(xiǎn)過(guò)關(guān)以后不久,帕洛斯基、亞當(dāng)斯和另一名Facebook工程師賈森·埃文斯(Jason Evans)決定,他們要做到更好,不再讓Facebook面臨這樣的險(xiǎn)境。有天下午,這三名工程師達(dá)成了共識(shí),認(rèn)為如果他們用虛擬機(jī)來(lái)取代 HipHop,那么Facebook就能把PHP的表現(xiàn)提升至更高的水平。所謂的“虛擬機(jī)”其實(shí)是一種軟件,能在網(wǎng)站的PHP代碼和運(yùn)行網(wǎng)站的服務(wù)器硬件之間提供更大的合力。
帕洛斯基等三人沒(méi)有把PHP語(yǔ)言轉(zhuǎn)譯為C++語(yǔ)言,而是將其轉(zhuǎn)換為原生機(jī)器代碼——也就是服務(wù)器芯片所“講”的語(yǔ)言。他們對(duì)網(wǎng)站實(shí)時(shí)執(zhí)行的方式進(jìn)行了追蹤,然后有了一個(gè)更好的想法來(lái)將PHH代碼轉(zhuǎn)換為原生機(jī)器代碼。亞當(dāng)斯回憶道:“HipHop看起來(lái)很容易被擊敗。”
這是一種大膽的想法,特別是要考慮到HipHop才剛剛上線而已。構(gòu)建這樣的虛擬機(jī)是一項(xiàng)十分龐大的任務(wù),通常情況下應(yīng)該由甲骨文、微軟或VMware等軟件公司負(fù)責(zé)實(shí)施,這些公司都擁有創(chuàng)造這種“系統(tǒng)軟件”(在電腦內(nèi)部核心運(yùn)行的軟件)的目標(biāo)。
三人在隨后的幾個(gè)星期時(shí)間里一直都致力于開(kāi)發(fā)虛擬機(jī),幾個(gè)月后取得了足夠的進(jìn)展,從而獲得了Facebook對(duì)這個(gè)項(xiàng)目的支持。到最后,F(xiàn)acebook管理層指派了其他七名工程師跟帕洛斯基等三人一起開(kāi)發(fā)這個(gè)新的平臺(tái),同時(shí)停止開(kāi)發(fā)HipHop。這一舉動(dòng)凸顯了Facebook以黑客為中心的文化,同時(shí)也表明這家公司在過(guò)去的幾年時(shí)間里取得了多大的成長(zhǎng)。“Facebook能在解決一個(gè)非常困難的問(wèn)題的同時(shí)還保留自己的文化聯(lián)系。”科技巨頭VMware負(fù)責(zé)開(kāi)發(fā)這種軟件的艾里·柯林斯(Eli Collins)說(shuō)道。“這同時(shí)也標(biāo)志著這家公司的轉(zhuǎn)變。”
唯一的問(wèn)題在于,在亞當(dāng)斯、埃文斯和帕洛斯基三人花了兩年時(shí)間開(kāi)發(fā)這種虛擬機(jī)以后,其速度已跟不上活躍網(wǎng)站的需求。
Facebook工程師凱斯·亞當(dāng)斯(騰訊科技配圖)
#p#
新Facebook
亞當(dāng)斯畢業(yè)于布朗大學(xué),他的職業(yè)生涯是在VMware開(kāi)始的,跟柯林斯做過(guò)同事。在VMware供職時(shí),他負(fù)責(zé)開(kāi)發(fā)最復(fù)雜的系統(tǒng)軟件。VMware生產(chǎn)的軟件能讓全球最大型的公司運(yùn)行一種與眾不同的虛擬機(jī)——一種將一臺(tái)服務(wù)器當(dāng)做許多服務(wù)器對(duì)待的方式——這種軟件被稱為“超級(jí)監(jiān)督者”,其核心代碼就是由亞當(dāng)斯開(kāi)發(fā)的。
據(jù)柯林斯稱,當(dāng)英特爾最初開(kāi)始設(shè)計(jì)能與VMware的“超級(jí)監(jiān)督者”配合的微處理器時(shí),亞當(dāng)斯是唯一被送到英特爾內(nèi)部的VMware工程師,目的是確保這兩種技術(shù)能良好地協(xié)作。“這足以證明他對(duì)VMware來(lái)說(shuō)有多么重要。”柯林斯說(shuō)道。
亞當(dāng)斯會(huì)從VMware跳槽到Facebook可能會(huì)讓人覺(jué)得奇怪——亞當(dāng)斯跳槽時(shí),就連柯林斯也在某種程度上感到驚訝——但今日的Facebook已經(jīng)跟谷歌(微博)、亞馬遜、雅虎甚至是Twitter一樣擁有了龐大的公司規(guī)模,需要有工程師來(lái)重新思考其電腦運(yùn)作的基本方式。谷歌以其開(kāi)發(fā)全新的硬件和軟件來(lái)運(yùn)作全球數(shù)據(jù)中心網(wǎng)絡(luò)而著稱,其網(wǎng)絡(luò)速度非常快,運(yùn)行效率也相當(dāng)高;而現(xiàn)在Facebook也已開(kāi)始這樣做。
Facebook 聘用了阿米爾·邁克爾(Amir Michael)等服務(wù)器構(gòu)建人才,還聘用了拉古·穆?tīng)柕伲≧aghu Murthy)等工程師,當(dāng)然也有亞當(dāng)斯這樣的人才。亞當(dāng)斯是在2009年加盟Facebook的,最開(kāi)始負(fù)責(zé)搜索引擎相關(guān)工作,但后來(lái)他碰到了埃文斯和帕洛斯基兩人。埃文斯畢業(yè)于愛(ài)荷華大學(xué),專業(yè)是生物信息學(xué),他曾開(kāi)發(fā)過(guò)一種用于管理電腦內(nèi)存使用的新工具。帕洛斯基則是從微軟跳槽到Facebook的,他在微軟供職時(shí)曾負(fù)責(zé).NET項(xiàng)目。
對(duì)這三個(gè)人來(lái)說(shuō),開(kāi)發(fā)一種能對(duì)Facebook的PHP代碼進(jìn)行加工的虛擬機(jī)是唯一有意義的事情。但是,開(kāi)發(fā)這種虛擬機(jī)并非易事。
據(jù)珀巴和其他曾從事這個(gè)項(xiàng)目的Facebook工程師稱,當(dāng)時(shí)以最大力度推進(jìn)虛擬機(jī)想法的是亞當(dāng)斯,他說(shuō)服Facebook管理層相信這是未來(lái)的最好之路。到最后,F(xiàn)acebook為這個(gè)項(xiàng)目投入了大量的資源,調(diào)派了馬克·威廉姆斯(Mark Williams)、歐文·山內(nèi)(Owen Yamauch)、亞拉文·梅農(nóng)(Aravind Menon)、布萊特·西莫斯(Brett Simmers)、吉列爾梅·奧托尼(Guilherme Ottoni)和喬丹·德?。↗ordan DeLong)等工程師來(lái)幫助帕洛斯基等三人,并組建了以珀巴為首的團(tuán)隊(duì)。珀巴是一名經(jīng)驗(yàn)豐富的工程經(jīng)理,跟帕洛斯基一樣也是從微軟跳槽到 Facebook的。
Facebook工程師德魯·帕洛斯基(騰訊科技配圖)
但是,開(kāi)發(fā)這個(gè)項(xiàng)目花費(fèi)的時(shí)間遠(yuǎn)遠(yuǎn)超過(guò)了預(yù)期。亞當(dāng)斯稱,一部分原因在于他們低估了這項(xiàng)任務(wù)的復(fù)雜性,但另一個(gè)問(wèn)題則是HipHop繼續(xù)改進(jìn)。在最開(kāi)始的幾個(gè)月時(shí)間里,他們根本找不到固定的目標(biāo)。而在兩年以后,他們已經(jīng)能用虛擬機(jī)來(lái)運(yùn)作整個(gè)Facebook網(wǎng)絡(luò),但其速度仍舊比最初的HipHop系統(tǒng)慢三倍。
在隨后的時(shí)間里,這些工程師繼續(xù)致力于彌補(bǔ)速度上的差距,但到2012年夏末為止,虛擬機(jī)的速度仍舊僅相當(dāng)于活躍網(wǎng)站的65%。也正因如此,他們才會(huì)到“戰(zhàn)斗洞窟”里去“閉關(guān)”。
Facebook“戰(zhàn)斗洞窟”房間里的墻壁(騰訊科技配圖)
工程師“閉關(guān)”
在高科技的世界中,“閉關(guān)”是經(jīng)常都會(huì)發(fā)生的事情。在“閉關(guān)”的過(guò)程中,整個(gè)開(kāi)發(fā)團(tuán)隊(duì)都會(huì)被鎖在自己的房間里,團(tuán)隊(duì)成員基本上都是閉門不出,直到項(xiàng)目完成時(shí)為止。“那是很常見(jiàn)的事情。”在谷歌供職時(shí)幫助開(kāi)發(fā)了谷歌文檔(Google Docs)的山姆·世朗瑟(Sam Schillace)說(shuō)道,他現(xiàn)在擔(dān)任硅谷創(chuàng)業(yè)公司Box.com的工程副總裁。
珀巴將Facebook的虛擬機(jī)團(tuán)隊(duì)管道了18號(hào)樓底樓的一個(gè)房間里,那里的工程師相對(duì)較少。據(jù)帕洛斯基稱,當(dāng)時(shí)他們甚至沒(méi)有告訴任何人說(shuō)他們?cè)谶@個(gè)房間里 “閉關(guān)”。“那種感覺(jué)就像是我們?cè)谏衬锩月妨耍戎腥碎_(kāi)著直升機(jī)來(lái)救我們。”亞當(dāng)斯回憶道。“但我們決定,必須靠自己的力量升上去。我們并不確切地知道自己要走向何方,但必須靠自己的力量做到這一點(diǎn)。”
工程師們?cè)?ldquo;戰(zhàn)斗洞窟”房間的墻上掛了一塊大大的白板,上面貼滿了便利貼,每張便利貼上都寫了一種有可能改進(jìn)虛擬機(jī)系統(tǒng)的方法,按需要多長(zhǎng)時(shí)間才能取得進(jìn)步的順序排列。如果哪個(gè)便利貼上的方法被證明是沒(méi)有出路的,那么就會(huì)馬上被移到一邊去。隨后,工程師們又在白板的上方安裝了兩個(gè)監(jiān)視器,追蹤新系統(tǒng)相對(duì)于HipHop系統(tǒng)的速度。最開(kāi)始的時(shí)候,代表新系統(tǒng)的曲線幾乎沒(méi)什么變化,但隨著亞當(dāng)斯等人值早班工作、埃文斯和帕洛斯基等人輪晚班工作,廢寢忘食地努力了五個(gè)星期以后,情況終于開(kāi)始有了起色。
據(jù)參與過(guò)這個(gè)項(xiàng)目的工程師是,亞當(dāng)斯主要負(fù)責(zé)提出想法,埃文斯負(fù)責(zé)編寫大量代碼來(lái)找到一種將這些想法變成現(xiàn)實(shí)的方法,而帕洛斯基則負(fù)責(zé)確保這些想法不會(huì)偏離軌道,以免超出PHP語(yǔ)言的能力范圍。
就這樣,代表新系統(tǒng)速度的曲線開(kāi)始抬頭,在2012年11月6日的美國(guó)總統(tǒng)大選日中終于超過(guò)了HipHop系統(tǒng)。在那個(gè)周末,亞當(dāng)斯曾跟柯林斯一起騎自行車兜風(fēng)。“我對(duì)那件事情仍記憶猶新。”柯林斯說(shuō)道。
為了紀(jì)念Facebook最早的PHP代碼轉(zhuǎn)換工具,他們決定把新系統(tǒng)命名為“HipHop虛擬機(jī)”(HipHop Virtual Machine),簡(jiǎn)稱為“HHVM”。
Facebook工程師賈森·埃文斯(騰訊科技配圖)
花園州
在有了“HipHop虛擬機(jī)”以后,F(xiàn)acebook能以大多數(shù)開(kāi)發(fā)者永遠(yuǎn)都想象不到的速度運(yùn)行PHP代碼。但是,仍舊有人質(zhì)疑為何這家公司要這么走極端。長(zhǎng)期開(kāi)發(fā)者、編程權(quán)威人士大衛(wèi)·波拉克(David Pollack)就不認(rèn)同F(xiàn)acebook堅(jiān)持使用PHP語(yǔ)言的作法。“PHP語(yǔ)言用來(lái)構(gòu)建一個(gè)應(yīng)急網(wǎng)站是最好的。對(duì)我來(lái)說(shuō),F(xiàn)acebook能利用這種語(yǔ)言構(gòu)建像Facebook網(wǎng)站那樣強(qiáng)大而靈活的網(wǎng)站確實(shí)令人印象深刻,但我不認(rèn)為PHP是構(gòu)建一個(gè)網(wǎng)站的最好方法,這就像是住在新澤西州的人非要把這個(gè)州稱作‘花園州’一樣。”
就連亞當(dāng)斯也承認(rèn),雖然他曾宣稱動(dòng)態(tài)語(yǔ)言能讓開(kāi)發(fā)者更具生產(chǎn)力,但這種說(shuō)法在某些情況下也值得商榷。埃文斯也承認(rèn),雖然PHP這樣的語(yǔ)言或許能在短期內(nèi)提高生產(chǎn)力,但從長(zhǎng)期來(lái)看則會(huì)帶來(lái)更多困難。
當(dāng)然,F(xiàn)acebook之所以還在堅(jiān)持使用PHP語(yǔ)言,在很大程度上是因?yàn)橛昧硪环N語(yǔ)言來(lái)重新編寫整個(gè)網(wǎng)站的代碼是一項(xiàng)更加龐大的任務(wù)。Facebook將此稱為“遺留問(wèn)題”(The Legacy Problem)。“到最后,總有一天網(wǎng)站的規(guī)模會(huì)大到不重寫不行的地步。”帕洛斯基說(shuō)道。
但從《連線》雜志與亞當(dāng)斯等人的對(duì)話來(lái)看,很明顯Facebook仍舊喜歡PHP語(yǔ)言的感覺(jué)。雖然為這種語(yǔ)言開(kāi)發(fā)一種新的虛擬機(jī)確實(shí)頗具風(fēng)險(xiǎn),但 Facebook這家公司不僅愿意冒險(xiǎn),而且還愿意冒他人不愿去冒的風(fēng)險(xiǎn)。其他人或許會(huì)對(duì)此感到無(wú)法理解,但他們也并不理解Facebook的“黑客之道”。