對象存儲、塊存儲、文件系統存儲概念與區別


 

一、概念及區別

針對不同的應用場景,選擇的分布式存儲方案也會不同,因此有了對象存儲、塊存儲、文件系統存儲。這三者的主要區別在於它們的存儲接口:

1.  對象存儲:

  也就是通常意義的鍵值存儲,其接口就是簡單的GET,PUT,DEL和其他擴展,如七牛、又拍,Swift,S3

2. 塊存儲:

  這種接口通常以QEMU Driver或者Kernel Module的方式存在,這種接口需要實現Linux的Block Device的接口或者QEMU提供的Block Driver接口,如Sheepdog,AWS的EBS,青雲的雲硬盤和阿里雲的盤古系統,還有Ceph的RBD(RBD是Ceph面向塊存儲的接口)

3. 文件存儲:

  通常意義是支持POSIX接口,它跟傳統的文件系統如Ext4是一個類型的,但區別在於分布式存儲提供了並行化的能力,如Ceph的CephFS(CephFS是Ceph面向文件存儲的接口),但是有時候又會把GFS,HDFS這種非POSIX接口的類文件存儲接口歸入此類。

 

二、IO特點

按照這三種接口和其應用場景,很容易了解這三種類型的IO特點,括號里代表了它在非分布式情況下的對應:
1. 對象存儲(鍵值數據庫):

  接口簡單,一個對象我們可以看成一個文件,只能全寫全讀,通常以大文件為主,要求足夠的IO帶寬。

2. 塊存儲(硬盤):

  它的IO特點與傳統的硬盤是一致的,一個硬盤應該是能面向通用需求的,即能應付大文件讀寫,也能處理好小文件讀寫。但是硬盤的特點是容量大,熱點明顯。因此塊存儲主要可以應付熱點問題。另外,塊存儲要求的延遲是最低的。

3. 文件存儲(文件系統):

  支持文件存儲的接口的系統設計跟傳統本地文件系統如Ext4這種的特點和難點是一致的,它比塊存儲具有更豐富的接口,需要考慮目錄、文件屬性等支持,實現一個支持並行化的文件存儲應該是最困難的。但像HDFS、GFS這種自己定義標准的系統,可以通過根據實現來定義接口,會容易一點。

 

  因此,這三種接口分別以非分布式情況下的鍵值數據庫、硬盤和文件系統的IO特點來對應即可。至於冷熱、快慢、大小文件而言更接近於業務。但是因為存儲系統是通用化實現,通常來說,需要盡量滿足各種需求,而接口定義已經一定意義上就砍去了一些需求,如對象存儲會以冷存儲更多,大文件為主。

 

 三、Ceph的對象存儲、塊存儲、文件系統存儲

  Ceph同時支持這三種存儲,方法就是通過支持不同的接口來支持不同的存儲。下面是Ceph的基本架構圖,可以看到通過兼容AWS的S3和OpenStack的Swift接口來支持對象存儲,通過librbd庫提供塊存儲的接口,通過libcephfs庫的文件系統接口或標准posix接口來支持文件系統存儲。

 

(全文完)

參考:

1. 王豪邁的回答:有關分布式存儲的三個基本問題

2.《Ceph源碼分析》

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM