Ceph是什么
什么是Ceph?首先我們應(yīng)該明確,Ceph是一種分布式存儲(chǔ)系統(tǒng),所謂分布式,指的是Ceph可以部署在多臺(tái)服務(wù)器上,通過多臺(tái)服務(wù)器并行處理來對(duì)外提供高性能的讀寫塊。
同時(shí)Ceph除了能提供塊存儲(chǔ),還可以提供文件存儲(chǔ)、對(duì)象存儲(chǔ)。
Ceph的優(yōu)勢
實(shí)際上Ceph不是一個(gè)才出現(xiàn)的開源項(xiàng)目,而是走過了 7年的路程,那么Ceph有什么樣的優(yōu)勢呢?
-
Ceph的優(yōu)勢在于它的設(shè)計(jì)思想:無需查表,算算就好。也就是說它可以充分利用服務(wù)器的計(jì)算能力,消除了對(duì)單一中心節(jié)點(diǎn)的依賴,可以實(shí)現(xiàn)真正的無中心結(jié)構(gòu)
這樣Ceph的可靠性和可擴(kuò)展性都很強(qiáng),而且客戶端訪問延遲也比較少。
-
Ceph在OpenStack開源社區(qū)中備受重視。
OpenStack是現(xiàn)在最為流行的開源云操作系統(tǒng),目前Ceph已經(jīng)成為OpenStack中呼聲最高的開源存儲(chǔ)方案之一。
Ceph的產(chǎn)生和發(fā)展
一般來說開源項(xiàng)目的來源主要有兩個(gè),一個(gè)是從學(xué)校里面的一些課題,一個(gè)是企業(yè)里面的大牛對(duì)產(chǎn)品進(jìn)行開源。Ceph就是典型的學(xué)院派,它起源于Sage Weil博士期間的課題,使用C++開發(fā)。
2011年Sage創(chuàng)建了Inktank公司以主導(dǎo)Ceph的開發(fā)和社區(qū)維護(hù)。

Ceph的設(shè)計(jì)思想
Ceph的應(yīng)用場景
要理解Ceph的設(shè)計(jì)思想,我們首先應(yīng)該研究這個(gè)東西的應(yīng)用場景,因?yàn)樗膽?yīng)用場景關(guān)系到它為什么這么設(shè)計(jì)。
Ceph最初的目標(biāo)場景是大規(guī)模、分布式存儲(chǔ)系統(tǒng),Ceph起源于04年,那個(gè)時(shí)候CPU還是單核,硬盤容量只有幾十GB,所以當(dāng)時(shí)的想法是至少能承載PB級(jí)別的數(shù)據(jù)。
而Ceph與傳統(tǒng)的存儲(chǔ)不太一樣的地方在于,它的眼光是動(dòng)態(tài)的
首先是存儲(chǔ)規(guī)模是會(huì)變的。也就是可以根據(jù)業(yè)務(wù)的規(guī)模擴(kuò)展存儲(chǔ)的容量。
存儲(chǔ)的設(shè)備會(huì)變。我們使用的不是高可靠性的小機(jī),而是可能發(fā)生故障的x86服務(wù)器,所以極有可能某個(gè)節(jié)點(diǎn)發(fā)生故障,那么需要在軟件層面進(jìn)行保障。
存儲(chǔ)數(shù)據(jù)也會(huì)變。也就是,需要考慮到存儲(chǔ)的數(shù)據(jù)可能被增刪讀寫,而不是一層不變的。
這就是Ceph的目標(biāo)場景,它希望能應(yīng)對(duì)存儲(chǔ)容量會(huì)變,同時(shí)可以對(duì)數(shù)據(jù)進(jìn)行快速的增刪讀寫的場景,而且底層的硬件主要使用廉價(jià)的X86服務(wù)器,使用上層軟件來保證可靠性。
針對(duì)這種場景,Ceph應(yīng)具有
-
高可靠性:
首先存儲(chǔ)在里面的數(shù)據(jù)不會(huì)丟失,同時(shí)數(shù)據(jù)在寫入的時(shí)候,需要保證原子性。
另外因?yàn)閿?shù)據(jù)會(huì)經(jīng)常遷移,而且故障了以后會(huì)有恢復(fù)的過程,我們希望Ceph能自動(dòng)完成這些工作,而不需要人為參與。
高擴(kuò)展性,就是希望節(jié)點(diǎn)數(shù)增加了,數(shù)據(jù)的訪問帶寬也線性增加,不能是節(jié)點(diǎn)增加了很多,性能增加不明顯
Ceph的設(shè)計(jì)思路
那么Ceph要怎么樣實(shí)現(xiàn)高可靠、高擴(kuò)展,還要同時(shí)保證自動(dòng)化呢?
之前已經(jīng)概括過,Ceph的主要思路是
-
充分發(fā)生節(jié)點(diǎn)的計(jì)算能力
也就是用算來代替找,這就有對(duì)象存儲(chǔ)的思想了。
-
去中心化。
我們知道分布式架構(gòu)一般可以分為有中心的非對(duì)稱架構(gòu)和無中心對(duì)稱架構(gòu)兩種。
非對(duì)稱架構(gòu)有Master和Slave之分,Master一般存放了數(shù)據(jù)塊與實(shí)際節(jié)點(diǎn)的映射關(guān)系,所以客戶端會(huì)先向Master查找數(shù)據(jù)塊存放的位置, 然后再訪問Slave。
這樣的好處是簡單,缺點(diǎn)是Master節(jié)點(diǎn)會(huì)出現(xiàn)單點(diǎn)故障,而且也會(huì)成為性能瓶頸。
而對(duì)稱節(jié)點(diǎn)中每個(gè)節(jié)點(diǎn)的地位相同,都保存了全局的映射關(guān)系,所以它們會(huì)花大量的功夫來進(jìn)行映射關(guān)系的同步,不利于擴(kuò)展。Ceph則使用了更創(chuàng)新的方法來解決這個(gè)問題。下面我們來看看它使用了什么方法?
對(duì)于一個(gè)分布式系統(tǒng),它最關(guān)鍵的要解決兩個(gè)問題:
-
“寫的問題”,也就是把數(shù)據(jù)寫到什么地方。
寫的方法合不合理,要看最終的數(shù)據(jù)分布是否均勻,這又會(huì)進(jìn)一步影響到節(jié)點(diǎn)的訪問速度等
-
“讀的問題”,應(yīng)該從哪里去讀。
因?yàn)樽x的概率遠(yuǎn)大于寫,所以能否高效準(zhǔn)確的找到之前存放的數(shù)據(jù)在哪里,也是存儲(chǔ)的系統(tǒng)應(yīng)該考慮的非常重要的問題。
之前我們說過對(duì)于對(duì)稱結(jié)構(gòu)的分布式系統(tǒng),它會(huì)引入專門的節(jié)點(diǎn), 在里面存放數(shù)據(jù)塊與節(jié)點(diǎn)映射關(guān)系,客戶端需要先從這個(gè)節(jié)點(diǎn)上獲取實(shí)際的位置再進(jìn)行后續(xù)的操作。
而Ceph的創(chuàng)新在于,不再使用查表的尋址方式,而是使用計(jì)算的方式。也就是一個(gè)客戶端只需要使用少量的本地元數(shù)據(jù),就可以計(jì)算出存儲(chǔ)位置。這就是Ceph最關(guān)鍵的地方。
