天天看點

《Ceph源碼分析》——第1章,第4節Ceph用戶端接口

本節書摘來自華章出版社《ceph源碼分析》一書中的第1章,第1.4節ceph用戶端接口,作者常濤,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視

1.4 ceph用戶端接口

ceph的設計初衷是成為一個分布式檔案系統,但随着雲計算的大量應用,最終變成支援三種形式的存儲:塊存儲、對象存儲、檔案系統,下面介紹它們之間的差別。

1.4.1 rbd

rbd(rados block device)是通過librbd庫對應用提供塊存儲,主要面向雲平台的虛拟機提供虛拟磁盤。傳統san就是塊存儲,通過scsi或者fc接口給應用提供一個獨立的lun或者卷。rbd類似于傳統的san存儲,都提供資料塊級别的通路。

目前rbd提供了兩個接口,一種是直接在使用者态實作,通過qemu driver供kvm虛拟機使用。另一種是在作業系統核心态實作了一個核心子產品。通過該子產品可以把塊裝置映射給實體主機,由實體主機直接通路。

塊存儲用作虛拟機的硬碟,其對i/o的要求和傳統的實體硬碟類似。一個硬碟應該是能面向通用需求的,既能應付大檔案讀寫,也能處理好小檔案讀寫。也就是說,塊存儲既需要有較好的随機i/o,又要求有較好的順序i/o,而且對延遲有比較嚴格的要求。

1.4.2 cephfs

cephfs通過在rados基礎之上增加了mds(metadata server)來提供檔案存儲。它提供了libcephfs庫和标準的posix檔案接口。cephfs類似于傳統的nas存儲,通過nfs或者cifs協定提供檔案系統或者檔案目錄服務。

ceph最初的設計為分布式檔案系統,其通過動态子樹的算法實作了多中繼資料伺服器,但是由于實作複雜,目前還遠遠不能使用。目前可用于生産環境的是最新jewel版本的cephfs為主從模式(master-slave)的中繼資料伺服器。

1.4.3 radosgw

radosgw基于librados提供了和amazon s3接口以及openstack swift接口相容的對象存儲接口。可将其簡單地了解為提供基本檔案(或者對象)的上傳和下載下傳的需求,它有兩個特點:

提供restful web api接口。

它采用扁平的資料組織形式。

restful的存儲接口

其接口值提供了簡單的get、put、del等其他接口,對應對象檔案的上傳、下載下傳、删除、查詢等操作。可以看出,對象存儲的i/o接口相對比較簡單,其i/o通路模型都是順序i/o通路。

扁平的資料組織形式

nas存儲提供給應用的是一個檔案系統或者是一個檔案夾,其實質就是一個層級化的樹狀存儲組織模式,其嵌套層級和規模在理論上都不受限制。

這種樹狀的目錄結構為早期本地存儲系統設計的資訊組織形式,比較直覺,容易了解。但是随着存儲系統規模的不斷擴大,特别是到了雲存儲時代,其難以大規模擴充的缺點就暴露了出來。相比于nas存儲,對象存儲放棄了目錄樹結構,采用了扁平化組織形式(一般為三級組織結構),這有利于實作近乎無限的容量擴充。它使用業界标準網際網路協定,更加符合面向雲服務的存儲、歸檔和備份需求。

圖1-3 amazon s3的對象存儲結構

《Ceph源碼分析》——第1章,第4節Ceph用戶端接口

由于amazon在雲存儲領域的影響力,amazon的s3接口已經成為事實上的對象存儲的标準接口。如圖1-3所示,其接口分三級存儲:account/bucket/object(賬戶/桶/對象)。一個account可以看作一個使用者(租戶),其下可以包含若幹個的bucket,一個bucket可以擁有若幹對象,其數量在理論上都不受限制。

在雲計算領域,openstack已經成為廣泛采用的雲計算管理系統,openstack的對象存儲接口swift也成為廣泛采用的接口,如圖1-4所示,其也采用分三級存儲:account/container/object(賬戶/容器/對象),每層節點數均沒有限制。可以看出,swift接口和s3類似,swift的container對應s3的bucket概念。swift接口和s3接口沒有太大的差別,但是一些管理接口會有一些差别。

圖1-4 openstack swift對象存儲結構

《Ceph源碼分析》——第1章,第4節Ceph用戶端接口