導(dǎo)讀:我們前面的文章討論過大數(shù)據(jù)存儲組件中的HDFS和KUDU,這篇文章將會介紹一下對象存儲,這也是大數(shù)據(jù)生態(tài)圈一個新的領(lǐng)域。本文將會從對象存儲的概念,內(nèi)部機(jī)制,發(fā)展情況以及相關(guān)產(chǎn)品展開,對對象存儲進(jìn)行一個較為全面的介紹,同時也為后續(xù)文章介紹大數(shù)據(jù)中的對象存儲Apache Ozone組件進(jìn)行一些鋪墊。
什么是對象存儲?
談起存儲,都不陌生,能耳熟能詳?shù)挠杏脖P,U盤,磁帶,這些都是常見的存儲設(shè)備,可以滿足個人或者企業(yè)的小規(guī)模數(shù)據(jù)存儲需求。還有一類存儲設(shè)備,提供了一些網(wǎng)絡(luò)擴(kuò)展和功能增強(qiáng),比如SAN和NAS,可以滿足企業(yè)一些比較大規(guī)模數(shù)據(jù)的存儲需求。
那今天討論的對象存儲,它又是什么呢?是像下面這種把“對象”存到類似銀行的東西里嗎?
顯然不對,這只是一個調(diào)侃,但這種理解某種程度上的也有一定正確性,不過對象存儲存的不是女朋友或者男朋友,而是各式各樣的數(shù)據(jù)(不限制其類型數(shù)量的數(shù)據(jù),我們稱之為Object),存儲介質(zhì)也不是銀行,而是對象存儲設(shè)備(Object-based Storage Device,簡稱OSD)。除此之外,為了完成對象存儲的過程,還需要對象存儲服務(wù)(Object-based Storage Service,簡稱OSS),元數(shù)據(jù)服務(wù)器(Metadata Server,簡稱MDS)以及對象存儲客戶端(Client)配合完成。
與SAN和NAS一樣,對象存儲也是一種網(wǎng)絡(luò)存儲架構(gòu)。
SAN(存儲局域網(wǎng))特點(diǎn)是采用SCSI快I/O命令集,通過磁盤或FC(Fiber Channel)級的數(shù)據(jù)訪問提供高性能的隨機(jī)I/O個數(shù)據(jù)吞吐率,它具有高寬帶、低時延的優(yōu)勢,但這需要專業(yè)的硬件支持,所以價格非常高,并且不易擴(kuò)展,目前只在部分大型企業(yè)中進(jìn)行使用。
NAS(網(wǎng)絡(luò)附加存儲)采用NFS或CIFS命令集訪問數(shù)據(jù),以文件為傳輸協(xié)議,通過TCP/IP實現(xiàn)網(wǎng)絡(luò)化存儲,可擴(kuò)展行好、價格便宜、用戶易管理,特別受到Windows系統(tǒng)用戶的歡迎。像常用的FTP服務(wù)器目錄,企業(yè)共享文件夾,網(wǎng)站內(nèi)容存儲這類場景,大都可以使用NAS服務(wù)進(jìn)行解決。但NAS需要有文件系統(tǒng)層的支持。
對于對象存儲而言,它既有SAN的優(yōu)點(diǎn),即高速直接訪問存儲設(shè)備上的數(shù)據(jù);又有NAS的優(yōu)點(diǎn),數(shù)據(jù)可以分布式存儲,共享,從而實現(xiàn)了高性能,高可靠性的跨平臺數(shù)據(jù)存儲共享體系結(jié)構(gòu),因此特別容易進(jìn)行擴(kuò)展。
對象存儲的核心是將控制流(元數(shù)據(jù)記錄)與數(shù)據(jù)流分離(數(shù)據(jù)讀寫),控制端只負(fù)責(zé)記錄元數(shù)據(jù),而由每個對象存儲設(shè)備自行管理其上的數(shù)據(jù)分布,并完成讀寫過程。這樣有幾個好處:
1. 降低了控制端的工作負(fù)載,控制端只需與OSD交互(實際上由OSS服務(wù)層代為完成),因此當(dāng)存儲容量特別大時,對象存儲系統(tǒng)也可以輕松應(yīng)對,同時也極方便擴(kuò)展。
2. 不需要通過文件系統(tǒng)支持,OSD直接在存儲介質(zhì)上進(jìn)行I/O管理,不受LBA層尋址效率的影響,大大提升的了數(shù)據(jù)讀寫效率。
3. 不限制數(shù)據(jù)類型。由于不需要文件系統(tǒng)的支持,因此各類型的數(shù)據(jù)都可以作為對象(Object),存儲進(jìn)去。
4. 高容錯性,OSD自動完成對象的管理與冗余復(fù)制,控制端并不需要知道具體的數(shù)據(jù)位置和復(fù)制策略,當(dāng)某一位置發(fā)生故障時,OSD自動返回新的位置數(shù)據(jù)給到控制端,控制端幾乎無感。
5. 訪問方式統(tǒng)一,操作簡單。由于去掉了對文件系統(tǒng)的依賴,同時提升相關(guān)數(shù)據(jù)存取效率,因此數(shù)據(jù)存取接口基本都統(tǒng)一為Rest方式調(diào)用,降低了使用的復(fù)雜度。
對象存儲的工作機(jī)制
對象存儲存儲的架構(gòu)如下,一個對象存儲系統(tǒng),由對象存儲客戶端(Client),對象存儲服務(wù)(OSS),元數(shù)據(jù)服務(wù)器(MDS),對象存儲設(shè)備OSD組成,此外還有大大小小存在于OSD中的對象Object。
對象(Object):所有被存儲的目標(biāo)都可以被稱作對象,它是數(shù)據(jù)存儲的基本單位,一個對象大小可以從幾十字節(jié)到幾PB(看OSD的支持能力),一個對象包括數(shù)據(jù)和數(shù)據(jù)屬性兩部分,數(shù)據(jù)屬性可以是數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)描述,冗余份數(shù)等等,對象自己維護(hù)自己的數(shù)據(jù)屬性。此外,一個對象有一個特定的對象標(biāo)識,對象通過對象標(biāo)識和數(shù)據(jù)屬性與OSD進(jìn)行交互。
對象存儲設(shè)備(OSD):一個對象存儲設(shè)備不單單是一塊簡單的硬盤,一般來說其是一個智能設(shè)備,自動管理其上對象的數(shù)據(jù)分布,數(shù)據(jù)讀寫,并進(jìn)行相關(guān)的性能優(yōu)化。對象存儲設(shè)備可以有自己的CPU,內(nèi)存,存儲介質(zhì)和網(wǎng)絡(luò);也可以是在標(biāo)準(zhǔn)磁盤系統(tǒng)上通過軟件的虛擬化特性演化出一套智能系統(tǒng)。
為了進(jìn)一步提升效率,OSD中只分為兩層,其中第一層為Bucket, 第二層為Key。其中Bucket類似數(shù)據(jù)集,Key則是具體的數(shù)據(jù)。OSD只需獲取數(shù)據(jù)的Bucket ID,Key,以及偏移量,即可定位到具體的數(shù)據(jù)。
對象存儲服務(wù)(OSS):OSS是Client與OSD交互的中間層服務(wù),這個請和阿里云的對象存儲區(qū)別開來,雖然阿里云對象存儲也叫OSS。對象存儲服務(wù)負(fù)責(zé)收集OSD反饋的信息,并通過文件鎖,AccessKey等方式對Client進(jìn)行認(rèn)證,并控制其讀寫。
元數(shù)據(jù)服務(wù)器(MDS):元數(shù)據(jù)服務(wù)器為客戶端提供元數(shù)據(jù),主要是文件的邏輯視圖,包括文件與目錄的組織關(guān)系、每個文件所對應(yīng)的OSD等。同時元數(shù)據(jù)服務(wù)器支持Client的Cache,當(dāng)Cache的文件發(fā)生改變時,將通知Client端刷新Cache,從而避免Cache不一致引發(fā)相關(guān)問題。
對象存儲客戶端(Client):對象存儲客戶端包含計算節(jié)點(diǎn)上某些特殊工具和接口,依次來訪問對象存儲系統(tǒng),比如命令行等。
數(shù)據(jù)訪問流程如下:
1. Client首先向MDS查詢數(shù)據(jù)邏輯視圖;
2. MDS通過OSS服務(wù)查詢OSD中數(shù)據(jù)的狀態(tài)信息;
3. MDS獲取到OSD中數(shù)據(jù)的相關(guān)信息(OSD id, Bucket ID, Key與偏移量等);
4. MDS更新Client保存的Cache信息;
5. Client向OSS提交客戶端認(rèn)證,比如AccessKey;
6. 認(rèn)證通過,OSS返回OSD與Object相關(guān)信息;
7. Client通過Rest接口訪問對應(yīng)的數(shù)據(jù)。
對象存儲的發(fā)展簡史
雖然對象存儲這一名詞近些年才大量地出現(xiàn)在人們視線中,但其發(fā)展過程可謂源遠(yuǎn)流長,甚至比大數(shù)據(jù)技術(shù)的歷史還要悠久,引用硅谷技術(shù)公司顧問Philippe Nicolas公開的一張對象存儲統(tǒng)計圖看一下:
1998年開始,第一個做對象存儲的公司FilePool標(biāo)志著對象存儲技術(shù)領(lǐng)域的誕生,到現(xiàn)在已經(jīng)有20余年的歷史。這足足比Hadoop的歷史還要多5年(Google GFS 論文2003年發(fā)表)?,F(xiàn)在做對象存儲的公司已經(jīng)數(shù)量非常眾多。
目前的對象存儲技術(shù)分為兩大陣營,即開源產(chǎn)品與商業(yè)化產(chǎn)品。其中開源產(chǎn)品以Ceph,OpenIO, OpenStack Swift一類為主,特別是Hortonworks公司于2014年推出了Apache Ozone產(chǎn)品,提供S3接口,從而讓在大數(shù)據(jù)中使用對象存儲變成了可能。商業(yè)化產(chǎn)品則以各家存儲企業(yè)以及云廠商推出的對象存儲方案為主,例如阿里云OSS, 華為云OBS, 微軟 Azure等。
雖然對象存儲發(fā)展了這么久,各家的產(chǎn)品也五花八門,但是對象存儲的設(shè)計模式和架構(gòu)各家都高度的統(tǒng)一,差異只是在Client層做了一些功能豐富,例如增加了一些接口。在后續(xù)的文章中,我們會進(jìn)一步介紹一下Apache Ozone。