看三名工程師如何重建Facebook基礎
英文原文:How Three Guys Rebuilt the Foundation of 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),這是個技術性的賭注,可以作為這家成立至今已經九年的社交網絡公司所獨有之心態的例證。
Facebook工程師賈森·埃文斯、凱斯·亞當斯和德魯·帕洛斯基
“那是一個高風險、高回報的賭注。”杰·帕里克(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生產的軟件能讓全球最大型的公司運行一種與眾不同的虛擬機——一種將一臺服務器當做許多服務器對待的方式——這種軟件被稱為“超級監督者”(hypervisor),其核心代碼就是由亞當斯開發的。
據柯林斯稱,當英特爾最初開始設計能與VMware的“超級監督者”(hypervisor)配合的微處理器時,亞當斯是唯一被送到英特爾內部的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的“黑客之道”。