官术网_书友最值得收藏!

2.4 塊存儲、文件存儲與對象存儲

前面講述了SDS為何能夠成為下一代的主流存儲機(jī)制,現(xiàn)在看看SDS可以實(shí)現(xiàn)出哪幾類存儲系統(tǒng)。

傳統(tǒng)的SAN(存儲區(qū)域網(wǎng)絡(luò))與NAS解決方案在實(shí)現(xiàn)存儲服務(wù)時,一般通過iSCSI(Internet Small Computer Systems Interface,Internet小型計算機(jī)系統(tǒng)接口)、FC(Fibre Channel,光纖信道)、FCoE(Fibre Channel Over Ethernet,以太網(wǎng)光纖信道)、NFS(Network File System,網(wǎng)絡(luò)文件系統(tǒng))與SMB(Server Message Block,服務(wù)器消息塊)/CIFS(Common Internet File System,網(wǎng)絡(luò)文件共享系統(tǒng))等協(xié)議提供。但是在轉(zhuǎn)向云端后,需要用其他辦法提供存儲能力,對象存儲正是這樣一種辦法。接下來看看對象存儲與塊存儲、文件存儲之間的異同。GlusterFS是一種文件存儲式的解決方案,不過可以按照類似的方式進(jìn)行配置,以發(fā)揮塊存儲及對象存儲能力。

圖2-3用3種圖形來比擬這3種存儲方式。

圖2-3

當(dāng)客戶端在存儲系統(tǒng)中保存數(shù)據(jù)時,塊存儲、文件存儲與對象存儲所用的保存方式區(qū)別很大,導(dǎo)致三者的用途完全不同。

2.4.1 塊存儲

SAN(存儲區(qū)域網(wǎng)絡(luò))是一種塊存儲,主要利用FC或iSCSI等協(xié)議實(shí)現(xiàn),這兩種協(xié)議分別在光纖與TCP/IP上進(jìn)行SCSI(小型計算機(jī)系統(tǒng)接口)映射。

圖2-4是一個通過FC協(xié)議構(gòu)建的SAN。

圖2-4

圖2-5是一個通過iSCSI協(xié)議構(gòu)建的SAN。

數(shù)據(jù)存放在邏輯塊地址上面。應(yīng)用程序獲取數(shù)據(jù)的時候,通常說“我要從XXYYZZZZ這個地址讀取X個塊”,這個過程極快(不到1毫秒)。因此這種類型的存儲延遲相當(dāng)?shù)停且环N面向事務(wù)(transactional-oriented)的存儲形式,很適合做隨機(jī)訪問。如果要在多個系統(tǒng)之間共用這種類型的存儲,那么它的缺點(diǎn)就會暴露出來;因?yàn)閴K存儲通常是以原始形式出現(xiàn)的,必須在它上面搭建一層文件系統(tǒng),才能讓多個客戶端同時對該存儲進(jìn)行寫入,否則這些寫入操作就有可能卡住。換句話說,這是一種集群式的文件系統(tǒng)。

塊存儲在可用性與災(zāi)難恢復(fù)上也有缺點(diǎn)。由于它是以原始形式呈現(xiàn)數(shù)據(jù)的,存儲控制器與存儲管理器并不清楚其中的數(shù)據(jù)是怎樣使用的。當(dāng)把這些數(shù)據(jù)復(fù)制到恢復(fù)點(diǎn)的時候,只能從塊的角度處理數(shù)據(jù),而無法根據(jù)數(shù)據(jù)的實(shí)際使用情況做出變通。有些文件系統(tǒng)無法對數(shù)據(jù)塊合理地進(jìn)行回收或清零,會把根本沒有用到的數(shù)據(jù)塊也給復(fù)制過去,從而導(dǎo)致存儲空間得不到高效利用。

圖2-5

塊存儲所具備的優(yōu)勢及較低的延遲時間,很適合用來存放結(jié)構(gòu)化的數(shù)據(jù)庫,并對隨機(jī)的讀/寫操作進(jìn)行處理。此外,由于VM鏡像需要極其頻繁地發(fā)出I/O請求,因此也適合用塊存儲來保存。總之,這種集群式的文件系統(tǒng)擅長給來自多臺主機(jī)的多項(xiàng)讀取及寫入操作提供支持。

塊存儲除了上面這些優(yōu)點(diǎn)與缺點(diǎn)外,還需要注意在使用過程中仔細(xì)配置,因?yàn)樵趬K設(shè)備上面搭建文件系統(tǒng)及分區(qū)時,需要讓這些文件系統(tǒng)與分區(qū)能夠跟塊存儲機(jī)制相協(xié)調(diào)。此外還須保證文件系統(tǒng)本身是一致且安全的,其權(quán)限也設(shè)置得正確無誤;否則,多個系統(tǒng)在同時訪問該文件系統(tǒng)時,就有可能把其中的數(shù)據(jù)破壞掉。VM還會將另一些文件系統(tǒng)融入它們的虛擬磁盤,這就引入了一項(xiàng)復(fù)雜的因素,因?yàn)閿?shù)據(jù)既有可能寫入VM本身的文件系統(tǒng),也有可能寫入監(jiān)視VM的hypervisor(虛擬機(jī)監(jiān)視器)所在的文件系統(tǒng)。這兩種文件系統(tǒng)中的文件都會頻繁變更,因此在以隨需分配thin provision意思是隨需分配,而不是提前分配。——譯注方式實(shí)現(xiàn)復(fù)制的情境中,必須將它們正確地清零,才能讓相關(guān)的數(shù)據(jù)塊得以回收,因?yàn)榇蠖鄶?shù)存儲陣列不會注意寫入其中的是何種數(shù)據(jù)。

2.4.2 文件存儲

與塊存儲相比,文件存儲或NAS所用的方式更為直接。你不需要擔(dān)心如何分區(qū),也不需要考慮怎樣選擇適合多主機(jī)環(huán)境的文件系統(tǒng),并對其進(jìn)行格式化。

NAS通常采用NFS或SMB/CIFS運(yùn)作。這些協(xié)議主要用來把數(shù)據(jù)以不帶結(jié)構(gòu)的形式保存到共享文件夾里,它們并不擅長擴(kuò)展,也不能很好地滿足多媒體方面的嚴(yán)格要求。例如,在云端搭建社交媒體服務(wù),讓用戶能夠全天候地創(chuàng)建或上傳圖像及視頻,NAS顯得比較吃力,而這正是對象存儲派上用場的地方。本章稍后再來講解對象存儲系統(tǒng)。

文件存儲是運(yùn)作在文件級別的。當(dāng)向NAS發(fā)出請求的時候,你所請求的是一份文件或其中的某一部分,而不是像訪問塊存儲那樣請求一系列邏輯地址。NAS會把這個過程從宿主機(jī)器中抽象出來(宿主機(jī)器指的是掛載文件存儲的電腦),并把具體的文件請求交給存儲陣列或SDS處理,讓它們在后端通過訪問磁盤來滿足這一請求。文件存儲也會提供一些原生的特性,如文件鎖定、用戶與組的集成(本文在這里談?wù)撻_源文件系統(tǒng)時,主要講NFS)、安全以及加密等等。

NAS可以通過抽象機(jī)制簡化客戶端的訪問工作,與此同時也有一些缺點(diǎn),因?yàn)樗仨氈囟鹊亍⑸踔潦峭耆匾蕾嚲W(wǎng)絡(luò)而運(yùn)作。此外,由于它多包含了一層文件系統(tǒng),延遲遠(yuǎn)高于塊存儲。有許多因素都會導(dǎo)致NAS的延遲或RTT(Round-Trip Time,往返時間/來回通信時間)變長,因此必須考慮到NAS與客戶端之間經(jīng)過了多少跳(hop)以及TCP窗口縮放等問題,或者確保訪問文件共享系統(tǒng)的設(shè)備不啟用巨型幀。這些因素影響的不僅是延遲時間,還有整套NAS解決方案的吞吐量,這正是文件存儲發(fā)揮其優(yōu)勢的地方。

圖2-6演示了文件存儲機(jī)制在共享文件時的靈活一面。

圖2-6

2.4.3 對象存儲

對象存儲與文件存儲(以NAS為代表)、塊存儲(以SAN為代表)完全不同。雖然通過網(wǎng)絡(luò)來訪問數(shù)據(jù),但是獲取數(shù)據(jù)的方式卻很獨(dú)特:不是通過文件系統(tǒng)訪問,而是通過HTTP方法及RESTful API來訪問。

對象保存在平面的名稱空間中,名稱空間能夠保存上百萬乃至上億個對象,從而很有助于實(shí)現(xiàn)高可用性。因?yàn)檫@種做法不像XFS與EXT4等常規(guī)的文件系統(tǒng)那樣,受制于節(jié)點(diǎn)的數(shù)量。名稱空間也會有分區(qū)(一般稱為bucket),然而這些分區(qū)并不能像常規(guī)的文件夾那樣嵌套,因?yàn)槊Q空間是平面化的,而不是層次化的。

圖2-7

傳統(tǒng)存儲與對象存儲之間的區(qū)別可以比作自助停車(self-parking)與請人代為停車(valet-parking)。因?yàn)樵谑褂脗鹘y(tǒng)的文件系統(tǒng)時,必須自己來決定文件需要存放在哪個文件夾或目錄中,還得把這個位置記住,正如停車的時候需要把停車位記住一樣。在使用對象存儲時,只需要把數(shù)據(jù)上傳或放到某個bucket里面,它會給你一個獨(dú)特的標(biāo)識符(ID),以后可以憑標(biāo)識符獲取這份數(shù)據(jù)。正如請人代為停車時不用記住停車位一樣,只需要把對方停完車后給你的憑證交還給他,他就會把車開回來。

在請別人停車的時候,你通常要把與車有關(guān)的一些信息告訴那個人,他可以根據(jù)這些信息更準(zhǔn)確地判斷出是哪一輛車。顏色、車牌號、車型都是很有幫助的信息。對象存儲也是如此,每個對象都有自己的元數(shù)據(jù)(metadata)以及一個獨(dú)特的ID,該系統(tǒng)所保存的就是對象的這些信息及其中的文件。

圖2-8演示了對象存儲中的單個對象。

圖2-8

前面提到對象存儲要通過RESTful API訪問,從理論上說凡是支持HTTP協(xié)議的設(shè)備,都可以通過PUT或GET等HTTP方法訪問對象存儲中的bucket。這似乎不太安全,然而由軟件定義的對象存儲基本上都會采用某種認(rèn)證方法,要求在獲取或上傳文件時提供認(rèn)證標(biāo)記。在Linux系統(tǒng)下,可以用curl工具執(zhí)行如下一條簡單的請求:

我們可以像圖2-9演示的這樣,通過HTTP協(xié)議把各種設(shè)備連接到位于云端的對象(存儲bucket)上面。

圖2-9

主站蜘蛛池模板: 凉山| 合山市| 西乌珠穆沁旗| 安远县| 德保县| 伽师县| 霍林郭勒市| 铜梁县| 台中县| 富宁县| 阿城市| 高邑县| 平塘县| 元阳县| 敦化市| 上犹县| 炎陵县| 洪泽县| 苏州市| 海原县| 乃东县| 乌审旗| 珠海市| 铜山县| 舒城县| 永昌县| 那曲县| 固阳县| 郴州市| 西充县| 南昌县| 弥渡县| 阿克陶县| 神池县| 阳泉市| 宝清县| 莒南县| 宁津县| 绩溪县| 富平县| 米林县|