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

本文由  網易雲 發佈。前端

 

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

 

1、從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架構實踐(複製到瀏覽器查看:)。架構

當時,這些基礎組件,如DFS分佈式存儲系統,使用模式爲一個產品部署一套,譬如郵箱網盤、大附件、相冊、網易博客等都會單獨部署一套。因爲網易新產品層出不窮,這種模式就致使了大量的運維工做,並造成很是多的資源孤島,多個產品不能融合共用資源,形成大量的資源浪費。

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

圖2 2012年的雲存儲服務

 

2、成長之痛

如同嬰兒誕生,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、自動切換腳本等機制自動屏蔽故障節點,保障線上服務持續可用。
  • 故障隔離:對圖片、上傳下載服務器進行物理機器的隔離,物理隔離代價較大,在實踐上還要在邏輯上對不一樣業務進行必定隔離,好比進程隔離、業務隔離等等,避免一個籃子裏全部的雞蛋都出問題。

3、快速發展

技術和構架上的改進基本可以保障系統宏觀上跟得上業務的發展。而如何在產品快速發展過程當中保持持續穩定,是咱們這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產品自身不斷髮展壯大。

4、星辰大海

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

 

圖6 NOS的定位

 

 

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

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

 

——孫建良

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

 

網易雲計算基礎服務爲您提供對象存儲容器服務等服務,歡迎點擊免費試用。

 

 

瞭解 網易雲 :
網易雲官網:https://www.163yun.com/
新用戶大禮包:https://www.163yun.com/gift
網易雲社區:https://sq.163yun.com/

相關文章
相關標籤/搜索