偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

探秘Facebook的交付工程團(tuán)隊(duì)和BT部署系統(tǒng)

譯文
系統(tǒng) 新聞
目前Facebook網(wǎng)站升級(jí)的平均耗時(shí)為30分鐘——其中15分鐘用于生成二進(jìn)制可執(zhí)行文件,而另外15分鐘則花費(fèi)在通過(guò)BT體系將可執(zhí)行文件傳輸至各Facebook服務(wù)器的過(guò)程中。一般來(lái)說(shuō),F(xiàn)acebook會(huì)在每個(gè)工作日進(jìn)行一次非關(guān)鍵性更新。而重大更新則每周進(jìn)行一次,通常在周二下午進(jìn)行內(nèi)容發(fā)布。

【51CTO 4月12日外電頭條】Facebook有一套成熟的軟件交付流程,平均30分鐘可完成一次升級(jí)。這套流程的背后有一個(gè)交付工程團(tuán)隊(duì),以及一套BT部署系統(tǒng)。這個(gè)系統(tǒng)是如何運(yùn)作的?Arstechnica網(wǎng)站去拜訪了一次這個(gè)交付工程團(tuán)隊(duì),揭開了這個(gè)系統(tǒng)的神秘面紗——

    [[66537]]

Facebook園區(qū)入口

Facebook總部設(shè)立于加利福尼亞州門洛帕克市,這同一片園區(qū)在多年前孕育出了Sun Microsystems這家同樣聲名在外的高科技企業(yè)。園區(qū)入口處矗立著巨大的宣傳看板,相信每一位用過(guò)Facebook的朋友都不會(huì)對(duì)上面豎起大拇指的圖案感到陌生——贊,這是用戶表達(dá)肯定態(tài)度的方式,可能也標(biāo)志著Facebook公司對(duì)自身成就的評(píng)價(jià)。我最近一次到園區(qū)采訪的時(shí)候,恰好碰上一群十幾歲的少年們聚集于此,爭(zhēng)相在宣傳板前合影留念。

一部席卷全球的熱門影片“社交網(wǎng)絡(luò)”讓成千上萬(wàn)普通用戶了解到Facebook公司如何從學(xué)生宿舍內(nèi)的構(gòu)想成長(zhǎng)為世界第二大巨型網(wǎng)站,這樣一個(gè)丑小鴨變天鵝的故事本身就極具傳奇色彩。然而恐怕很少有人知道這家社交網(wǎng)站成功的背后,有多少技術(shù)人員在交付工作方面付出了艱辛的努力:先進(jìn)的高科技基礎(chǔ)設(shè)施造就了如今每天數(shù)以百萬(wàn)計(jì)用戶的交互式Web應(yīng)用體驗(yàn),而這正是無(wú)數(shù)工程師嘔心瀝血打造出的傲人成果。

我前幾天剛剛獲準(zhǔn)對(duì)Facebook總部進(jìn)行專訪,全程跟蹤這家社交巨頭的交付流程工作。Facebook公司正在籌備并部署一項(xiàng)全新社交功能,即“timeline”系統(tǒng)。而我則以獨(dú)家觀察者的身份參與到項(xiàng)目當(dāng)中,隨時(shí)收集第一手信息并將資料整理發(fā)布。

在Facebook園區(qū)入口與前往企業(yè)辦公地點(diǎn)通路的交匯處,一個(gè)交通指標(biāo)牌映入我的眼簾,上面寫著:黑客之路。正如該公司創(chuàng)始人Mark Zuckerberg在今年早些時(shí)候的首次公開募股信中所言,他希望能以“黑客之路”的方式規(guī)劃企業(yè)管理理念以及發(fā)展方向。在Facebook總部逗留的兩天當(dāng)中,我第一次與他們的交付工程師們共同生活、攜手工作,并真正了解到黑客之路這一概念如何在該網(wǎng)站的成長(zhǎng)與迅速普及當(dāng)中起到?jīng)Q定性作用。

門洛帕克市的總部園區(qū)占地面積巨大,其間排布著密密麻麻的辦公建筑;與其說(shuō)是企業(yè)園區(qū),這里倒更像是一個(gè)小型城市。建筑物當(dāng)中隨處可見精致的涂鴉式壁畫及充滿幽默氣息的海報(bào)裝飾。與傳統(tǒng)的封閉或半封閉式辦公環(huán)境不同,F(xiàn)acebook公司的開發(fā)人員一般會(huì)在大片開放式空間中進(jìn)行工作,辦公設(shè)備也沿著公用桌面排布,員工之間沒(méi)有設(shè)置任何阻礙視線的隔擋。

每座辦公建筑中都配備有公文室,在這里工作人員們可以在不干擾其他同事的前提下盡情開展討論。有趣的是,每座建筑中的會(huì)議室都會(huì)以特定的主題命名。比如某棟樓里的會(huì)議室就是以“狂蟒之災(zāi)”這部電影中的一個(gè)笑話為名。另外,我還親眼見到一些以電視節(jié)目命名的房間。而在工作人員的陪同下進(jìn)入另一棟建筑時(shí),我發(fā)現(xiàn)一間名為JavaScript:The Good Parts的房間。哈哈,這肯定是來(lái)自Doug Crockford所撰寫的同名著作。

最終我來(lái)到交付工程團(tuán)隊(duì)的辦公所在地。正如Facebook公司中的其它開發(fā)人員一樣,交付工程師們同樣使用開放式工作環(huán)境與公用辦公桌。不過(guò)他們的房間仍然具有非常鮮明的特色:這里實(shí)際是一個(gè)酒水品種相當(dāng)豐富的酒吧。

這個(gè)房間原本在兩根垂直支撐柱之間設(shè)有一面背景墻。但在交付工程團(tuán)隊(duì)入駐之后,他們將這塊區(qū)域改造成了酒吧吧臺(tái),并在臺(tái)面上挑起他們精心挑選的名稱:Hotfix(熱修復(fù)補(bǔ)?。┌?。不用問(wèn),這個(gè)點(diǎn)子來(lái)自關(guān)鍵性軟件補(bǔ)丁更新技術(shù)。而這里的員工就在圍繞在吧臺(tái)周圍忙活手頭的工作。

我正是在這里第一次見到交付工程團(tuán)隊(duì)的領(lǐng)導(dǎo)者Chuck Rossi。Rossi的工作設(shè)備就在吧臺(tái)對(duì)面,這樣他可以在工作的同時(shí)一伸手就抄起臺(tái)面上的酒水飲料。我花了整個(gè)下午與這位曾效力于谷歌與IBM公司的資深軟件開發(fā)人士談天說(shuō)地,這段時(shí)光非常美妙,真的像兩個(gè)老朋友坐在科技?xì)庀庥舻暮蟋F(xiàn)代酒吧中暢所欲言。正是以這種方式,我了解到Rossi如何帶領(lǐng)他的團(tuán)隊(duì)幫助Facebook部署更新服務(wù),并討論這項(xiàng)工作的重要性及日常運(yùn)作流程。

[[66538]]

Chuck Rossi,F(xiàn)acebook交付工程團(tuán)隊(duì)的領(lǐng)導(dǎo)者,正坐在Hotfix吧旁接受采訪

Facebook的BT部署系統(tǒng)

Facebook資源代碼主要利用PHP編程語(yǔ)言進(jìn)行編寫。PHP語(yǔ)言在開發(fā)速度方面優(yōu)勢(shì)明顯,但在性能方面比起低層次語(yǔ)言及某些現(xiàn)代編程替代方案卻頗有不足。為了讓這套以PHP為基礎(chǔ)的基礎(chǔ)設(shè)施在可擴(kuò)展性領(lǐng)域更進(jìn)一步,F(xiàn)acebook開發(fā)出了一套名為HipHop的特殊轉(zhuǎn)譯工具。

HipHop能夠?qū)HP代碼轉(zhuǎn)譯為高度優(yōu)化過(guò)的C++代碼,并通過(guò)二次編譯將其轉(zhuǎn)化為運(yùn)行效率極高的本地二進(jìn)制代碼。Facebook于2010年正式推出HipHop并開始銷售開源軟件使用許可,同時(shí)該公司的工程師們指出,在HipHop的幫助下,F(xiàn)acebook業(yè)務(wù)流程中的CPU平均使用率瞬間降低了50%。

由于Facebook所使用的整套代碼庫(kù)都通過(guò)編譯轉(zhuǎn)化二進(jìn)制可執(zhí)行文件,因此該公司的整個(gè)部署流程與我們耳熟能詳?shù)腜HP環(huán)境頗為不同。Rossi告訴我,F(xiàn)acebook所有應(yīng)用程序的二進(jìn)制代碼庫(kù)總體積約為1.5GB。當(dāng)Facebook對(duì)代碼進(jìn)行升級(jí)并生成新的軟件包時(shí),新的全局代碼庫(kù)也必須同時(shí)被推送到企業(yè)內(nèi)部的每一臺(tái)服務(wù)器當(dāng)中。

把1.5GB大小的二進(jìn)制代碼分配給不計(jì)其數(shù)的目標(biāo)服務(wù)器,工作當(dāng)中面臨的技術(shù)挑戰(zhàn)想想都令人頭痛。在摸索出幾套成型的解決方案之后,F(xiàn)acebook公司決定將BT技術(shù)敲定為最終手段。這種人氣極高的點(diǎn)對(duì)點(diǎn)文件共享協(xié)議在向大量不同服務(wù)器傳輸大型文件方面擁有著不可替代的優(yōu)勢(shì)及上佳表現(xiàn)。

Rossi解釋稱,F(xiàn)acebook公司創(chuàng)建了自己的定制BT追蹤工具,其設(shè)計(jì)目的是使Facebook基礎(chǔ)設(shè)施中的每一臺(tái)服務(wù)器都能夠與同一節(jié)點(diǎn)或機(jī)架中的其它服務(wù)器一樣獲得相同的分區(qū)內(nèi)容,如此一來(lái)總體延遲將得到大大降低。

目前Facebook網(wǎng)站升級(jí)的平均耗時(shí)為30分鐘——其中15分鐘用于生成二進(jìn)制可執(zhí)行文件,而另外15分鐘則花費(fèi)在通過(guò)BT體系將可執(zhí)行文件傳輸至各Facebook服務(wù)器的過(guò)程中。

當(dāng)然,二進(jìn)制可執(zhí)行文件只是Facebook應(yīng)用程序堆棧中的組成部分之一。Facebook頁(yè)面中還包含諸多調(diào)用自外部資源的項(xiàng)目,例如JavaScript、CSS以及圖形要素等。這些文件被托管在分布于世界各地的內(nèi)容交付網(wǎng)絡(luò)(CDN)當(dāng)中。

一般來(lái)說(shuō),F(xiàn)acebook會(huì)在每個(gè)工作日進(jìn)行一次非關(guān)鍵性更新。而重大更新則每周進(jìn)行一次,通常在周二下午進(jìn)行內(nèi)容發(fā)布。交付工程團(tuán)隊(duì)專門負(fù)責(zé)管理此類更新的具體部署工作,并全程跟蹤以確保更新的順利完成。

頻繁的更新及發(fā)布是Facebook在創(chuàng)立之初就確定下來(lái)的核心發(fā)展理念之一。在該公司剛剛邁入起步階段的時(shí)候,開發(fā)人員利用快速迭代及增量工程手段堅(jiān)持不懈地對(duì)網(wǎng)站加以完善。這種技術(shù)層面上的靈活性在Facebook的發(fā)展及演變當(dāng)中起到了關(guān)鍵性作用,并成功讓這家年輕的企業(yè)迅速成長(zhǎng)為舉世矚目的社交巨子。

當(dāng)初Facebook公司招募Rossi的時(shí)候,是希望他能夠領(lǐng)導(dǎo)交付工程團(tuán)隊(duì)找到合適的途徑,確保企業(yè)在快速發(fā)展的同時(shí)步伐穩(wěn)健、基礎(chǔ)牢固。對(duì)于正處于急速擴(kuò)張當(dāng)中的Facebook而言,其網(wǎng)站的規(guī)模與管理復(fù)雜性也在以幾何級(jí)數(shù)式增長(zhǎng)。要實(shí)現(xiàn)牢固穩(wěn)妥的交付戰(zhàn)略,傳統(tǒng)的解決方案已經(jīng)無(wú)法滿足需求。正是在這時(shí),他們想到了BT部署系統(tǒng)。

在與Rossi共同度過(guò)的那個(gè)愉快的下午,我在概念上基本理解了他解決Facebook部署問(wèn)題的處理方式。總結(jié)起來(lái),他希望能在客觀條件與理論目標(biāo)之間找到一個(gè)平衡點(diǎn)。他制定了一套相當(dāng)嚴(yán)格的質(zhì)量及穩(wěn)定性標(biāo)準(zhǔn)要求,但具體到解決方案層面卻將著眼點(diǎn)放在高靈活性上。資源總是有限的,他認(rèn)為最好的辦法是通過(guò)系統(tǒng)靈活性來(lái)應(yīng)對(duì)各種意想不到的麻煩。

測(cè)試工作

在最近的幾篇文章中,我們已經(jīng)與讀者朋友深入探討了軟件應(yīng)用程序步入高速交付周期所帶來(lái)的挑戰(zhàn)與機(jī)遇。而挑戰(zhàn)當(dāng)中最難以克服的一個(gè)就是,如何在測(cè)試時(shí)間遠(yuǎn)低于原先水平的前提下保證軟件的質(zhì)量不打折扣。

由于Facebook網(wǎng)站每天都會(huì)進(jìn)行更新,因此質(zhì)量測(cè)試也就成了壓力最大、負(fù)荷最強(qiáng)的先鋒部門。為了快速發(fā)現(xiàn)問(wèn)題,F(xiàn)acebook中每一位通過(guò)企業(yè)內(nèi)部網(wǎng)絡(luò)訪問(wèn)該社交網(wǎng)站的員工,都將直接登入采用了最新代碼的實(shí)驗(yàn)性網(wǎng)站架構(gòu)。在這里他們能夠接觸到一切尚未經(jīng)過(guò)測(cè)試的修改建議以及還沒(méi)有在正式網(wǎng)站上采用的最新功能。與此同時(shí),員工還可以通過(guò)另一個(gè)單獨(dú)的網(wǎng)址訪問(wèn)與外界用戶相同的正式運(yùn)行版網(wǎng)站,這樣兩相對(duì)比之下可能更容易發(fā)現(xiàn)問(wèn)題。

將測(cè)試網(wǎng)站設(shè)定為企業(yè)員工的默認(rèn)訪問(wèn)對(duì)象,能夠在新元素及功能付諸實(shí)踐之前先經(jīng)受專業(yè)人士的檢測(cè)。測(cè)試網(wǎng)站中還包含了一些內(nèi)置的錯(cuò)誤報(bào)告工具,員工一旦發(fā)現(xiàn)問(wèn)題,就可以利用它們輕松提供詳細(xì)反饋。

為了避免回檔事故并確定通用性技術(shù)問(wèn)題,F(xiàn)acebook還部署了一套自動(dòng)測(cè)試系統(tǒng)。該公司將這類測(cè)試分為兩個(gè)獨(dú)立的部分:一部分專門進(jìn)行代碼的常規(guī)完整性測(cè)試,而另一部分則模擬用戶的日常使用情境,以確保網(wǎng)站的用戶界面能夠運(yùn)轉(zhuǎn)良好。

在更新全面付諸實(shí)踐之前,新的代碼將首先被推送到“a2”層,也就是由數(shù)臺(tái)Facebook公共服務(wù)器組成的試點(diǎn)環(huán)境。在這個(gè)階段的測(cè)試工作中,會(huì)有一些隨機(jī)Facebook參與到更新中來(lái)。盡管參與者的數(shù)量在Facebook全局用戶群體中只占極小的比例,但技術(shù)人員仍然能從整個(gè)更新流程中發(fā)現(xiàn)潛在問(wèn)題并及時(shí)加以修復(fù)。

[[66539]]

Chuck Rossi和他的工作臺(tái)

預(yù)檢流程

Facebook利用自己的內(nèi)部多人在線聊天系統(tǒng)(IRC)服務(wù)器保持企業(yè)中的交流通暢。大多數(shù)企業(yè)的工程人員在工作強(qiáng)度較大時(shí),交流通道都顯得比較冷清。但根據(jù)Rossi的說(shuō)法,F(xiàn)acebook公司在正常運(yùn)作狀態(tài)下,每天會(huì)有約700名員工保持在線溝通。工具開發(fā)人員專門為IRC打造了幾種業(yè)務(wù)助手軟件,能夠?qū)RC中的各類功能與Facebook開發(fā)與部署工作流程緊密結(jié)合,進(jìn)而發(fā)揮巨大的輔助作用。

在新一輪升級(jí)補(bǔ)丁即將上線之前,Rossi會(huì)在IRC系統(tǒng)中啟動(dòng)一套檢測(cè)程序。在此次更新活動(dòng)中提交過(guò)代碼的開發(fā)人員都將收到通知,并加入頻道以共同關(guān)注更新過(guò)程。整從此更新流程將在大家的協(xié)同監(jiān)控之下試作一次,當(dāng)確認(rèn)一切正常后才會(huì)進(jìn)入實(shí)際部署階段。

如果某位開發(fā)人員在幾分鐘之后仍然沒(méi)有做出協(xié)作回應(yīng),Rossi能夠利用助手通過(guò)多種不同的通訊渠道對(duì)該開發(fā)人員發(fā)出提醒,其中包括電子郵件通知以及短信提示。正如Rossi在與我的交談中所強(qiáng)調(diào)的,他希望部署更新的時(shí)候所有與之相關(guān)的開發(fā)人員都能在場(chǎng)監(jiān)督并發(fā)表意見。

在Facebook公司內(nèi)部存在著這樣一種優(yōu)秀的開發(fā)文化,大家都認(rèn)為開發(fā)人員應(yīng)該為自己編寫的代碼負(fù)責(zé)到底,直到這些成果順利應(yīng)用于產(chǎn)品之中。這一理念的實(shí)際體現(xiàn)就是“DevOps”活動(dòng),這種促進(jìn)開發(fā)、技術(shù)運(yùn)營(yíng)及質(zhì)量保障部門間溝通的方案有效消除了各團(tuán)隊(duì)之間的溝通障礙,并最終保證了項(xiàng)目的成功運(yùn)轉(zhuǎn)。

如果Facebook網(wǎng)站在實(shí)際更新過(guò)程中出現(xiàn)問(wèn)題,編寫相關(guān)代碼的開發(fā)人員會(huì)立即得到提示,并馬上投入到修復(fù)工作中去。

實(shí)際部署

Rossi在Facebook公司中的工作臺(tái)由以下設(shè)備構(gòu)成:一臺(tái)30英寸戴爾顯示器、一臺(tái)Mac筆記本電腦以及一臺(tái)分屏顯示器。上周二,我花了一整天時(shí)間觀察Rossi的日常工作內(nèi)容,發(fā)現(xiàn)他的大部分工作都是在瀏覽器以及終端窗口中完成的。在準(zhǔn)備部署更新之前,他在終端窗口發(fā)出指令,正式啟動(dòng)本次升級(jí)流程。

我們一同關(guān)注著Facebook網(wǎng)絡(luò)系統(tǒng)監(jiān)控工具所顯示出的各項(xiàng)狀態(tài)指標(biāo)。網(wǎng)頁(yè)的主體內(nèi)容是個(gè)大大的進(jìn)度條,標(biāo)明企業(yè)內(nèi)部已經(jīng)成功完成二進(jìn)制文件更新的服務(wù)器所占的百分比。隨著更新的自動(dòng)部署,進(jìn)度條也在不斷向終點(diǎn)推進(jìn)。過(guò)程中,進(jìn)度條左端出現(xiàn)了窄窄的紅色提示條,意味著新版本在更新時(shí)發(fā)生錯(cuò)誤的系統(tǒng)比例。

Rossi告訴我,這種系統(tǒng)更新失敗的情況經(jīng)常發(fā)生。在部署過(guò)程中,升級(jí)失敗往往是由硬件問(wèn)題所引發(fā)。舉例來(lái)說(shuō),如果某臺(tái)服務(wù)器的存儲(chǔ)容易不足或者運(yùn)行種子文件時(shí)遭遇網(wǎng)絡(luò)問(wèn)題,那么更新很可能無(wú)法完成。不過(guò)出錯(cuò)的服務(wù)器數(shù)量一般都很小,只需簡(jiǎn)單調(diào)整即可恢復(fù)正常,幾乎不會(huì)惹出什么大麻煩。

盡管軟件的部署對(duì)象是服務(wù)器,但Rossi告訴我Facebook的架構(gòu)仍然會(huì)對(duì)更新過(guò)程產(chǎn)生一些獨(dú)特的影響。Facebook在設(shè)計(jì)之初要求用戶會(huì)話能夠不依賴于任何特定的服務(wù)器設(shè)備,以分布式程度極高的無(wú)地區(qū)差形式進(jìn)行運(yùn)作。也就是說(shuō),F(xiàn)acebook基礎(chǔ)設(shè)施中的任意一臺(tái)服務(wù)器都能夠處理任何給定的頁(yè)面操作請(qǐng)求。

這種方式為全局系統(tǒng)提供了異乎尋常的彈性。當(dāng)Facebook執(zhí)行更新時(shí),工作人員不必?fù)?dān)心用戶會(huì)話的狀態(tài)會(huì)受到干擾或進(jìn)行遷移。部署系統(tǒng)會(huì)在服務(wù)器端分批對(duì)Facebook執(zhí)行流程加以重啟,這樣一來(lái)整個(gè)更新過(guò)程就能夠以無(wú)縫化形式進(jìn)行。無(wú)論是已經(jīng)完成更新的還是仍然運(yùn)行著舊版本系統(tǒng)的服務(wù)器,都能夠繼續(xù)處理接收到的用戶頁(yè)面請(qǐng)求,而與此同時(shí)企業(yè)基礎(chǔ)設(shè)施的全面更新也在有條不紊地進(jìn)行當(dāng)中。

Facebook在更新與正常業(yè)務(wù)同時(shí)運(yùn)轉(zhuǎn)的情況下,系統(tǒng)設(shè)施將幾乎處于滿負(fù)荷狀態(tài)。通常情況下,F(xiàn)acebook典型更新在部署中不需要預(yù)設(shè)停機(jī)時(shí)間,也絕不會(huì)引發(fā)任何形式的網(wǎng)站服務(wù)中斷現(xiàn)象。Rossi指出,無(wú)停機(jī)更新流程是Facebook交付工作策略中的一項(xiàng)原則性要求。他為此感到自豪,并認(rèn)為這是對(duì)網(wǎng)絡(luò)軟件工程工作優(yōu)秀與否的一種檢驗(yàn)。

事后檢查

更新流程徹底結(jié)束之后,Rossi還需要做進(jìn)一步審查,以確保系統(tǒng)變更沒(méi)有對(duì)任何層面的原有內(nèi)容造成破壞。他的團(tuán)隊(duì)為此專門打造了一套先進(jìn)的分析工具,其作用是追蹤Facebook網(wǎng)站的各項(xiàng)運(yùn)行狀態(tài)。工具的主儀表板上的線形圖顯示出各檢測(cè)指標(biāo)的變化情況,包括流量、資源消耗、產(chǎn)品獨(dú)立組件故障率以及其它各種重要數(shù)據(jù)。

關(guān)注這些系統(tǒng)狀態(tài)的浮動(dòng)與走勢(shì),能夠有效幫助工程人員辨別并修正系統(tǒng)中出現(xiàn)的問(wèn)題。在故障發(fā)生之初,技術(shù)人員能夠快速將當(dāng)前數(shù)據(jù)與歷史記錄進(jìn)行比照,并輕松準(zhǔn)確地查明問(wèn)題出在哪里。交付工程團(tuán)隊(duì)及其它Facebook工程小組會(huì)在更新結(jié)束后繼續(xù)嚴(yán)密留意網(wǎng)站的運(yùn)行狀態(tài),以確保一切項(xiàng)目及功能仍然運(yùn)轉(zhuǎn)良好。

一旦發(fā)現(xiàn)問(wèn)題,例如系統(tǒng)中的某部分出現(xiàn)不合理的高故障率,那么企業(yè)中的工程師們將立即開始對(duì)錯(cuò)誤日志進(jìn)行深入分析,以找出問(wèn)題發(fā)生的根源。Facebook所使用的內(nèi)部工具非常犀利,在它的幫助下技術(shù)人員可以很輕松地觀察并分析日志內(nèi)容,并將結(jié)論與代碼變更及特定錯(cuò)誤提示相結(jié)合,最終拿出一套最為簡(jiǎn)潔高效的修復(fù)方案。

Facebook所使用的內(nèi)部監(jiān)控工具能夠追蹤大量數(shù)據(jù)源,甚至連與Facebook相關(guān)的tweet消息也涵蓋在內(nèi)。通過(guò)收集與匯總,該工具將分析結(jié)果以單獨(dú)的走勢(shì)曲線圖進(jìn)行表示,直觀展現(xiàn)了網(wǎng)絡(luò)用戶對(duì)Facebook正面與負(fù)面評(píng)價(jià)的所占比例及變化。這一點(diǎn)非常重要,因?yàn)楫?dāng)我們?cè)谀撤N社交網(wǎng)絡(luò)中遭遇技術(shù)缺陷或應(yīng)用故障后,很可能會(huì)在其它網(wǎng)站上大肆抱怨以發(fā)泄怒氣。對(duì)這類內(nèi)容保持關(guān)注,就能幫助Facebook的技術(shù)人員迅速掌握那些可能被自己忽略掉的系統(tǒng)故障。

根據(jù)我的觀察,當(dāng)天的更新流程非常順暢,沒(méi)有出現(xiàn)任何技術(shù)問(wèn)題或系統(tǒng)故障。日志消息的圖表中曾經(jīng)顯示某個(gè)系統(tǒng)組件出現(xiàn)了小小的負(fù)載高峰,但通過(guò)Rossi及其團(tuán)隊(duì)的及時(shí)追蹤及排查后,發(fā)現(xiàn)一切都屬于正?,F(xiàn)象。

[[66540]]

Facebook公司交付工程團(tuán)隊(duì)在慶祝“一周一度“的更新成功

回檔是失敗者的行為

盡管在我的采訪過(guò)程中并沒(méi)有出現(xiàn)什么亂子,但Rossi還是非常熱心地滿足了我的好奇心。這個(gè)問(wèn)題其實(shí)也一直在困擾著我:一旦更新過(guò)程發(fā)生故障,F(xiàn)acebook會(huì)怎樣處理?他的回答是,如果在更新結(jié)束后有一大堆錯(cuò)誤暴露出來(lái),交付工程團(tuán)隊(duì)將與相關(guān)開發(fā)人員通力合作,力爭(zhēng)在最短的時(shí)間內(nèi)解決這一問(wèn)題。當(dāng)修復(fù)方案準(zhǔn)備就緒,Rossi的團(tuán)隊(duì)將立即將其投付部署,并組織新一輪更新。

當(dāng)某些錯(cuò)誤太過(guò)嚴(yán)重時(shí),快速修復(fù)幾乎是不可能完成的任務(wù)。因此我問(wèn)他此前有沒(méi)有將網(wǎng)站恢復(fù)到舊有版本的經(jīng)歷。但他的回應(yīng)斬釘截鐵:“回檔是失敗者的行為!“

不過(guò)他又微笑著補(bǔ)充道,事實(shí)上他確實(shí)也執(zhí)行過(guò)系統(tǒng)回檔。Facebook擁有一套合理的機(jī)制,能夠快速高效地將系統(tǒng)恢復(fù)到上一個(gè)版本,但他們只將此作為最后一項(xiàng)保障性手段使用。每臺(tái)服務(wù)器中都保存著上一個(gè)版本的二進(jìn)制文件,并能夠在絕對(duì)必要的情況下立刻進(jìn)行切換。

他告訴我,對(duì)于Facebook這樣的大型社交網(wǎng)站而言,進(jìn)行系統(tǒng)回檔就像拉下火車上的緊急剎車一樣;這么做并不可取,因此除非別無(wú)選擇,否則他們絕對(duì)不會(huì)嘗試。在他就職于Facebook的數(shù)年中,系統(tǒng)回檔的情況也只碰上過(guò)幾次。

Facebook的測(cè)試機(jī)制以及開發(fā)人員問(wèn)責(zé)理念有效防止了代碼編寫工作中出現(xiàn)嚴(yán)重錯(cuò)誤的機(jī)率。當(dāng)開發(fā)人員的代碼破壞了網(wǎng)站架構(gòu)時(shí),他們不僅需要立即投入修復(fù)工作,還必須承擔(dān)績(jī)效評(píng)估及人事變動(dòng)等層面的懲罰。Facebook公司中的代碼歸屬與開發(fā)人員緊密相聯(lián),因此根本不用指望在捅出婁子之后仍然高枕無(wú)憂。

該公司所使用的內(nèi)部工具具備一種標(biāo)志性的Facebook式靈感,而Rossi也對(duì)這種評(píng)估機(jī)制贊不絕口。這是一種評(píng)分工具,它賦予了Facebook公司中每位員工一定的“karma”值,這一佛教用語(yǔ)通俗一點(diǎn)來(lái)說(shuō)可以看作是“善惡值”。善惡值與代碼審查系統(tǒng)直接掛鉤,每位開發(fā)人員在網(wǎng)頁(yè)儀表板中都擁有自己的狀態(tài)欄,Rossi可以通過(guò)點(diǎn)擊欄中的“頂”或“踩”圖標(biāo)來(lái)提升或降低對(duì)應(yīng)員工的善惡值屬性。

在Rossi的工具中,表示“頂”的功能圖標(biāo)與Facebook社交網(wǎng)站中的那個(gè)完全一致。而表示“踩”的圖標(biāo)則正好是把“頂”的圖形上下倒置。Rossi不無(wú)得意地向我展示了他的圖標(biāo),并開玩笑說(shuō)他是世界上惟一一個(gè)能使用Facebook式“踩”圖標(biāo)的家伙。

善惡值的設(shè)定能夠幫助Facebook公司時(shí)刻掌握員工的工作狀態(tài),不過(guò)在代碼審查過(guò)程中,評(píng)分機(jī)制同樣能夠幫上大忙。在對(duì)更新代碼進(jìn)行整體整合時(shí),Rossi能夠一目了然地發(fā)現(xiàn)哪些代碼是由“善惡值”較低的技術(shù)人員所編寫,這樣他就會(huì)對(duì)這些代碼格外關(guān)注,因?yàn)檫@幫家伙出錯(cuò)的潛在風(fēng)險(xiǎn)更高。

善惡值較低的員工可以通過(guò)自身的良好表現(xiàn)及工作態(tài)度逐漸提升這項(xiàng)評(píng)分——不過(guò)也有些人冥頑不靈,他們居然打算通過(guò)給Rossi帶小點(diǎn)心的方式讓他放自己一馬。不過(guò)最令人驚訝的是,Rossi真的認(rèn)同了這一做法。他告訴我,酒和蛋糕是員工恢復(fù)善惡值的首選禮品。說(shuō)到這里,他又指了指交付工程團(tuán)隊(duì)辦公室中那令人印象深刻的酒水儲(chǔ)備:其中很大一部分就來(lái)自犯了錯(cuò)的開發(fā)人員。

[[66541]]

Facebook公司交付工程部門中的Hotfix吧——以酒補(bǔ)過(guò),原來(lái)這才是hotfix的真正含義

發(fā)展前景

我與Rossi探討了他對(duì)于發(fā)展前景,尤其是Facebook的部署策略在企業(yè)技術(shù)基礎(chǔ)設(shè)施發(fā)生變化之后的預(yù)期走勢(shì)。他認(rèn)為,隨著時(shí)間的推移,他的團(tuán)隊(duì)在工作效率方面將進(jìn)一步提高:準(zhǔn)備過(guò)程、構(gòu)建工作以及部署耗時(shí)等項(xiàng)目都還有潛力可挖,到時(shí)候整套更新任務(wù)可能幾分鐘就能搞定。

目前Facebook最重視的開發(fā)工作之一是推出一個(gè)能夠取代HipHop轉(zhuǎn)譯器的新型后備項(xiàng)目。Facebook公司的開發(fā)人員正在創(chuàng)建自己獨(dú)有的字節(jié)碼格式及自定義運(yùn)行環(huán)境,他們將其稱為HipHop虛擬機(jī),并希望它能成為支持Facebook運(yùn)行的下一代平臺(tái)。這一項(xiàng)目完成之后,該企業(yè)將能夠把PHP源代碼編譯成能夠?yàn)樘摂M機(jī)直接運(yùn)行的字節(jié)碼。

如此一來(lái),托管代碼模式將更接近于Java及.NET,這樣的進(jìn)展能夠讓Facebook在保證代碼一致性的前提下進(jìn)一步提高系統(tǒng)靈活性。拋開其它各類優(yōu)勢(shì)不談,Rossi告訴我這種態(tài)勢(shì)將對(duì)現(xiàn)有部署流程產(chǎn)生重大影響。過(guò)去每一次更新都必須在所有服務(wù)器上傳輸1.5GB體積的二進(jìn)制代碼庫(kù),而未來(lái)他們只將與修改內(nèi)容相關(guān)的字節(jié)碼發(fā)出即可完成更新。Facebook網(wǎng)站甚至有能力將更新字節(jié)碼與正處于運(yùn)行狀態(tài)的應(yīng)用程序直接拼接,這樣連進(jìn)程都不必重新啟動(dòng)了。

一旦上述理想能夠成為現(xiàn)實(shí),整個(gè)大規(guī)模更新流程將能夠在數(shù)分鐘內(nèi)完成,而Facebook也就可以借此徹底拋棄以往的更新時(shí)間表,真正按照開發(fā)思路將增量部署納入變更模式之中。在這種情況下,企業(yè)開發(fā)人員則獲得史無(wú)前例的高度敏捷性。

在周二例行的關(guān)鍵性更新結(jié)束之后,Rossi和他的團(tuán)隊(duì)開始對(duì)系統(tǒng)加以分析,以確保更新工作沒(méi)有引發(fā)任何問(wèn)題。當(dāng)一切圓滿結(jié)束之后,他們?cè)趆otfix吧舉杯暢飲以示慶祝。

歡樂(lè)的時(shí)光總是過(guò)得特別快,在結(jié)束了一天的采訪、再次漫步在Facebook園區(qū)的黑客之路上時(shí),我不僅慨嘆默默無(wú)聞的“交付工程團(tuán)隊(duì)”在扶持Facebook順利發(fā)展的道路上起到了如此巨大的作用。

Facebook盡心竭力所打造出的社交平臺(tái),讓我們每一位普通使用者得以在其中分享過(guò)往閱歷、記錄當(dāng)年點(diǎn)滴,這不禁令人心生景仰。而在這喧鬧繁華的平臺(tái)背后,卻有著這樣一群從未出現(xiàn)在燈光下的技術(shù)人員。他們擁有強(qiáng)大的知識(shí)背景,創(chuàng)造著與大多數(shù)人不一樣的奮斗故事。希望大家記得,正是由于這些個(gè)性鮮明、可敬可愛(ài)的人們的存在,F(xiàn)acebook才能始終光輝耀眼、獨(dú)領(lǐng)風(fēng)騷。

原文:Exclusive: a behind-the-scenes look at Facebook release engineering

 

責(zé)任編輯:yangsai 來(lái)源: 51CTO.com
相關(guān)推薦

2012-05-12 00:51:49

Linux運(yùn)維趨勢(shì)Facebook交付

2017-02-27 18:28:45

持續(xù)交付部署

2010-08-16 16:21:04

服務(wù)器Twitter

2023-08-09 19:03:21

數(shù)字化離岸交付

2010-07-19 08:41:56

Facebook

2023-02-07 08:21:05

團(tuán)隊(duì)前后端架構(gòu)

2023-05-15 10:08:15

人工智能軟件交付工具

2012-12-07 09:15:05

vFabricApplicationDirector

2013-10-10 09:55:28

Facebook數(shù)據(jù)中心傳統(tǒng)廠商

2014-04-16 13:34:19

Facebook數(shù)據(jù)中心

2022-08-03 09:48:48

敏捷交付框架

2023-05-12 15:07:40

測(cè)試開發(fā)

2018-04-24 09:00:00

開發(fā)自動(dòng)化軟件架構(gòu)

2011-04-26 09:18:53

FacebookPHPmysql

2010-02-07 14:54:13

Android

2011-10-08 10:43:06

軟件工程

2023-11-08 17:19:21

平臺(tái)工程架構(gòu)設(shè)計(jì)

2009-07-24 08:54:32

Windows 7版本發(fā)布RTM

2012-08-20 13:38:09

Facebook數(shù)據(jù)中心

2010-06-23 14:20:06

eMule協(xié)議
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)