標籤:
知乎上看到的
【Block Storage】
典型裝置:磁碟陣列,硬碟
Block Storage主要是將裸磁碟空間整個映射給主機使用的,就是說例如磁碟陣列裡面有5塊硬碟(為方便說明,假設每個硬碟1G),然後可以通過劃邏輯盤、做 Raid、或者LVM(邏輯卷)等種種方式邏輯劃分出N個邏輯的硬碟。(假設劃分完的邏輯盤也是5個,每個也是1G,但是這5個1G的邏輯盤已經於原來的 5個物理硬碟意義完全不同了。例如第一個邏輯硬碟A裡面,可能第一個200M是來自物理硬碟1,第二個200M是來自物理硬碟2,所以邏輯硬碟A是由多個 物理硬碟邏輯虛構出來的硬碟。)
接著Block Storage會採用映射的方式將這幾個邏輯盤映射給主機,主機上面的作業系統會識別到有5塊硬碟,但是作業系統是區分不出到底是邏輯還是物理的,它一概就認 為只是5塊裸的物理硬碟而已,跟直接拿一塊物理硬碟掛載到作業系統沒有區別的,至少作業系統感知上沒有區別。
此種方式下,作業系統還需要對掛載的裸硬碟進行分區、格式化後,才能使用,與平常主機內建硬碟的方式完全無異。
優點:
1、 這種方式的好處當然是因為通過了Raid與LVM等手段,對資料提供了保護。
2、 另外也可以將多塊廉價的硬碟組合起來,成為一個大容量的邏輯盤對外提供服務,提高了容量。
3、 寫入資料的時候,由於是多塊磁碟組合出來的邏輯盤,所以幾塊磁碟可以並行寫入的,提升了讀寫效率。
4、 很多時候Block Storage採用SAN架構組網,傳輸速率以及封裝協議的原因,使得傳輸速度與讀寫速率得到提升。
缺點:
1、採用SAN架構組網時,需要額外為主機購買光纖通道卡,還要買光纖交換器,造價成本高。
2、主機之間的資料無法共用,在伺服器不做叢集的情況下,Block Storage裸盤映射給主機,再格式化使用後,對於主機來說相當於本地碟,那麼主機A的本地碟根本不能給主機B去使用,無法共用資料。
3、 不利於不同作業系統主機間的資料共用:另外一個原因是因為作業系統使用不同的檔案系統,格式化完之後,不同檔案系統間的資料是共用不了的。例如一台裝了 WIN7/XP,檔案系統是FAT32/NTFS,而Linux是EXT4,EXT4是無法識別NTFS的檔案系統的。就像一隻NTFS格式的隨身碟,插進 Linux的筆記本,根本無法識別出來。所以不利於檔案分享權限設定。
【檔案儲存體】
典型裝置:FTP、NFS伺服器
為了克服上述檔案無法共用的問題,所以有了檔案儲存體。
檔案儲存體也有軟硬一體化的裝置,但是其實普通拿一台伺服器/筆記本,只要裝上合適的作業系統與軟體,就可以架設FTP與NFS服務了,架上該類服務之後的伺服器,就是檔案儲存體的一種了。
主機A可以直接對檔案儲存體進行檔案的上傳下載,與Block Storage不同,主機A是不需要再對檔案儲存體進行格式化的,因為檔案管理功能已經由檔案儲存體自己搞定了。
優點:
1、造價交低:隨便一台機器就可以了,另外普通乙太網路就可以,根本不需要專用的SAN網路,所以造價低。
2、方便檔案分享權限設定:例如主機A(WIN7,NTFS檔案系統),主機B(Linux,EXT4檔案系統),想互拷一部電影,本來不行。加了個主機C(NFS伺服器),然後可以先A拷到C,再C拷到B就OK了。(例子比較膚淺,請見諒……)
缺點:
讀寫速率低,傳輸速率慢:乙太網路,上傳下載速度較慢,另外所有讀寫都要1台伺服器裡面的硬碟來承擔,相比起磁碟陣列動不動就幾十上百塊硬碟同時讀寫,速率慢了許多。
【Object Storage Service】
典型裝置:內建大容量硬碟的分布式伺服器
Object Storage Service最常用的方案,就是多台伺服器內建大容量硬碟,再裝上Object Storage Service軟體,然後再額外搞幾台服務作為管理節點,安裝上Object Storage Service管理軟體。管理節點可以管理其他伺服器對外提供讀寫訪問功能。
之所以出現了Object Storage Service這種東西,是為了克服Block Storage與檔案儲存體各自的缺點,發揚它倆各自的優點。簡單來說Block Storage讀寫快,不利於共用,檔案儲存體讀寫慢,利於共用。能否弄一個讀寫快,利 於共用的出來呢。於是就有了Object Storage Service。
首先,一個檔案包含了了屬性(術語叫metadata,中繼資料,例如該檔案的大小、修改時間、儲存路徑等)以及內容(以下簡稱資料)。
以往像FAT32這種檔案系統,是直接將一份檔案的資料與metadata一起儲存的,預存程序先將檔案按照檔案系統的最小塊大小來打散(如4M的檔案, 假設檔案系統要求一個塊4K,那麼就將檔案打散成為1000個小塊),再寫進硬碟裡面,過程中沒有區分資料/metadata的。而每個塊最後會告知你下 一個要讀取的塊的地址,然後一直這樣順序地按圖索驥,最後完成整份檔案的所有塊的讀取。
這種情況下讀寫速率很慢,因為就算你有100個機械手臂在讀寫,但是由於你只有讀取到第一個塊,才能知道下一個塊在哪裡,其實相當於只能有1個機械手臂在實際工作。
而 Object Storage Service則將中繼資料獨立了出來,控制節點叫中繼資料服務器(伺服器+Object Storage Service管理軟體),裡面主要負責儲存物件的屬性(主要是對象的資料被打散存放到了那幾 台分布式伺服器中的資訊),而其他負責儲存資料的分布式伺服器叫做OSD,主要負責隱藏檔的資料部分。當使用者訪問對象,會先訪問中繼資料服務器,中繼資料服 務器只負責反饋Object Storage Service在哪些OSD,假設反饋檔案A儲存在B、C、D三台OSD,那麼使用者就會再次直接存取3台OSD伺服器去讀取資料。
這時候由於是3台OSD同時對外傳輸資料,所以傳輸的速度就加快了。當OSD伺服器數量越多,這種讀寫速度的提升就越大,通過此種方式,實現了讀寫快的目的。
另一方面,Object Storage Service軟體是有專門的檔案系統的,所以OSD對外又相當於檔案伺服器,那麼就不存在檔案分享權限設定方面的困難了,也解決了檔案分享權限設定方面的問題。
所以Object Storage Service的出現,很好地結合了Block Storage與檔案儲存體的優點。
最後為什麼Object Storage Service兼具Block Storage與檔案儲存體的好處,還要使用Block Storage或檔案儲存體呢?
1、有一類應用是需要儲存直接裸盤映射的,例如資料庫。因為資料庫需要儲存裸盤映射給自己後,再根據自己的資料庫檔案系統來對裸盤進行格式化的,所以是不能夠採用其他已經被格式化為某種檔案系統的儲存的。此類應用更適合使用Block Storage。
2、Object Storage Service的成本比起普通的檔案儲存體還是較高,需要購買專門的Object Storage Service軟體以及大容量硬碟。如果對資料量要求不是海量,只是為了做檔案分享權限設定的時候,直接用檔案儲存體的形式好了,性價比高。
Block Storage、檔案儲存體、Object Storage Service