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

 

1、概念及區別

針對不一樣的應用場景,選擇的分佈式存儲方案也會不一樣,所以有了對象存儲、塊存儲、文件系統存儲。這三者的主要區別在於它們的存儲接口:數據庫

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. 文件存儲: spa

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

 

2、IO特色

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

  接口簡單,一個對象咱們能夠當作一個文件,只能全寫全讀,一般以大文件爲主,要求足夠的IO帶寬。blog

2. 塊存儲(硬盤): 接口

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

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

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

 

  所以,這三種接口分別以非分佈式狀況下的鍵值數據庫、硬盤和文件系統的IO特色來對應便可。至於冷熱、快慢、大小文件而言更接近於業務。可是由於存儲系統是通用化實現,一般來講,須要儘可能知足各類需求,而接口定義已經必定意義上就砍去了一些需求,如對象存儲會以冷存儲更多,大文件爲主。

 

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

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

 

(全文完)

參考:

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

2.《Ceph源碼分析》

相關文章
相關標籤/搜索