1. 程式人生 > >十年•杭研技術秀 | “網易雲端儲存服務”從0到1發展之路

十年•杭研技術秀 | “網易雲端儲存服務”從0到1發展之路

本文由 網易雲 釋出

網易杭州研究院(以下簡稱“杭研”) 成立十週年之際,杭研正式推出了網易雲。“十年•杭研技術秀”系列文章,由杭研研發團隊傾情奉獻,為您展示杭研那些有用、有趣的技術實踐經驗,涵蓋雲端計算、大前端、資訊保安、運維、QA、大資料、人工智慧等領域,涉及前沿的分散式、容器、深度學習等技術。正是這些寶貴的實踐經驗,造就了今天高品質的網易雲產品。本文的分享來自網易杭州研究院雲端計算平臺產品部,翔實地描述了網易雲端儲存系統從無到有以及一路披荊斬棘不斷完善的歷程。

一、從0誕生

2012年雲端計算在業界已經風起雲湧,其為企業帶來的價值為世界所認同,按需提供的計算、儲存、網路等底層IaaS基礎設施,以及豐富的PaaS和SaaS服務,為IT公司產品的開發、運營和快速可持續發展提供了強有力的支撐。雲端計算猶如肥沃的土壤,讓各種產品和idea猶如雨後春筍般在清新的空氣和陽光中快速成長。

同樣地,網易杭州研究院也早已蓄勢待發,準備捋起袖子大幹一場,如同追風少年,馳騁於時代浪潮之巔。

其中後臺技術中心儲存平臺開發組NOS(NetEase Object Storage)團隊在緊鑼密鼓地打造面向整個公司的雲端儲存服務,希望更好地整合底層的儲存資源並以開放協議(HTTP RestFul)提供給網易的各個開發團隊使用。

巧婦難為無米之炊,而對於NOS團隊來說,米缸裡的米儼然已經準備好。在其他網際網路企業高呼去IOE之前,網易杭州研究院早在2006年就已經開始打造分散式檔案儲存服務和分散式資料庫服務來滿足公司當前和未來業務的發展,這兩個系統分別是DFS(Distribute File System)

DDB(Distribute Data Base)。DFS的目標是整合諸多伺服器的儲存資源為上層應用提供海量的儲存系統,支撐橫向按需擴容。DDB的目標是整合底層的關係型資料庫服務,為上層服務提供海量的資料庫服務。DFS和DDB的設計都秉承了“Keep it Simple”的系統設計理念,對於大型分散式系統來說,簡單尤為可貴,簡單意味著可控、不易出錯和強大的生命力。

圖1為DFS的基本設計架構圖。每個物件有一個全域性唯一的64位文件ID號,按照24+10+10+10+10切分為四段,分別代表桶號、目錄結構和檔名(避免本地檔案系統單目錄下元資料的限制), 每個SN管理多個磁碟,多個SN上的磁碟做成磁碟對,桶建在磁碟對上,桶和SN的最終對映關係緩存於客戶端。客戶端FSI直接根據快取的對映關係寫多份副本。

圖1 DFS的基本設計架構

DFS分散式檔案儲存系統在郵箱大附件和網易網盤業務中得到了非常成功的應用,承擔了所有網易郵箱附件儲存服務,儲存規模早已達到PB級別,為網易郵箱的快速可持續發展提供了強有力的支撐。DDB分散式資料庫架構這裡不再贅述,感興趣的讀者可以參閱DDB架構實踐(複製到瀏覽器檢視:tom.nos-eastchina1.126.net)。

當時,這些基礎元件,如DFS分散式儲存系統,使用模式為一個產品部署一套,譬如郵箱網盤、大附件、相簿、網易部落格等都會單獨部署一套。由於網易新產品層出不窮,這種模式就導致了大量的運維工作,並形成非常多的資源孤島,多個產品不能融合共用資源,造成大量的資源浪費。

隨著時間的發展,雲服務的思維方式慢慢深入人心。團隊決心改變這種模式,在這樣的背景下,NOS立項,基於DFS和DDB,8人團隊用1年多的時間成功打造了一款功能媲美AWS S3的雲端儲存系統,於2012年10月30日成功上線,如圖2所示。NOS呱呱墜地意義重大,伴隨著其它雲端計算產品陸續完成上線,網易正式進入雲端計算新時代

圖2 2012年的雲端儲存服務

二、成長之痛

如同嬰兒誕生,NOS上線之初,經歷短暫平靜後便開始摸爬滾打,一路荊棘一路坎坷,不斷成長。

2012年上線之後,接入NOS的第一個產品是網易雲課堂,承載課堂上的所有圖片和視訊;後續不斷有網易公開課、網易雲音樂、有道雲筆記、網易雲閱讀、網易花田、印象派、網易遊戲官網等網易網際網路產品的接入。上線之初,產品的架構能夠很好地滿足當時的系統負載,順風順水度過了半年的時間。

和其他網際網路產品一樣,NOS作為面向開發者(同時也直面使用者請求)的產品,技術上的短板和流程上的缺陷隨著越來越多產品的接入及產品自身的發展壯大不斷凸顯。

2013年,IM大戰爆發,微信、來往之外,網易和電信公司聯合推出易信,希望能在IM領域佔得一畝三分地。技術上,易信UGC資料(語音、圖片、視訊等)的上傳、儲存、訪問和處理基本全部使用NOS。NOS和其他網易雲端計算服務保障了易信產品在短期內快速釋出上線。

但是上線之後的大規模推廣給NOS系統帶來了數十倍於往常的壓力,UGC產品帶來的線上增量是NOS團隊未曾預料到的。

2013年5月的一天,陽光明媚一如既往,但就在16:20,NOS團隊的上空飄來了一片陰雲:NOS一臺伺服器意外掛掉,隨後產品方反饋NOS服務很慢,團隊排查發現此時NosProxy(NOS對外業務邏輯服務模組)使用的servlet容器Tomcat的連線數從往常的100、200上升到5000以上,對於Tomcat 這樣的執行緒併發模型伺服器(Thread Based concurrey Servlet),底層需要一個執行緒處理一個使用者請求,而依賴元件的過載和超時的不合理設定直接導致了處理執行緒一直被後端依賴元件block。16:32,連線數再一次惡化,NOS對外提供的所有介面和服務陸陸續續不可用,使用者請求的不斷到達和後端依賴模組的過載,直接導致系統發生了雪崩效應。事態嚴重,NOS團隊立即對線上服務模組進行重啟並啟動擴容計劃,開始調集公司力量增加新伺服器進行線上擴容

此時丁老闆辦公室外面的易信團隊異常騷動,問候NOS爹孃的聲音此起彼伏。到了下午17時多,NOS又一次出現故障,新機器還沒ready,團隊所能做的就是重啟重啟再重啟,突然,NOS負責人後面出現了一個高大而又陌生的身影,丁老闆穿著拖鞋下來了,直接彪了一句“Tomcat怎麼能這麼用”(你沒聽錯,丁老闆是技術出身的)。記憶中,這是我們頭一次離老闆這麼近,近在咫尺,丁老闆在背後看著我們處理線上問題,更多的細節伴隨著顫抖著的小手敲著鍵盤的聲響已經記不太清了。

成長的代價很沉重,但收穫是沉甸甸的。此次重大事故後,團隊進行了全方位的總結,技術方面的改進很多,主要包括:

  • 服務拆分:子系統過載會級連導致整個系統的過載,對關鍵服務模組進行了拆分和隔離。
  • 過載保護:對所有子系統的呼叫設定合理的超時,避免持續等待,並且進行了完善異常驗證測試。
  • 盡力而為:子系統過載服務不過來的時候直接拒絕服務,盡力而為,並且拒絕做無用功(客戶端已經超時的請求直接丟棄)。
  • 高可用:避免系統單點,使用Nginx健康檢查、VIP、自動切換指令碼等機制自動遮蔽故障節點,保障線上服務持續可用。
  • 故障隔離:對圖片、上傳下載伺服器進行物理機器的隔離,物理隔離代價較大,在實踐上還要在邏輯上對不同業務進行一定隔離,比如程序隔離、業務隔離等等,避免一個籃子裡所有的雞蛋都出問題。

三、快速發展

技術和構架上的改進基本能夠保障系統巨集觀上跟得上業務的發展。而如何在產品快速發展過程中保持持續穩定,是我們這5年來遇到的一個很大的難題。

首先看一個概念,對於雲服務而言,評估一個服務是否穩定有一個很重要指標,即可用性或者說可用率,該指標具體量化了系統或者服務的穩定性特性,如表1所示。

表1 雲服務可用率指標

在NOS產品的不斷髮展中,除了需要持續維護系統穩定的執行,還需要不斷開發新功能,並進行構架的調整。如何在大大小小的關節點和振盪期持續對外穩定輸出服務,維持高水準的穩定性和可用性? 這個問題的解決,需要長時間的積累以及團隊的堅持履行,甚至涉及到團隊文化的建設,遠比絕大部分技術上的調整艱難得多。下面我們具體來看NOS團隊在這方面的實踐經驗和取得的成績。

表2為團隊在高速發展的2年中記錄的NOS實際線上可用率資料。

表2 NOS可用率提升歷程

在這兩年時間,NOS服務普遍做到了3個9,甚至4個9以上的可用率。在2016年上半年,NOS系統達到了5個9的可用率,唯一發生的故障為線上資料庫伺服器故障,自動化指令碼在3分鐘的時間內自動完成故障探測和備份節點切換,實際造成的影響不到3分鐘。期間伴隨著諸多新功能的上線和構架調整,如圖3所示,2016上半年,NOS元件數量到達41個,版本釋出多達42次,涉及15個功能元件,上線次數30次(不包含灰度釋出),每週都要進行好幾次上線,開發語言包括Java、C++、Golang、Python、Objective-C等。

圖3 2016年上半年的NOS

同時相比於2015年底,2016年上半年新增儲存容量達到歷史總量的70%,系統壓力增加50%,系統的橫向水平擴充套件能力很好地滿足了業務快速增長的需求。據不完全統計,NOS當前為網易負載數一數二的大系統。

在產品推廣使用上面,2014~2016年 NOS發展迅速,成為網易內部及合作伙伴雲端儲存產品的首選。圖4列舉了當前使用NOS的一些產品。NOS提供的非結構化資料解決方案為大型網際網路、社交通訊、電商、移動、支付理財、SaaS等諸多領域的產品提供了穩定的服務。

圖4 使用NOS的網易產品

回過頭來我們來回答“NOS如何在大大小小的關節點和振盪期持續對外穩定輸出服務,維持高水準的穩定性和可用性?”這個問題。在將近5年的時間內,NOS團隊基於無數次的討論、實踐和血淚教訓,不斷總結和完善“NOS穩定保障流程體系”。

簡而言之,我們從定義、規劃、實施、測試、上線、運維、事故等7個大方面“確保提早發現問題,縮小問題產生的代價,快速進行恢復,從而最大限度減小損失”,如圖5所示。

圖5 NOS穩定保障流程體系

流程看起來很重,其實並不是所有大小功能的上線工作都需要全面執行該流程,但是關鍵的流程都要覆蓋到,大型架構的改動則會嚴格執行完整的流程。客觀現實要求團隊必須如履薄冰,一步一個腳印踏踏實實,用完善的流程來避免人為引入的不可靠因素,因為NOS雲端儲存服務是給大量產品提供7×24小時線上服務,出問題的代價太沉重。

當然,NOS雲服務的快速健康發展,原因有很多,除了提供了“穩定的基礎服務”,我們還提供了“貼近使用者的增值服務(如豐富的圖片和音視訊服務、直傳加速服務)”和“口碑堅挺的技術支援(開發會投入1/3時間接待客戶,幫助客戶更快更好地使用NOS)”。穩定是基石,增值服務能吸引更多的使用者,口碑堅挺的技術支援更幫助產品團隊實現客戶留存和良好口碑傳播。NOS通過這三方面更好地支撐各個產品穩定服務,從而反過來促使NOS產品自身不斷髮展壯大。

四、星辰大海

資料儲存是企業持續發展不可或缺的土壤,並且企業對資料儲存的需求會越來越多,量也會越來越大。NOS團隊會一直致力於打造一流的儲存服務以及基於儲存的富媒體和上下行加速服務,一站式解決非結構化資料管理難題,助力產品方實現最佳使用者體驗。

圖6 NOS的定位

2016年,網易公有云計劃正式啟動,NOS和所有的其它網易雲產品一樣,踏上了新的征程,將19年的技術積累全面開放,賦能給所有IT企業,為企業使用者插上一雙網易雲的翅膀,共同創造美好的未來。

圖7 截至目前的網易雲產品矩陣

——孫建良

網易杭州研究院雲端計算平臺產品部

網易雲端計算基礎服務為您提供物件儲存容器服務等服務,歡迎點選免費試用。

瞭解 網易雲