[譯文] How Three Guys Rebuilt the Foundation of Facebook - Page 2

原文來自Wired.com,版權屬於原作者,本篇僅用於練習翻譯

我後來想想還是把Facebook保留,不翻成中文


全新的Facebook

Keith Adams可說是Facebook近期發展的代名詞。畢業於布朗大學後,從VMWare開始了他的生涯,他在那裏與Eli Collins一起建構世界上最複雜的系統軟體。VMware專做可讓企業跑特殊虛擬機器的軟體──利用一台實體伺服器視為多個伺服器的方式──而Adams負責的正是這個「虛擬管理程式」的核心。

據Collins的說法,當Intel首次要建造能與VMware的虛擬管理程式運作的微處理器時,Adams是為了確保兩方技術能運作順暢,而唯一被送進這晶片巨擘的VMware工程師。Collins說:「這顯示出對VMWare來說他是多麼重要的。」

Adams從VMWare跳槽到Facebook這件事看起來可能會很怪,即使是Collins知道後也覺得很驚訝──但這就是Facebook目前的狀況。就像是Google、Amazon、Yahoo甚至是Twitter,Facebook已經成長了許多,它需要能重新思考電腦底層運作方式的工程師。Google以建立全新的硬體和軟體聞名,這些軟硬體可以讓它的全球資料中心以大幅增進的速度與效率運行,而Facebook也已經來到了相同的地步。

這間公司雇用了像是Amir Michael這些建造伺服器的人。它也雇用了像是Raghu Murthy這種建構大量伺服器間資料傳輸軟體的工程師。而它現在需要像是Adams的這種頭腦,因此他在2009年加入了這間大型社群網站。

最初Adams負責Facebook的搜尋引擎。但後來他遇見了Evans和Paroski,另外兩位踏入技術深處的工程師。身為愛達華大學生物資訊研究生,Evans建造了用來管理電腦記憶體的新工具。它叫做「jemalloc」,且很快地就被世界上數一數二的瀏覽器Mozilla Firefox所整合。前Mozilla員工Stuart Parmenter說:「他從根本上幫助我們減少Firebox所使用的記憶體大小,他是我認識最聰明的人之一。」

此時,Paroski從另一個軟體巨人Microsoft來到Facebook,他先前是負責.NET runtime,那相當於C#和VB.NET程式語言的虛擬機器。Adams、Evans和Paroski會想出利用虛擬機器來加速Facebook的PHP程式碼果真是在合理不過的事。但實際建構就又是另外一回事了。

根據Pobar和其他專案成員表示,Adams在虛擬機器這個主意上是最大的推手,他讓Facebook上層覺得這是最好的一條路。他是很頑固的那種人,會為自己的立場準備合理的論點。Collins說:「他的聲音真的很有力。在他加入Facebook後迅速成為突出的工程師這點並不讓我驚訝。」

最終,公司決定投入眾多的資源支持Adams、Evans和Paroski與其他像是Mark Williams、Owen Yamauchi、Aravind Menon、Brett Simmers、Guilherme Ottoni和Jordan DeLong的工程師,並由來自Microsoft的資深工程主管Pobar帶領這個小組。

但事情所要花費的時間遠大於預期。Adams說,一部分的問題在於他們低估這件工作的複雜度,另一部分則是Hiphop持續的在進步。曾有好幾個月,他們都在追一個移動的目標。兩年之後,他們終於達到能讓虛擬機器接手整個Facebook的程度,但它還是比原先的Hiphop慢了三倍。

當Adams想到這段時間,你可以從他的聲音聽出他的恐懼。他回憶:「至少對我來說,那是個非常恐怖的時期。真正傷腦筋的地方在於,我們沒有一個好的說法來解釋多餘的時間去哪了。」Evans跟Paroski也感同身受。他們的主管Pobar回憶:「你可以看到這些人背負著多少壓力。Facebook給了他們這麼多資源去追這個目標──然後它就像是『幹!他們真的能完成嗎?』」

他們持續地去縮小這個速度差距,但直到2012夏末,這個虛擬機器還是只有現行網站的65%快。Pobar說:「我們就像是孕婦。我們只想要生出這個小孩,但這要如何達成還很不明朗。」

他們於是開始閉關研究。

.....接續第三頁

留言

粗體斜體刪除線連結引用圖片程式碼

注意:您的電子信箱將不會被公開,且網站連結不會被搜尋引擎採計

{124} {123} {122} {121} {120} {119} {118} {117} {116} {115} {114} {113} {112} {111} {100} {025} {024} {023} {022} {021} {020} {019} {018} {017} {016} {015} {014} {013} {012} {011} {010} {009} {008} {007} {006} {005} {004} {003} {002} {001}