分析開源項目,時常遇到的一個問題就是資料不足。有時間寫代碼的大牛們一般是都是沒有時間或者根本不屑於寫文檔的。而很少的文檔一般又是使用手冊之類的東西。即使偶爾有設計文檔一般也是語焉不詳。在這種狀況下,想從代碼裏反向把設計思想提煉出來,畢竟不是人人都能作到的。服務器
值得咱們慶幸的是,Ceph是一個典型的起源於學術研究課題的開源項目。雖然學術研究生涯對於Sage而言只是其光輝事蹟的短短一篇,但畢竟仍是有幾篇學術文獻可供參考[1]。這也爲咱們提供了可貴的,從頂層視角入手分析一個系統領域的優秀開源項目的機會。本篇文章的內容也正是筆者閱讀這些文獻的心得體會。數據結構
3.1 Ceph針對的目標應用場景架構
理解Ceph的設計思想,首先仍是要了解Sage設計Ceph時所針對的目標應用場景,換言之,「作這東西的目的是啥?」運維
事實上,Ceph最初針對的目標應用場景,就是大規模的、分佈式的存儲系統。所謂「大規模」和「分佈式」,是指至少可以承載PB級別的數據,而且由成千上萬的存儲節點組成。分佈式
在大數據口號深刻人心的今天,PB已經遠遠不是一個激動人心的系統設計目標了。可是,應該指出,Ceph項目起源於04年。那是一個商用處理器以單核爲主流,常見硬盤容量只有幾十GB的年代。這和如今動輒6核12線程還要雙處理器、單塊硬盤3TB已經司空見慣的狀況是不可同日而語的。所以,理解這個設計目標,應該考慮當時的實際狀況。固然,如前所述,Ceph的設計並無理論上限,因此PB級別並非實際應用的容量限制。性能
在Sage的思想中,對於這樣一個大規模的存儲系統,是不能以靜態的眼光來看待的。對於其動態特性,筆者歸納爲以下三個「變化」:大數據
上述三個「變化」就是Ceph目標應用場景的關鍵特徵。Ceph所具有的各類主要特性,也都是針對這些場景特徵所提出的。線程
3.2 針對目標應用場景所提出的預期技術特性設計
針對上述應用場景,Ceph在設計之初的幾個技術特性是:ci
3.3 針對預期技術特性所提出的設計思路
針對3.2節中介紹的預期技術特性,Sage對於Ceph的設計思路基本上能夠歸納爲如下兩點:
3.4 支撐設計思路實現的關鍵技術創新
不管多麼新穎奇妙的設計思路,最終落地一定須要有技術實力的支撐。而這也正是Ceph最爲閃亮的地方。
Ceph最爲核心的技術創新就是前面所歸納的八個字——「無需查表,算算就好」。通常而言,一個大規模分佈式存儲系統,必需要可以解決兩個最基本的問題:
一是「我應該把數據寫入到什麼地方」。對於一個存儲系統,當用戶提交須要寫入的數據時,系統必須迅速決策,爲數據分配一個存儲位置和空間。這個決策的速度影響到數據寫入延遲,而更爲重要的是,其決策的合理性也影響着數據分佈的均勻性。這又會進一步影響存儲單元壽命、數據存儲可靠性、數據訪問速度等後續問題。
二是「我以前把數據寫到什麼地方去了」。對於一個存儲系統,高效準確的處理數據尋址問題也是基本能力之一。
針對上述兩個問題,傳統的分佈式存儲系統經常使用的解決方案是引入專用的服務器節點,在其中存儲用於維護數據存儲空間映射關係的數據結構。在用戶寫入/訪問數據時,首先鏈接這一服務器進行查找操做,待決定/查到數據實際存儲位置後,再鏈接對應節點進行後續操做。因而可知,傳統的解決方案一方面容易致使單點故障和性能瓶頸,另外一方面也容易致使更長的操做延遲。
針對這一問題,Ceph完全放棄了基於查表的數據尋址方式,而改用基於計算的方式。簡言之,任何一個Ceph存儲系統的客戶端程序,僅僅使用不按期更新的少許本地元數據,加以簡單計算,就能夠根據一個數據的ID決定其存儲位置。對比以後能夠看出,這種方式使得傳統解決方案的問題一掃而空。Ceph的幾乎全部優秀特性都是基於這種數據尋址方式實現的。
至此爲止,Ceph的設計思想已經獲得了較爲全面深刻的介紹。此後幾篇文章將依次介紹Ceph的系統架構、工做原理與流程、主要特性等內容,並聯系OpenStack,將Ceph和Swift加以對比分析。
說明:轉載請註明出處。謝謝。