佚名
虛擬化改變了計(jì)算機(jī)使用存儲的方式。就像物理機(jī)器抽象成虛擬機(jī)(VM)一樣,物理存儲設(shè)備也被抽象成虛擬磁盤(Virtual Disk)。服務(wù)器擴(kuò)展存儲的主要手段有直連存儲(DAS)、存儲區(qū)域網(wǎng)絡(luò)(SAN)和網(wǎng)絡(luò)附加存儲(NAS)三種類型。那么哪種存儲類型可以用來實(shí)現(xiàn)虛擬磁盤呢?
在虛擬環(huán)境中,類似VMWare這樣的虛擬機(jī)管理程序hypervisor,要同時給很多VM分配存儲空間。首先,需要先把物理存儲資源重新劃分成虛擬磁盤,然后再分配給VM。由于需要物聯(lián)磁盤太多,我們不能用DAS方式把物理磁盤直連到VM上。SAN是以邏輯單元(LUN)的形式提供存儲資源,但虛擬環(huán)境下的VM數(shù)量很大,LUN的數(shù)量也不足以支撐這么多虛擬磁盤。
更重要的一點(diǎn),虛擬磁盤對于眾多的VM來說是共享的,因?yàn)閂M需要隨時創(chuàng)建、刪除或者遷移,在遷移VM的時候就需要共享存儲,這樣原來的數(shù)據(jù)才不會丟失。無論DAS還是SAN,都不適合共享存儲?;谶@些問題,hypervisor采用NAS的方式來實(shí)現(xiàn)虛擬磁盤。VMware通常采用VMFS或NFS協(xié)議來實(shí)現(xiàn)虛擬磁盤,VMFS是專門針對虛擬機(jī)環(huán)境的文件系統(tǒng)協(xié)議。每個虛擬機(jī)的數(shù)據(jù)實(shí)際上就是一堆文件,最主要的文件就是虛擬磁盤文件,此外還有交換分區(qū)文件、非易失性內(nèi)存文件等。
實(shí)例存儲
現(xiàn)在實(shí)例存儲是主要的虛擬磁盤方式,每一個VM就是一個虛擬機(jī)實(shí)例,hypervisor在每個實(shí)例中提供仿真的硬件環(huán)境,包括CPU、內(nèi)存和磁盤。這種方式,使得虛擬磁盤成為虛擬機(jī)實(shí)例的一部分,就像物理世界一樣。VM刪除后,虛擬磁盤也會被刪除。在這種實(shí)例存儲模型中,虛擬磁盤與虛擬機(jī)之間的存儲關(guān)系,實(shí)際上是DAS存儲。但虛擬磁盤的底層實(shí)現(xiàn),上面我們說了,是用NAS方式實(shí)現(xiàn)的。而hypervisor的作用就是把VM層的存儲模型,與虛擬機(jī)下層的實(shí)現(xiàn)協(xié)議(VMFS或NFS)分離開。
卷存儲
實(shí)例存儲有它的限制,開發(fā)者一般希望把實(shí)例數(shù)據(jù)和用戶數(shù)據(jù)分開,這樣重建VM的時候可以保留用戶的數(shù)據(jù)。這個需求衍生出另外一種存儲模型:卷存儲。卷是存儲的主要單位,相當(dāng)于一個虛擬的磁盤分區(qū)。不屬于虛擬機(jī)實(shí)例的一部分,可以認(rèn)為是虛擬機(jī)的外置存儲設(shè)備。卷可以從一個VM卸下,然后附加給另外一個VM。這樣我們就實(shí)現(xiàn)了實(shí)例數(shù)據(jù)與用戶數(shù)據(jù)的分離。OpenStack的Cinder就是一個卷存儲的實(shí)現(xiàn)。
對象存儲
很多云應(yīng)用需要在不同的VM之間共享數(shù)據(jù),經(jīng)常需要跨越多個數(shù)據(jù)中心,對象存儲可以解決這個問題。對象存儲模型中,其核心設(shè)計(jì)思想其實(shí)也是虛擬化,具體說來,就是把文件的物理存儲位置,比如卷、目錄、磁盤等,虛擬化為bucket,把文件虛擬化為對象。對應(yīng)用層來說,簡化了對數(shù)據(jù)的存取訪問,屏蔽了底層存儲技術(shù)的異構(gòu)性和復(fù)雜性。
對象存儲模型
由于對象存儲遍布多節(jié)點(diǎn)且數(shù)據(jù)并非總是可用, 所以數(shù)據(jù)一致性不強(qiáng)。如果對一致性有要求,那么可以使用NAS。目前在云計(jì)算環(huán)境下,NAS和對象存儲是共存的關(guān)系。和NAS一樣,對象存儲也是軟件架構(gòu),應(yīng)用直接通過REST API來訪問對象存儲。常用的對象存儲包括:Amazon的S3和OpenStack的Swift。
在實(shí)際云平臺應(yīng)用中,要根據(jù)自己的情況來綜合考慮,對于非結(jié)構(gòu)化的靜態(tài)數(shù)據(jù)文件,如音視頻、圖片等,一般使用對象存儲;對于系統(tǒng)鏡像以及應(yīng)用程序,需要使用云主機(jī)實(shí)例存儲或者卷存儲;對于應(yīng)用產(chǎn)生的動態(tài)數(shù)據(jù),一般還需要利用云數(shù)據(jù)庫來對數(shù)據(jù)進(jìn)行管理。