■ 網(wǎng)易云對象存儲系統(tǒng)架構師 來東敏
在2014 中國系統(tǒng)架構師大會上,網(wǎng)易云對象存儲系統(tǒng)構架師來東敏先生作了題為《NOS(網(wǎng)易對象云存儲)關鍵技術解析》的主題演講。
NOS的四個層次
網(wǎng)易云對象存儲,即NetEase Object Storage(NOS)是一個海量的Key-Value系統(tǒng)。其中,Key最大支持1K字節(jié);Value最大支持1TB進制文件,如圖片、視頻等靜態(tài)文件;Attribute則最多有10個鍵值對。
目前整個網(wǎng)易云對象存儲系統(tǒng)(NOS)主要分為“接入、緩存、邏輯、存儲”四個層次。
接入層 使用Openresty(類似Tengine),其強大的Nginx Lua模塊實現(xiàn)了桶粒度實時流量統(tǒng)計、流量隔離等功能;另外,使用Nginx Lua寫了部分適合在接入層實現(xiàn)的邏輯;
緩存層 使用專業(yè)的緩存服務器TrafficServer,我們測試發(fā)現(xiàn)其無論在穩(wěn)定性還是功能和性能上,都比Squid靠譜;我們用它實現(xiàn)熱點數(shù)據(jù)以及富媒體處理后的臨時數(shù)據(jù)緩存;
邏輯層 使用Tomcat實現(xiàn)對象存儲主要的業(yè)務邏輯,由于Tomcat眾所周知的在高并發(fā)上的短板,我們正在積極探索,計劃使用Netty來替換Tomcat;
存儲層 是對象存儲系統(tǒng)的基石,NOS構建在網(wǎng)易分布式文件系統(tǒng)(DFS)和網(wǎng)易分布式數(shù)據(jù)庫(DDB)之上,DFS做數(shù)據(jù)存儲,而DDB則存儲元數(shù)據(jù)。
NOS云對象存儲關鍵技術
NOS從無到有經(jīng)歷了兩年時間,當前網(wǎng)易內(nèi)部使用NOS的產(chǎn)品有30個左右,包括:易信、云音樂、云閱讀、公開課、有道云筆記等重量級產(chǎn)品。團隊成員包括4位開發(fā),2位測試,1位運維,0.5位項目管理。與公有云對象存儲系統(tǒng)的項目團隊相比,我們應該算是小團隊作戰(zhàn)。但是NOS在功能接口方面,與市面上的幾家公有對象存儲系統(tǒng)基本差不多,甚至為了兼容POSIX文件系統(tǒng)接口,我們還提供了“根據(jù)prefix和delimiter列出桶內(nèi)對象”這樣的高級接口。
具體來說,網(wǎng)易NOS云對象存儲關鍵技術包括:
1. 元數(shù)據(jù)存儲組件:DDB
2. 數(shù)據(jù)存儲組件:DFS
3. 列出桶內(nèi)對象
4. 基于NOS的用戶態(tài)文件系統(tǒng)
5. 富媒體服務框架
6. 多租戶流量隔離
其中,DDB分布式數(shù)據(jù)庫系統(tǒng)(Distributed DataBase)是網(wǎng)易杭研后臺技術中心研發(fā)的分布式關系數(shù)據(jù)庫平臺。它的主要目標是解決以下問題:“海量結構化數(shù)據(jù)存儲”和“高并發(fā)高吞吐數(shù)據(jù)訪問”。
而DFS分布式文件系統(tǒng)(Distributed FileSystem)則是網(wǎng)易杭研后臺技術中心研發(fā)的分布式非結構化數(shù)據(jù)存儲平臺。主要負責解決“海量的非結構化數(shù)據(jù)存儲”和“高并發(fā)高吞吐數(shù)據(jù)訪問”引發(fā)的難題。
網(wǎng)易在DFS方案中采用了分區(qū)(Bucket)預留 + 系統(tǒng)生成訪問健(Docid)的方式,通過預先規(guī)劃Bucket(2^24),不立即啟用。而且訪問鍵(Docid)也是由系統(tǒng)分配而不是應用程序指定。在增加一個物理節(jié)點時,系統(tǒng)會啟用一批分區(qū)(Bucket)給該物理節(jié)點。當系統(tǒng)生成訪問?。―ocid)時,會使用新分配的分區(qū)(Bucket)。
網(wǎng)易云對象存儲系統(tǒng)(NOS)提供了互聯(lián)網(wǎng)上的存儲服務,致力于提供高度可伸縮、高可靠的廉價數(shù)據(jù)存儲基礎設施,并給開發(fā)者提供最大程度的便利。對象存儲把用戶數(shù)據(jù)存儲為桶里面的對象。對象由文件、描述文件的元數(shù)據(jù)信息組成。桶是對象的容器,一個用戶可以創(chuàng)建多個桶,桶名稱全局唯一。用戶可以通過簡單的REST接口,在任何時間、任何地點、任何互聯(lián)網(wǎng)設備上進行數(shù)據(jù)的上傳和下載,也可以使用WEB頁面對數(shù)據(jù)進行管理。同時,NOS還提供了Java SDK,簡化用戶的編程。用戶可以基于NOS搭建出各種多媒體分享網(wǎng)站、網(wǎng)盤、個人企業(yè)數(shù)據(jù)備份等基于大規(guī)模數(shù)據(jù)的服務。