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

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

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

這導致了被向上暴露給VM和管理員的存儲模型與被虛擬機管理程序實際用來存儲數據的存儲協議之間的一個分離,以虛擬磁盤為例,VMware按照DAS存儲模型來設計它們,然后使用一個NAS存儲協議來實現它們。
這是一個非常強大的間接層,它賦予了我們混合搭配存儲模型和存儲協議的靈活性,我們甚至可以動態地更換存儲協議而不會影響到虛擬機。例如,虛擬磁盤使用NFS中的文件或存儲在光纖通道LUN上的VMFS中的文件來實現,或甚至可直接實現成iSCSI LUN,這一實現做法的選擇對應用來說是完全透明的,因為最終所有的這些協議在VM和管理員看來都是相同的,它們看起來就像是被附加到VM上的本地物理磁盤。

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

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

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

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

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