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