目前,LinkedIn已經成為全球最大的職業社交網站,其會員人數超過3.6億。隨著網站的迅速發展,其維護成本也不斷增加,公司員工從幾百人增 加到數千人。為了維護網站能夠正常運轉和發展,LinkedIn設置了一個專門的運維工程師團隊,來充分了解網站的每個組件,並確保能夠迅速解決網站的問 題。然而,近些年網站遇到問題的數量增加了十幾倍,使得人工解決問題越來越難。於是,LinkedIn近期開發了自動修復系統——Nurse
接下來,本文就LinkedIn的自動修復系統進行介紹。
LinkedIn的網站可靠性工程師Brian Cory Sherwin表示,LinkedIn 之前都是采用人工手段來探測和解決網站運行中出現的問題。站點的穩定全都依靠工程師的雙眼進行發現,然後利用雙手進行手動。然而,從2010年到2015 年,網站遇到問題的數量增加了18倍,而工程師數量卻只增加了個位數。為了網站的穩定發展,LinkedIn高層面臨了一個重要選擇——是相應的增加工程 師數量還是設計一個自動的系統來完成大部分工作。當然,根據諸多網站發展的經驗,LinkedIn選擇了後者。
作為開發自動修復系統的第一步,開發工程師們需要確定如何利用計算機算法來發現並解決問題。之前,LinkedIn已經建立一個單獨的監控系統。該 系統包括了幾十萬個傳感器,能夠迅速發現網站異常,並向工程師們發出警告。然而,對於一個自動修復系統,只是發現問題肯定是遠遠不夠的。該系統需要能夠自 行解決一些比較簡單和常見的問題。只有對於無法自動解決的復雜問題,系統進行分類和簡單分析後,將其提交給工程師解決。
那麼,在發現一個問題之後,系統如何進行分析和解決呢?例如,對於一個具體的問題,基於現象的警告只能說明表相——服務器無法登陸或者應用掉線等。 然而,其背後的原因可能多種多樣,包括進程失效、服務器崩潰等等。在人工處理情況下,運維工程師會進一步詳細分析這些現象,發掘出具體的原因,並相應的執 行不同的修復步驟。自動修復系統采用了類似的處理方法。LinkedIn團隊把監控系統所發現的問題送到具體的請求工作流中。這些工作流再根據工程師之前 內置的算法和動作來修復網站。以應用程序掉線為例,監控系統發現一台機器處於異常狀態,無法服務數據流。之後,數據流會收集事件發生的原因、根據內置算法 重啟相關進程並把整個數據流的結果放置到卡片中。通過這些自動化的流程,工程師就可以避免把大量精力用在簡單問題的處理上,從而把更多精力放置到復雜、深 入問題方面的分析和研究中,保證網站長期健康發展。
此外,LinkedIn已經把Nurse與其他系統進行了完美集成。在多個系統中間,Nurse扮演著中間人的角色。監控系統會把修復工作流的請求 發送到該Nurse,進行問題修復。目前,LinkedIn已經把代碼部署系統、售票系統、遠程執行系統等與Nurse集成在一起。而且,公司允許站點運 維工程師和運維工程師把解決常見問題的方法放置到系統中,供系統自動學習。
在實際測試中,LinkedIn已經證實了Nurse系統的用途。Sherwin表示,針對突然斷電導致的大量服務器掉線的情況,Nurse在數分鐘即完成了服務器狀態的恢復,執行速度大大優於人工解決的情況。而且,Nurse目前每周會執行150個小時的修復工作流,大大節約了工程師的時間和精力。
未來,LinkedIn會繼續對Nurse進行改進。其考慮增加和完善的功能包括減少監控系統的資源消耗、減少從異常狀態恢復的時間以及允許運維工 程師更多的關注基於現象的警告等。而且,該系統為同類型公司和其他網站提供了一定的借鑒。相信未來會有更多的公司推出自動修復系統。
原文:http://www.infoq.com/cn/news/2015/08/linkedin-nurse