探究云存儲(chǔ)模型及其與傳統(tǒng)存儲(chǔ)模型的關(guān)系
誰曾想到,數(shù)位存儲(chǔ)可達(dá)到如此難以置信的復(fù)雜程度呢?存儲(chǔ)一直以來都在遵循一套數(shù)目不菲的協(xié)議,從光纖通道(Fibre Channel)到iSCSI再到SMB的各種變體等等,但閃存的出現(xiàn)和虛擬化的持續(xù)增長又把這一需連篇累牘解讀的主題變成了一個(gè)縮寫詞、協(xié)議和抽象叢生的密林。
同時(shí),數(shù)據(jù)中心的虛擬化也促使了存儲(chǔ)虛擬化浪潮的到來,存儲(chǔ)逐漸脫離物理協(xié)議的束縛,朝實(shí)例存儲(chǔ)和卷存儲(chǔ)一類邏輯、抽象存儲(chǔ)模型進(jìn)化。通過提供抽象化,數(shù)據(jù)中心逐步解除了虛擬機(jī)和存儲(chǔ)協(xié)議之間的耦合。
另外,云數(shù)據(jù)中心的崛起還催生出一種被稱作對象存儲(chǔ)的新存儲(chǔ)類型,為了在全局范圍內(nèi)提供單一名稱空間,這種存儲(chǔ)類型犧牲了傳統(tǒng)存儲(chǔ)協(xié)議的強(qiáng)一致性。
在本文中,我將通過一一列出實(shí)例、卷和對象存儲(chǔ)在數(shù)據(jù)中心演變過程中所處的位置來澄清這幾種存儲(chǔ)類型,并說明這些新的抽象是如何被疊加到現(xiàn)有的存儲(chǔ)協(xié)議之上,或是如何與現(xiàn)有的存儲(chǔ)協(xié)議并存的。
云存儲(chǔ)的歷史在許多方面就是虛擬化的歷史,我將先從物理環(huán)境談起,再說到虛擬化,到這個(gè)階段后,虛擬的和物理的模型開始分化,***再歸結(jié)到云,這一階段的物理模型幾乎已被虛擬模型完全抽象化。
物理存儲(chǔ)
每種存儲(chǔ)的根基都是某一組物理存儲(chǔ)協(xié)議,所以,我先來快速回顧一下物理存儲(chǔ)。如今在用的三大物理存儲(chǔ)模型分別是:直接附加存儲(chǔ)(Direct Attached Storage,DAS)、存儲(chǔ)區(qū)域網(wǎng)絡(luò)(Storage Area Network)和網(wǎng)絡(luò)附加存儲(chǔ)(Network Attached Storage,NAS)。

DAS(直接附加存儲(chǔ))
直接附加存儲(chǔ)是最簡單的存儲(chǔ)模型,我們都很熟悉DAS,幾乎所有的筆記本電腦、手機(jī)和臺(tái)式計(jì)算機(jī)都使用這一模型。DAS的基本單元是機(jī)器自身,服務(wù)器的存儲(chǔ)沒有與服務(wù)器自身分離。就手機(jī)這種情況來說,在物理上就無法把計(jì)算與存儲(chǔ)拆開來,不過即使是理論上可以卸掉硬盤的服務(wù)器,一旦硬盤被從服務(wù)器上卸下之后,通常也會(huì)在擦除掉硬盤的內(nèi)容之后才再次使用該硬盤。SCSI和SATA都是DAS協(xié)議的例子。
SAN(存儲(chǔ)區(qū)域網(wǎng)絡(luò))
終于,存儲(chǔ)廠商意識(shí)到了分離存儲(chǔ)和機(jī)器的實(shí)用性,不再把硬盤裝配到每一臺(tái)機(jī)器上,而是把所有的硬盤裝配在一個(gè)服務(wù)器集群上,然后通過網(wǎng)絡(luò)訪問硬盤。這簡化了諸如備份和故障修復(fù)一類的存儲(chǔ)管理。這種存儲(chǔ)和計(jì)算分離的做法通常被稱作共享存儲(chǔ),因?yàn)槎嗯_(tái)計(jì)算機(jī)將使用同一個(gè)存儲(chǔ)池。
客戶端和服務(wù)器之間使用同一種(或非常相似的)塊協(xié)議進(jìn)行通信,這些塊協(xié)議之前被用來與本地附加硬盤進(jìn)行通信,這是最簡單的通信方式。暴露這種通信方式的存儲(chǔ)被稱作存儲(chǔ)區(qū)域網(wǎng)絡(luò),光纖通道(Fibre Channel)和iSCSI都是SAN協(xié)議的例子。
在一個(gè)存儲(chǔ)區(qū)域網(wǎng)絡(luò)中,管理員會(huì)把一組磁盤(或一組磁盤中的部分)組成一個(gè)LUN(logical unit,邏輯單元),之后,外部的計(jì)算機(jī)就可像操作單個(gè)磁盤一樣操作這一LUN。LUN被用作管理SAN存儲(chǔ)的基本單元。
NAS(網(wǎng)絡(luò)附加存儲(chǔ))
雖然SAN支持在兩臺(tái)計(jì)算機(jī)之間移動(dòng)LUN,但它們所使用的塊協(xié)議并非被設(shè)計(jì)來在計(jì)算機(jī)之間并發(fā)訪問同一LUN中的數(shù)據(jù)。為了支持這種共享,我們需要構(gòu)建一種新的用于并發(fā)訪問的存儲(chǔ)。在這種新的存儲(chǔ)中,我們使用文件系統(tǒng)協(xié)議與存儲(chǔ)進(jìn)行通信,這一協(xié)議酷似運(yùn)行在計(jì)算機(jī)本地的文件系統(tǒng)。這種存儲(chǔ)被稱作網(wǎng)絡(luò)附加存儲(chǔ),NFS和SMB都是NAS協(xié)議的例子。
這一文件抽象允許多臺(tái)服務(wù)器同時(shí)訪問同一數(shù)據(jù),多臺(tái)服務(wù)器可以同時(shí)讀取同一文件,多臺(tái)服務(wù)器也可同時(shí)把多個(gè)新文件寫入文件系統(tǒng)中。因此,對于共享用戶或是共享應(yīng)用數(shù)據(jù)來說,NAS是一種非常便利的模型。
NAS存儲(chǔ)允許管理員把部分存儲(chǔ)分配給單獨(dú)的文件系統(tǒng),每個(gè)文件系統(tǒng)都是一個(gè)單一名稱空間,文件系統(tǒng)被用作管理NAS的基本單元。
#p#
虛擬存儲(chǔ)
就像改變了計(jì)算的前景一樣,虛擬化也改變了用于存儲(chǔ)的現(xiàn)代數(shù)據(jù)中心的前景。正如物理機(jī)器被抽象成虛擬機(jī),物理存儲(chǔ)也被抽象成了虛擬磁盤。

在虛擬化中,虛擬機(jī)管理程序(hypervisor)為每臺(tái)虛擬機(jī)提供一個(gè)模擬的硬件環(huán)境,這包括了計(jì)算機(jī)、內(nèi)存和存儲(chǔ)空間。VMware是***出現(xiàn)的現(xiàn)代虛擬機(jī)管理程序,它選擇的模擬本地物理磁盤的做法是為每臺(tái)VM(Virtual Machine,虛擬機(jī))提供存儲(chǔ)空間。VMware選擇了本地磁盤(DAS)模型,以此作為把存儲(chǔ)空間暴露給虛擬機(jī)的方式。
如同DAS的基本存儲(chǔ)單元是物理機(jī)器,虛擬磁盤存儲(chǔ)的基本單元是VM。虛擬磁盤并未被當(dāng)作獨(dú)立的對象給暴露出來,而是被當(dāng)成某臺(tái)特定虛擬機(jī)的組成部分,就像是物理計(jì)算機(jī)的組成概念中的本地磁盤。與DAS一樣,虛擬磁盤與VM本身共生共滅,若VM被刪除,則虛擬磁盤也被刪除。
大多數(shù)傳統(tǒng)的虛擬平臺(tái)都采用了虛擬磁盤存儲(chǔ)模型,例如,VMware vSphere、Microsoft Hyper-V、Red Hat Enterprise Virtualization和Xen環(huán)境中的存儲(chǔ)都采用了相類似的管理和附加方式。
實(shí)現(xiàn)虛擬磁盤
因?yàn)閂Mware想要繼續(xù)為虛擬機(jī)提供共享存儲(chǔ)帶來的好處,所以它不能依賴DAS協(xié)議來實(shí)現(xiàn)虛擬磁盤。顯然,下一種選擇應(yīng)該是使用SAN,因?yàn)镾AN的LUN與本地磁盤非常相像。
不過,物理LUN的局限性對于其是否適用于虛擬磁盤是一個(gè)挑戰(zhàn),虛擬環(huán)境把一定數(shù)目的邏輯計(jì)算機(jī)整合到單臺(tái)物理服務(wù)器上,這意味著指定主機(jī)上的虛擬磁盤的數(shù)目將要比物理環(huán)境中的一臺(tái)主機(jī)的物理LUN的數(shù)目大得多,可被附加到某臺(tái)指定物理服務(wù)器上的LUN的***數(shù)目過小,不足以支持虛擬磁盤的必需數(shù)目。
或許更重要的是,與虛擬CPU一樣,虛擬磁盤必須是可被以編程方式創(chuàng)建、銷毀和移動(dòng)的邏輯對象,而這些卻非SAN存儲(chǔ)旨在要執(zhí)行的操作。例如,VMware需要?jiǎng)討B(tài)地在不同物理主機(jī)之間移動(dòng)VM,這要求在遷移期間訪問共享存儲(chǔ)。
出于這些考慮,VMware選擇把虛擬磁盤實(shí)現(xiàn)成文件系統(tǒng)(NFS)或SAN上的分布式文件系統(tǒng)(VMFS)中的文件,而不是選擇原始的LUN為實(shí)現(xiàn)方式。
從存儲(chǔ)協(xié)議到存儲(chǔ)模型
VMware選擇在NAS或SAN之上實(shí)現(xiàn)虛擬磁盤,這是一種DAS風(fēng)格的塊存儲(chǔ)模型,這例證了現(xiàn)代數(shù)據(jù)中心存儲(chǔ)之所以吸引人的特征之一。因?yàn)樘摂M機(jī)的IO被轉(zhuǎn)交給虛擬機(jī)管理程序的軟件進(jìn)行處理,而非被轉(zhuǎn)交給設(shè)備總線上的硬件,所以,被VM用來與虛擬機(jī)管理程序進(jìn)行通信的協(xié)議無需與被虛擬機(jī)管理程序用來與存儲(chǔ)自身進(jìn)行通信的協(xié)議保持一致。

這導(dǎo)致了被向上暴露給VM和管理員的存儲(chǔ)模型與被虛擬機(jī)管理程序?qū)嶋H用來存儲(chǔ)數(shù)據(jù)的存儲(chǔ)協(xié)議之間的一個(gè)分離,以虛擬磁盤為例,VMware按照DAS存儲(chǔ)模型來設(shè)計(jì)它們,然后使用一個(gè)NAS存儲(chǔ)協(xié)議來實(shí)現(xiàn)它們。
這是一個(gè)非常強(qiáng)大的間接層,它賦予了我們混合搭配存儲(chǔ)模型和存儲(chǔ)協(xié)議的靈活性,我們甚至可以動(dòng)態(tài)地更換存儲(chǔ)協(xié)議而不會(huì)影響到虛擬機(jī)。例如,虛擬磁盤使用NFS中的文件或存儲(chǔ)在光纖通道LUN上的VMFS中的文件來實(shí)現(xiàn),或甚至可直接實(shí)現(xiàn)成iSCSI LUN,這一實(shí)現(xiàn)做法的選擇對應(yīng)用來說是完全透明的,因?yàn)樽罱K所有的這些協(xié)議在VM和管理員看來都是相同的,它們看起來就像是被附加到VM上的本地物理磁盤。

因此,在大多數(shù)公共云基礎(chǔ)設(shè)施上進(jìn)行應(yīng)用開發(fā)的開發(fā)者并不知道正在使用的是什么存儲(chǔ)協(xié)議,實(shí)際上,協(xié)議甚至可能是在動(dòng)態(tài)變化的。我們并不知道亞馬遜把什么存儲(chǔ)協(xié)議用于它的Elastic Block Storage(彈性塊存儲(chǔ)),對我們來說,也沒有必要知道。
因?yàn)榇鎯?chǔ)模型和存儲(chǔ)協(xié)議分離這一緣故,存儲(chǔ)協(xié)議成為了基礎(chǔ)設(shè)施要面對的一個(gè)問題,這主要體現(xiàn)在成本和性能方面,而非應(yīng)用所面臨的功能選定方面的決策。
#p#
云存儲(chǔ)
隨著虛擬環(huán)境演變成云環(huán)境,數(shù)據(jù)中心的前景再次發(fā)生了轉(zhuǎn)變。云環(huán)境欣然接受了虛擬化的始作俑者虛擬磁盤模型,而且他們還提供了額外的一些模型來支持一個(gè)完整的虛擬存儲(chǔ)棧。云環(huán)境嘗試虛擬化整個(gè)存儲(chǔ)棧,這樣它們就可以提供自助服務(wù),以及在基礎(chǔ)設(shè)施和應(yīng)用之間提供一個(gè)完全的隔離。
云環(huán)境以多種形式出現(xiàn),借助OpenStack、CloudStack或是VMware vRealize套件這樣的環(huán)境,它們可被企業(yè)實(shí)現(xiàn)成私有云,它們也可被服務(wù)提供商實(shí)現(xiàn)成諸如Amazon Web Services、Microsoft Azure和Rackspace一類的公共云。
有意思的是,被用在云環(huán)境中的存儲(chǔ)模型正是被用在物理環(huán)境中的那些的一個(gè)寫照,不過,與虛擬磁盤一樣,它們是一些從多種可被用來實(shí)現(xiàn)它們的存儲(chǔ)協(xié)議中抽象出來的存儲(chǔ)模型。

三種云存儲(chǔ)模型
實(shí)例存儲(chǔ):云端的虛擬磁盤
虛擬磁盤存儲(chǔ)模型是傳統(tǒng)虛擬環(huán)境中主要(或唯一)的存儲(chǔ)模型,然而,在云環(huán)境中,該模型只是三種之一,因此,該模型在云環(huán)境中被賦予了一個(gè)特定的名稱:實(shí)例存儲(chǔ)(instance storage),意即存儲(chǔ)的使用方式類似傳統(tǒng)虛擬磁盤。
需要注意的很重要的一點(diǎn)是,實(shí)例存儲(chǔ)是一種存儲(chǔ)模型,而非一種存儲(chǔ)協(xié)議,可使用多種方式來實(shí)現(xiàn)。例如,有時(shí)實(shí)例存儲(chǔ)會(huì)使用計(jì)算節(jié)點(diǎn)自身的DAS來實(shí)現(xiàn),以這種方式來實(shí)現(xiàn)的存儲(chǔ)通常被稱作臨時(shí)存儲(chǔ)(ephemeral storage),因?yàn)檫@種存儲(chǔ)通常不具有高可靠性。
此外,借助NAS或接下來要介紹的第二種存儲(chǔ)模型卷存儲(chǔ),實(shí)例存儲(chǔ)也可被實(shí)現(xiàn)成可靠的存儲(chǔ)。例如,OpenStack允許用戶把實(shí)例存儲(chǔ)實(shí)現(xiàn)成主機(jī)上的臨時(shí)存儲(chǔ)、NFS掛載點(diǎn)上的文件,或是實(shí)現(xiàn)成使用了卷啟動(dòng)(boot-from-volume)機(jī)制的Cinder卷。

卷存儲(chǔ):不涉及物理層面的SAN
然而,實(shí)例存儲(chǔ)有它的局限性,開發(fā)云端原生應(yīng)用(cloud-native application)的開發(fā)者通常會(huì)顯式地把配置數(shù)據(jù),例如OS和應(yīng)用數(shù)據(jù),和用戶數(shù)據(jù),例如數(shù)據(jù)庫表和數(shù)據(jù)文件,加以區(qū)分開來,通過分離這兩者,開發(fā)人員可以在把配置設(shè)成瞬態(tài)的和可重構(gòu)建的同時(shí),仍然保持用戶數(shù)據(jù)的高可靠性。
相應(yīng)的,這種區(qū)分又導(dǎo)致了另一種存儲(chǔ)類型:卷存儲(chǔ)(volume storage)的出現(xiàn),這種存儲(chǔ)模型是實(shí)例存儲(chǔ)和SAN的混體。卷存儲(chǔ)的基本單元是卷而非VM,卷可被從某臺(tái)VM上卸下,然后再被附加到另一臺(tái)VM上。然而,與虛擬磁盤一樣,在規(guī)模和抽象方面,卷更酷似文件而非LUN。與實(shí)例存儲(chǔ)相比,卷存儲(chǔ)通常被認(rèn)定是高可靠的,因此常被用于用戶數(shù)據(jù)存儲(chǔ)。
OpenStack的Cinder就是卷存儲(chǔ)的一個(gè)例子,Docker的獨(dú)立的卷抽象也是。同樣,這里要提醒一下,卷存儲(chǔ)是一種存儲(chǔ)模型而非存儲(chǔ)協(xié)議。卷存儲(chǔ)可在諸如NFS一類的文件協(xié)議或是諸如iSCSI一類的塊協(xié)議之上實(shí)現(xiàn),這種實(shí)現(xiàn)對應(yīng)用而言是透明的。

對象存儲(chǔ):Web規(guī)模的NAS
此外,云端原生應(yīng)用也需要有一個(gè)可用來在VM之間共享數(shù)據(jù)的空間,不過他們通常需要的是可跨地域擴(kuò)展至多個(gè)數(shù)據(jù)中心的名稱空間,對象存儲(chǔ)(object storage)所提供的正是這類存儲(chǔ)。例如,亞馬遜S3提供了跨整個(gè)區(qū)域,也可以說是跨全球的一個(gè)單一的邏輯名稱空間。為了達(dá)成這一規(guī)模,S3需要犧牲掉傳統(tǒng)NAS的強(qiáng)一致性和細(xì)粒度更新。
對象存儲(chǔ)提供了一種被稱作對象的類文件抽象,不過它提供了最終一致性。這意味著雖然所有客戶端發(fā)出的請求最終都能獲得相同的答案,但它們也有可能間中會(huì)收到不同的回答。這種一致性類似Dropbox在兩臺(tái)計(jì)算機(jī)之間提供的一致性,客戶端可能間中偏離了同步軌道,但最終一切都會(huì)被拉回正軌。
此外,傳統(tǒng)的對象存儲(chǔ)還特地為在高延遲WAN連接上的使用提供了一組簡化的數(shù)據(jù)操作:列出“桶(bucket)”中的對象、讀取對象的全部內(nèi)容,以及使用新數(shù)據(jù)來全部更換對象中的數(shù)據(jù)。該模型提供了一組比NAS更為基礎(chǔ)的操作,允許應(yīng)用讀寫某個(gè)文件內(nèi)部的小塊內(nèi)容、按新的大小截?cái)辔募⒃谀夸浿g移動(dòng)文件等等。
這種寬松模型允許對象存儲(chǔ)以很低的成本和很好的整體性能來提供跨大區(qū)域的極大型名稱空間,因?yàn)樗倪@一規(guī)模和成本優(yōu)勢,許多旨在運(yùn)行于云環(huán)境中的應(yīng)用都被實(shí)現(xiàn)成使用對象存儲(chǔ)而非使用NAS。例如,云端原生應(yīng)用通常會(huì)使用對象存儲(chǔ)來存儲(chǔ)圖片、靜態(tài)Web內(nèi)容、備份數(shù)據(jù)、分析數(shù)據(jù)集和客戶文件等。
此外,還需要注意的很重要的一點(diǎn)是,對于許多用例來說,對象存儲(chǔ)的寬松一致性和粗粒度更新也使其成為了一種不合適的選擇。例如,它并不適合用作實(shí)例存儲(chǔ)或卷存儲(chǔ)的替代(至少對于它的原始形式來說是如此)。實(shí)例存儲(chǔ)和卷存儲(chǔ)支持強(qiáng)一致性、小塊更新,以及重度寫(write-heavy)、隨機(jī)工作負(fù)載等,所有這些方面對于對象存儲(chǔ)的使用來說都是挑戰(zhàn)。
而且,要求強(qiáng)一致性的NAS工作負(fù)載也并不適用于對象存儲(chǔ),所以,NAS極有可能會(huì)繼續(xù)與對象一起并存于云環(huán)境中。
與NAS一樣,對象存儲(chǔ)是一種軟件構(gòu)造,而非一種硬件構(gòu)造,應(yīng)用自身直接通過REST API訪問對象存儲(chǔ)。私有云中存在著兩種主要的(也是相似的)對象API:Amazon的S3 API和 OpenStack的Swift API。
許多廠商都提供了對象存儲(chǔ)實(shí)現(xiàn),如OpenStack的Swift、Amazon的S3、Red Hat的Ceph和Cleversafe等,通常,除了其他一些API之外,所有這些產(chǎn)品還都支持S3 API或 Swift API或兩者。一些諸如EMC Isilon一類的現(xiàn)有文件系統(tǒng)廠商也為他們已有的文件接口提供了對象接口。
#p#
現(xiàn)在來歸納一下
現(xiàn)在,我們已經(jīng)對云存儲(chǔ)模型及其與被用在更傳統(tǒng)的存儲(chǔ)環(huán)境中的存儲(chǔ)模型的關(guān)系做了一個(gè)完整的描述,正如DAS、SAN和NAS提供了一組工具來解決各種物理的或虛擬的用例的問題,實(shí)例、卷和對象存儲(chǔ)也共同為云提供了一個(gè)靈活的泛型。雖然并非所有的安裝實(shí)例都會(huì)用到所有的這些存儲(chǔ)類型,但也沒有一種存儲(chǔ)類型依靠自身就能夠處理所有必需的用例。

新的云存儲(chǔ)模型
下面的表格回顧了每種模型的實(shí)現(xiàn)方式,每種模型被暴露給VM的方式,以及每種模型提供給管理員的管理方式。
實(shí)例和卷存儲(chǔ)充當(dāng)現(xiàn)有的DAS和SAN物理存儲(chǔ)模型的邏輯抽象,在新的數(shù)據(jù)中心環(huán)境中,這些虛擬存儲(chǔ)模型存在于存儲(chǔ)協(xié)議之上。與之相反,對象存儲(chǔ)提供了一種新的主要專注于大規(guī)模的存儲(chǔ)類型,該存儲(chǔ)類型處理一系列類似于物理環(huán)境中的NAS所處理的那種用例。
雖然這些抽象初看很復(fù)雜,但它們給數(shù)據(jù)中心和應(yīng)用管理員帶來了新的自由。應(yīng)用管理員不再被數(shù)據(jù)中心的基礎(chǔ)設(shè)施決策所束縛,他們可以隨意選用對應(yīng)用有意義的模型來管理數(shù)據(jù)。相應(yīng)的,數(shù)據(jù)中心管理員可在對用戶來說很重要的抽象層面管理存儲(chǔ),同時(shí)又可以利用適合于數(shù)據(jù)中心需求的***存儲(chǔ)實(shí)現(xiàn)。
就像DAS、SAN和NAS模型支持物理數(shù)據(jù)中心的創(chuàng)新一樣,實(shí)例、卷和對象存儲(chǔ)也會(huì)讓現(xiàn)代虛擬數(shù)據(jù)中心的持續(xù)創(chuàng)新成為可能。
關(guān)于作者
Brandon Salmon是Tintri公司的CTO,@Tintri,2009 年加入Tintri。他是被稱作系統(tǒng)小子的那類人,喜歡思考用戶體驗(yàn),這個(gè)愛好從他在卡內(nèi)基·梅隆大學(xué)進(jìn)行關(guān)于家居分布式文件系統(tǒng)的博士研究工作時(shí)就開始了。他設(shè)計(jì)和實(shí)現(xiàn)了Tintri的在閃存和磁盤之間移動(dòng)數(shù)據(jù)的最初算法,此后又致力于多個(gè)領(lǐng)域的研究工作,最近的研究方向是云技術(shù)。
原文鏈接:了解云存儲(chǔ)模型