在非死book我學到了什么

878865017 8年前發布 | 15K 次閱讀 Facebook

大家好,我是湯林鵬,來自普林斯頓大學的一名博士生。在剛剛過去的夏天,我與視頻基礎設施團隊緊密合作,從事針對 流媒體視頻引擎 (SVE)的負載測試框架的工作,即在將視頻呈現給用戶之前進行并行處理。我還與非死book的內容分發網絡(FBCDN)團隊合作,將我們以前設計的RIPS( FAST15論文FB研究博客 )一種新型的緩存框架投入生產。在這里,我想以一名畢業生的身份,從三個方面分享我的心得體會:(1)技術方面,如何構建一個生產質量體系;(2)非技術方面,如何在開放的環境(如非死book)中茁壯成長;(3)生產和研究之間的關系。

如何建立一個生產質量體系

從零開始建立一個系統,直到它運行在數千臺服務器上,服務數十億的用戶,是非常有價值的。但這比在實驗室里創造出一個原型要復雜得多,那么什么是重要的指導原則呢?

測試,再測試。有什么方式能比在現實環境中測試更能確保系統的可靠性呢?然而,測試也是一種藝術。以流媒體視頻引擎為例:生產層處理用戶請求;測試層運行負載測試并測試新功能,而對整體系統沒有任何影響;開發層,每個工程師可以快速啟動一個小的開發層來進行小實驗。這三層的規模越來越小,但是靈活性越來越高,從而可以實現產品的快速迭代。

日志和圖表。軟件一旦開發出來,通常會穩定的應用于生產一段時間,所以,使其易于維護非常重要。除了良好的代碼設計和清晰的注釋,還需要事件日志記錄和數據統計,并匯總生成實時圖表。實際上,非死book(其他大型科技公司也是如此)整個團隊都致力于開發這些工具。當問題發生時他們可以迅速確定問題所在,并為系統監控配備良好的設備,從而能更好地理解系統的監控性能情況,進而做出改進。

吸取教訓。有趣的是,要更好地了解系統行為,確保長時間穩定運行,一個重要的方法就是把它推到極限,觀察它是如何失敗的。我實習的部分工作是為流媒體視頻引擎設計并實現一個負載測試框架,此框架可以產生不同類型的工作負載,然后逐漸提高系統的負載直到系統出現問題。這些負載測試幫助團隊定位多個問題以及性能瓶頸,最終加速了產品正式發布。非死book內部的一些團隊甚至通過轉移用戶的請求來對整個后端系統進行壓測。

如何在一個開放的環境中茁壯成長

非死book在團隊之間的自我管理與合作方面擁有開放的文化,管理層更多的承擔服務的角色。下面是一些我從隊友中觀察到的典型特點,我認為在這樣一個開放的環境中成長是很重要的。

接觸。一個人如果只在團隊內舒適的做自己份內的工作,就會浪費在非死book工作的巨大優勢。你應該去接觸其他團隊,看看他們在做什么,聽聽他們面臨什么問題,并思考如何解決問題,是對現有的工具進行修改,還是建立新的工具?而新項目的開始往往源于這個過程。

如果你對其他團隊的工作感到興奮,那為什么不加入他們呢?我們聽過一些大公司的整個部門因為不再創造價值而被裁員或轉移到其他部門的故事。我經常開玩笑說,這類事件是不可能在非死book中發生,因為工程師們會早在這種事發生之前離開,去做更有趣的項目。

了解別人的觀點。合作既可能是有益的,也可能是令人沮喪。任何形式的交流,都需要大家抽出寶貴的時間,因此我們必須尊重對他們的承諾。了解公司的觀點和目標,你就能更好的理解他們所做出的響應,知道如何協作更有益于他們的工作,并持久保持互惠互利的關系。

在做決定時考慮一下其他團隊。整個非死book的后端通過硬件和軟件的依賴關系連接在一起,一個團隊的決定將對其他團隊的系統產生影響。例如,當決定一個服務需要多少臺機器時,我們不僅需要考慮每臺機器可以提供多少帶寬,而且如果我們使用100%的機器帶寬,是否會跑滿機架的帶寬,從而影響同一機架其他團隊的服務?當開發我們的系統時,我們在多個場合受到其它系統問題的影響,這些影響通常很難跟蹤和調試,所以,我們必須盡量不給其他團隊增添麻煩。

保持方向感。當開發一個新的系統時,我們需要克服許多障礙,并不斷付出時間和精力做好預算。優秀的工程師不僅需要迅速解決問題,還需要明確哪些問題更重要。這通常需要分析日志,找到問題根源,設計妥善解決方案,列出任務列表。保持明確的方向感同時兼顧無限的工程細節,是在這瞬息萬變的世界里快速進步的關鍵。

生產和研究

我現在已經在攻讀博士學位上花了三年多時間,我以前的實習工作已經或多或少地以研究為方向了。這是我第一次深入生產系統實習,我們設計并實施了SVE負載測試框架。通過進行一系列的測試,大大加快測試進度,最終推出SVE。我們還實現了在非死book的CDN基于閃存的緩存框架RIPQ。以前它只是一個學術的原型,現在它已在生產中應用。當我把更多的精力投入到生產系統,并開始欣賞所有的工程成果時,我對研究有了更深入的了解,更能明確兩者的優勢和特性。

開發生產系統是一個綜合性的工作,在整個系統順利運行之前,要做好所有準備工作。在用于執行一個功能時會有許多可供選擇的技術,大多數時候,一個不理想的技術可能會比較慢,需要更多的硬件,或者它只是一些快速的解決方案,并沒有推廣到所有的情況,但它仍然會工作。

另一方面的研究往往集中在生產中遇到的特定問題上。我們發現了一個有趣的問題,制定了一個關于它的抽象概念。基于這種概念,去嘗試理解和解決一個普遍存在的問題,確實很好。做研究的另一種方法是從想法開始。系統中的例子,比如穩定雜湊、Bloom過濾器、譜系這些好的想法都為一系列不同的問題提供解決方案。

生產和研究似乎是兩個不同的世界,那二者可以協調起來嗎?我們必須著眼于大局。雖然通常一個單一的技術不會成為一個生產系統成功的關鍵,但當我們檢查各個方面時會發現,它們往往來源于研究項目當中。一個項目對一個系統的貢獻可能比較小,但是,對整個社會的聚集效應非常巨大。

我也很高興看到非死book對研究開放的態度。許多沒有經過正規科研訓練的工程師如果對一些研究項目感興趣,就可以將部分時間投入到研究活動中去。畢竟發現和分享新知識的渴望深深扎根在我們的內心。

來自: http://www.infoq.com/cn/articles/what-i-learned-in-非死book

 

 本文由用戶 878865017 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!