《連線》雜誌網路版近日刊載文章,講述了三名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生產的軟體能讓全球最大型的公司執行一種與眾不同的虛擬機器——一種將一臺伺服器當做許多伺服器對待的方式——這種軟體被稱為“超級監督者”,其核心程式碼就是由亞當斯開發的。
據柯林斯稱,當英特爾最初開始設計能與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的“黑客之道”。