天天看點

檔案系統,快存儲,對象存儲

塊存儲、檔案存儲、對象存儲這三者的本質差别是什麼?

我的了解是塊存儲、檔案存儲、對象存儲都是圍繞資料而衍生的三個概念,而對于資料來說有不同外延,例如資料的存儲,資料的分布,資料的讀寫速度。。。是否可以圍繞資料處理的不同次元,來區分塊存儲、檔案存儲、對象存儲的概念?

【塊存儲】

典型裝置:磁盤陣列,硬碟

塊存儲主要是将裸磁盤空間整個映射給主機使用的,就是說例如磁盤陣列裡面有5塊硬碟(為友善說明,假設每個硬碟1G),然後可以通過劃邏輯盤、做 Raid、或者LVM(邏輯卷)等種種方式邏輯劃分出N個邏輯的硬碟。(假設劃分完的邏輯盤也是5個,每個也是1G,但是這5個1G的邏輯盤已經于原來的 5個實體硬碟意義完全不同了。例如第一個邏輯硬碟A裡面,可能第一個200M是來自實體硬碟1,第二個200M是來自實體硬碟2,是以邏輯硬碟A是由多個 實體硬碟邏輯虛構出來的硬碟。)

接着塊存儲會采用映射的方式将這幾個邏輯盤映射給主機,主機上面的作業系統會識别到有5塊硬碟,但是作業系統是區分不出到底是邏輯還是實體的,它一概就認 為隻是5塊裸的實體硬碟而已,跟直接拿一塊實體硬碟挂載到作業系統沒有差別的,至少作業系統感覺上沒有差別。

此種方式下,作業系統還需要對挂載的裸硬碟進行分區、格式化後,才能使用,與平常主機内置硬碟的方式完全無異。

優點:

1、 這種方式的好處當然是因為通過了Raid與LVM等手段,對資料提供了保護。

2、 另外也可以将多塊廉價的硬碟組合起來,成為一個大容量的邏輯盤對外提供服務,提高了容量。

3、 寫入資料的時候,由于是多塊磁盤組合出來的邏輯盤,是以幾塊磁盤可以并行寫入的,提升了讀寫效率。

4、 很多時候塊存儲采用SAN架構組網,傳輸速率以及封裝協定的原因,使得傳輸速度與讀寫速率得到提升。

缺點:

1、采用SAN架構組網時,需要額外為主機購買光纖通道卡,還要買光纖交換機,造價成本高。

2、主機之間的資料無法共享,在伺服器不做叢集的情況下,塊存儲裸盤映射給主機,再格式化使用後,對于主機來說相當于本地盤,那麼主機A的本地盤根本不能給主機B去使用,無法共享資料。

3、 不利于不同作業系統主機間的資料共享:另外一個原因是因為作業系統使用不同的檔案系統,格式化完之後,不同檔案系統間的資料是共享不了的。例如一台裝了 WIN7/XP,檔案系統是FAT32/NTFS,而Linux是EXT4,EXT4是無法識别NTFS的檔案系統的。就像一隻NTFS格式的U盤,插進 Linux的筆記本,根本無法識别出來。是以不利于檔案共享。

【檔案存儲】

典型裝置:FTP、NFS伺服器

為了克服上述檔案無法共享的問題,是以有了檔案存儲。

檔案存儲也有軟硬一體化的裝置,但是其實普通拿一台伺服器/筆記本,隻要裝上合适的作業系統與軟體,就可以架設FTP與NFS服務了,架上該類服務之後的伺服器,就是檔案存儲的一種了。

主機A可以直接對檔案存儲進行檔案的上傳下載下傳,與塊存儲不同,主機A是不需要再對檔案存儲進行格式化的,因為檔案管理功能已經由檔案存儲自己搞定了。

優點:

1、造價交低:随便一台機器就可以了,另外普通以太網就可以,根本不需要專用的SAN網絡,是以造價低。

2、友善檔案共享:例如主機A(WIN7,NTFS檔案系統),主機B(Linux,EXT4檔案系統),想互拷一部電影,本來不行。加了個主機C(NFS伺服器),然後可以先A拷到C,再C拷到B就OK了。(例子比較膚淺,請見諒……)

缺點:

讀寫速率低,傳輸速率慢:以太網,上傳下載下傳速度較慢,另外所有讀寫都要1台伺服器裡面的硬碟來承擔,相比起磁盤陣列動不動就幾十上百塊硬碟同時讀寫,速率慢了許多。

【對象存儲】

典型裝置:内置大容量硬碟的分布式伺服器

對象存儲最常用的方案,就是多台伺服器内置大容量硬碟,再裝上對象存儲軟體,然後再額外搞幾台服務作為管理節點,安裝上對象存儲管理軟體。管理節點可以管理其他伺服器對外提供讀寫通路功能。

之是以出現了對象存儲這種東西,是為了克服塊存儲與檔案存儲各自的缺點,發揚它倆各自的優點。簡單來說塊存儲讀寫快,不利于共享,檔案存儲讀寫慢,利于共享。能否弄一個讀寫快,利 于共享的出來呢。于是就有了對象存儲。

首先,一個檔案包含了了屬性(術語叫metadata,中繼資料,例如該檔案的大小、修改時間、存儲路徑等)以及内容(以下簡稱資料)。

以往像FAT32這種檔案系統,是直接将一份檔案的資料與metadata一起存儲的,存儲過程先将檔案按照檔案系統的最小塊大小來打散(如4M的檔案, 假設檔案系統要求一個塊4K,那麼就将檔案打散成為1000個小塊),再寫進硬碟裡面,過程中沒有區分資料/metadata的。而每個塊最後會告知你下 一個要讀取的塊的位址,然後一直這樣順序地按圖索骥,最後完成整份檔案的所有塊的讀取。

這種情況下讀寫速率很慢,因為就算你有100個機械手臂在讀寫,但是由于你隻有讀取到第一個塊,才能知道下一個塊在哪裡,其實相當于隻能有1個機械手臂在實際工作。

而 對象存儲則将中繼資料獨立了出來,控制節點叫中繼資料伺服器(伺服器+對象存儲管理軟體),裡面主要負責存儲對象的屬性(主要是對象的資料被打散存放到了那幾 台分布式伺服器中的資訊),而其他負責存儲資料的分布式伺服器叫做OSD,主要負責存儲檔案的資料部分。當使用者通路對象,會先通路中繼資料伺服器,中繼資料服 務器隻負責回報對象存儲在哪些OSD,假設回報檔案A存儲在B、C、D三台OSD,那麼使用者就會再次直接通路3台OSD伺服器去讀取資料。

這時候由于是3台OSD同時對外傳輸資料,是以傳輸的速度就加快了。當OSD伺服器數量越多,這種讀寫速度的提升就越大,通過此種方式,實作了讀寫快的目的。

另一方面,對象存儲軟體是有專門的檔案系統的,是以OSD對外又相當于檔案伺服器,那麼就不存在檔案共享方面的困難了,也解決了檔案共享方面的問題。

是以對象存儲的出現,很好地結合了塊存儲與檔案存儲的優點。

最後為什麼對象存儲兼具塊存儲與檔案存儲的好處,還要使用塊存儲或檔案存儲呢?

1、有一類應用是需要存儲直接裸盤映射的,例如資料庫。因為資料庫需要存儲裸盤映射給自己後,再根據自己的資料庫檔案系統來對裸盤進行格式化的,是以是不能夠采用其他已經被格式化為某種檔案系統的存儲的。此類應用更适合使用塊存儲。

2、對象存儲的成本比起普通的檔案存儲還是較高,需要購買專門的對象存儲軟體以及大容量硬碟。如果對資料量要求不是海量,隻是為了做檔案共享的時候,直接用檔案存儲的形式好了,成本效益高。

塊存儲就是事先在存儲空間中畫好整齊的格子(格式化),然後以一個格子為最小機關進行存取,即每次存取至少涉及一個格子的空間。

檔案存儲就是通常使用的ntfs、fat、ext等檔案系統,以檔案為機關進行存取。

多 數檔案系統建立在塊存儲之上。具體地說,作業系統是磁盤的直接使用者(通過磁盤提供的原始接口使用磁盤),作業系統在使用磁盤空間時使用塊存儲,當有記憶體 中的資料要寫入磁盤時,作業系統首先将資料劃分為多個塊(塊大小等于磁盤上“格子”的大小),然後放進磁盤上的若幹空白"格子"裡。但這個過程對作業系統 使用者是感覺不到的,使用者所感覺到的最小的存儲機關就是一個完整的檔案,使用者使用的是檔案存儲