Ceph是什么
什么是Ceph?首先我們應該明確,Ceph是一種分布式存儲系統,所謂分布式,指的是Ceph可以部署在多台服務器上,通過多台服務器並行處理來對外提供高性能的讀寫塊。
同時Ceph除了能提供塊存儲,還可以提供文件存儲、對象存儲。
Ceph的優勢
實際上Ceph不是一個才出現的開源項目,而是走過了 7年的路程,那么Ceph有什么樣的優勢呢?
-
Ceph的優勢在於它的設計思想:無需查表,算算就好。也就是說它可以充分利用服務器的計算能力,消除了對單一中心節點的依賴,可以實現真正的無中心結構
這樣Ceph的可靠性和可擴展性都很強,而且客戶端訪問延遲也比較少。
-
Ceph在OpenStack開源社區中備受重視。
OpenStack是現在最為流行的開源雲操作系統,目前Ceph已經成為OpenStack中呼聲最高的開源存儲方案之一。
Ceph的產生和發展
一般來說開源項目的來源主要有兩個,一個是從學校里面的一些課題,一個是企業里面的大牛對產品進行開源。Ceph就是典型的學院派,它起源於Sage Weil博士期間的課題,使用C++開發。
2011年Sage創建了Inktank公司以主導Ceph的開發和社區維護。
Ceph的設計思想
Ceph的應用場景
要理解Ceph的設計思想,我們首先應該研究這個東西的應用場景,因為它的應用場景關系到它為什么這么設計。
Ceph最初的目標場景是大規模、分布式存儲系統,Ceph起源於04年,那個時候CPU還是單核,硬盤容量只有幾十GB,所以當時的想法是至少能承載PB級別的數據。
而Ceph與傳統的存儲不太一樣的地方在於,它的眼光是動態的
-
首先是存儲規模是會變的。也就是可以根據業務的規模擴展存儲的容量。
-
存儲的設備會變。我們使用的不是高可靠性的小機,而是可能發生故障的x86服務器,所以極有可能某個節點發生故障,那么需要在軟件層面進行保障。
-
存儲數據也會變。也就是,需要考慮到存儲的數據可能被增刪讀寫,而不是一層不變的。
這就是Ceph的目標場景,它希望能應對存儲容量會變,同時可以對數據進行快速的增刪讀寫的場景,而且底層的硬件主要使用廉價的X86服務器,使用上層軟件來保證可靠性。
針對這種場景,Ceph應具有
-
高可靠性:
首先存儲在里面的數據不會丟失,同時數據在寫入的時候,需要保證原子性。
-
另外因為數據會經常遷移,而且故障了以后會有恢復的過程,我們希望Ceph能自動完成這些工作,而不需要人為參與。
-
高擴展性,就是希望節點數增加了,數據的訪問帶寬也線性增加,不能是節點增加了很多,性能增加不明顯
Ceph的設計思路
那么Ceph要怎么樣實現高可靠、高擴展,還要同時保證自動化呢?
之前已經概括過,Ceph的主要思路是
-
充分發生節點的計算能力
也就是用算來代替找,這就有對象存儲的思想了。
-
去中心化。
我們知道分布式架構一般可以分為有中心的非對稱架構和無中心對稱架構兩種。
非對稱架構有Master和Slave之分,Master一般存放了數據塊與實際節點的映射關系,所以客戶端會先向Master查找數據塊存放的位置, 然后再訪問Slave。
這樣的好處是簡單,缺點是Master節點會出現單點故障,而且也會成為性能瓶頸。
而對稱節點中每個節點的地位相同,都保存了全局的映射關系,所以它們會花大量的功夫來進行映射關系的同步,不利於擴展。Ceph則使用了更創新的方法來解決這個問題。下面我們來看看它使用了什么方法?
對於一個分布式系統,它最關鍵的要解決兩個問題:
-
“寫的問題”,也就是把數據寫到什么地方。
寫的方法合不合理,要看最終的數據分布是否均勻,這又會進一步影響到節點的訪問速度等
-
“讀的問題”,應該從哪里去讀。
因為讀的概率遠大於寫,所以能否高效准確的找到之前存放的數據在哪里,也是存儲的系統應該考慮的非常重要的問題。
之前我們說過對於對稱結構的分布式系統,它會引入專門的節點, 在里面存放數據塊與節點映射關系,客戶端需要先從這個節點上獲取實際的位置再進行后續的操作。
而Ceph的創新在於,不再使用查表的尋址方式,而是使用計算的方式。也就是一個客戶端只需要使用少量的本地元數據,就可以計算出存儲位置。這就是Ceph最關鍵的地方。