淺析Ceph技術概況及其設計思想
Ceph的概況
本文將對Ceph的基本情況進行概要介紹,以期讀者能夠在不涉及技術細節(jié)的情況下對Ceph建立一個初步印象。
1. 什么是Ceph?
Ceph的官方網(wǎng)站Ceph.com上用如下這句話簡明扼要地定義了Ceph:
“Ceph is a unified, distributed storage system designed for excellent performance, reliability and scalability.” |
也即,Ceph是一種為優(yōu)秀的性能、可靠性和可擴展性而設計的統(tǒng)一的、分布式的存儲系統(tǒng)。應該說,這句話確實點出了Ceph的要義,可以作為理解Ceph系統(tǒng)設計思想和實現(xiàn)機制的基本出發(fā)點。在這個定義中,應當特別注意“存儲系統(tǒng)”這個概念的兩個修飾詞,即“統(tǒng)一的”和“分布式的”。
具體而言,“統(tǒng)一的”意味著Ceph可以一套存儲系統(tǒng)同時提供對象存儲、塊存儲和文件系統(tǒng)存儲三種功能,以便在滿足不同應用需求的前提下簡化部署和運維。而“分布式的”在Ceph系統(tǒng)中則意味著真正的無中心結構和沒有理論上限的系統(tǒng)規(guī)模可擴展性。在實踐當中,Ceph可以被部署于上千臺服務器上。截至2013年3月初,Ceph在生產(chǎn)環(huán)境下部署的***規(guī)模系統(tǒng)為 Dreamhost公司的對象存儲業(yè)務集群,其管理的物理存儲容量為3PB。
2. 為什么要關注Ceph?
事實上,Ceph并不是一個剛剛出現(xiàn)的開源項目。與此相反,從最初發(fā)布到逐漸流行,Ceph走過了七年以上的漫長路程。筆者以為,之所以應當對Ceph加以了解,其原因大致有兩個方面:
首先,Ceph本身確實具有較為突出的優(yōu)勢。
Ceph值得一提的優(yōu)勢頗多,包括統(tǒng)一存儲能力、可擴展性、可靠性、性能、自動化的維護等等。本質(zhì)上,Ceph的這些優(yōu)勢均來源于其先進的核心設計思想,筆者將其概括為八個字——“無需查表,算算就好”。基于這種設計思想,Ceph充分發(fā)揮存儲設備自身的計算能力,同時消除了對系統(tǒng)單一中心節(jié)點的依賴,從而實現(xiàn)了真正的無中心結構。基于這一設計思想和結構,Ceph一方面實現(xiàn)了高度的可靠性和可擴展性,另一方面保證了客戶端訪問的相對低延遲和高聚合帶寬。通過后續(xù)內(nèi)容的介紹,讀者可以看到,Ceph幾乎所有優(yōu)秀特性的實現(xiàn),都與這個核心設計思想有關。
其次,Ceph目前在OpenStack社區(qū)中備受重視。
OpenStack是目前最為流行的開源云操作系統(tǒng)。而據(jù)筆者觀察,Ceph之所以在近一兩年間熱度驟升,其最為有力的推動因素就是OpenStack社區(qū)的實際需求。目前而言,Ceph已經(jīng)成為OpenStack社區(qū)中呼聲***的開源存儲方案之一,其實際應用主要涉及塊存儲和對象存儲,并且開始向文件系統(tǒng)領域擴展。這一部分的相關情況,在后續(xù)文章中也將進行介紹。
3. Ceph的產(chǎn)生與發(fā)展
通常而言,開源項目的來源有三:一是學校里的大牛作的課題,論文發(fā)夠然后開源;二是企業(yè)里的大牛搞的產(chǎn)品,機緣巧合于是開源;三是某些大牛突然顯靈,然后一票人跟著一起開源。每一類的例子都有不少,而不同起源的開源項目也有著自身的不同特點。具體而言,***類項目的原理和技術上很可能頗有獨到之處,而Ceph就正在此列。相比之下,第二類項目的設計實現(xiàn)很可能頗為成熟,并且在開源之前或者開源初期就獲得生產(chǎn)環(huán)境下的實際部署應用機會。這種出身背景上的因素,對于一個開源項目的后續(xù)發(fā)展很有可能產(chǎn)生影響。
言歸正傳。Ceph項目起源于其創(chuàng)始人Sage Weil在加州大學Santa Cruz分校攻讀博士期間的研究課題。項目的起始時間為2004年。在2006年的OSDI學術會議上,Sage發(fā)表了介紹Ceph的論文,并在該篇論文的末尾提供了Ceph項目的下載鏈接。由此,Ceph開始廣為人知。
Ceph使用C++語言開發(fā)。對于一個典型的強調(diào)性能的系統(tǒng)項目,這一選擇可以理解。
作為開源項目,Ceph遵循LGPL協(xié)議。
根據(jù)Inktank官方網(wǎng)站上的信息,Cpeh的生態(tài)系統(tǒng)參加下圖:
不難看出,圖中列出的廠商或組織帶有明顯的云計算氣息。
隨著Ceph的熱度不斷增加,Sage Weil于 2011年創(chuàng)立了Inktank公司以主導Ceph的開發(fā)和社區(qū)維護。目前,Ceph的發(fā)布周期為三個月。
4. Sage Weil其人其事
在展開后續(xù)的技術討論之前,適度八卦Sage Weil的人生經(jīng)歷實在是很有必要,因為這位兄臺委實是 IT男青年中鳳毛麟角的在工程、研究、創(chuàng)業(yè)三個領域都有涉獵且都頗有建樹的神人。
Sage在工程上的能力自然不必多言,而他發(fā)表Ceph論文的OSDI也是計算機操作系統(tǒng)領域***的***水平學術會議。至于創(chuàng)業(yè)方面,Sage是 DreamHost的聯(lián)合創(chuàng)始人,彼時是1997年,他剛上大學不久。。。有興趣的同學可以去LinkedIn研究一下Sage的個人簡歷,基本上是想工作就工作,想上學就上學,想創(chuàng)業(yè)就創(chuàng)業(yè),想讀博就讀博,隨心所欲,天馬行空,令人油然而生一種表示敬佩的沖動。
#p#
Ceph的設計思想
分析開源項目,時常遇到的一個問題就是資料不足。有時間寫代碼的大牛們通常是都是沒有時間或者根本不屑于寫文檔的。而不多的文檔通常又是使用手冊之類的東西。即便偶爾有設計文檔通常也是語焉不詳。在這種情況下,想從代碼里反向把設計思想提煉出來,畢竟不是人人都能做到的。
值得我們慶幸的是,Ceph是一個典型的起源于學術研究課題的開源項目。雖然學術研究生涯對于Sage而言只是其光輝事跡的短短一篇,但畢竟還是有幾篇學術文獻可供參考。這也為我們提供了難得的,從頂層視角入手分析一個系統(tǒng)領域的優(yōu)秀開源項目的機會。本篇文章的內(nèi)容也正是筆者閱讀這些文獻的心得體會。
1. Ceph針對的目標應用場景
理解Ceph的設計思想,首先還是要了解Sage設計Ceph時所針對的目標應用場景,換言之,“做這東西的目的是啥?”
事實上,Ceph最初針對的目標應用場景,就是大規(guī)模的、分布式的存儲系統(tǒng)。所謂“大規(guī)模”和“分布式”,是指至少能夠承載PB級別的數(shù)據(jù),并且由成千上萬的存儲節(jié)點組成。
在大數(shù)據(jù)口號深入人心的今天,PB已經(jīng)遠遠不是一個激動人心的系統(tǒng)設計目標了。但是,應該指出,Ceph項目起源于04年。那是一個商用處理器以單核為主流,常見硬盤容量只有幾十GB的年代。這和現(xiàn)在動輒6核12線程還要雙處理器、單塊硬盤3TB已經(jīng)司空見慣的情況是不可同日而語的。因此,理解這個設計目標,應該考慮當時的實際情況。當然,如前所述,Ceph的設計并沒有理論上限,所以PB級別并不是實際應用的容量限制。
在Sage的思想中,對于這樣一個大規(guī)模的存儲系統(tǒng),是不能以靜態(tài)的眼光來看待的。對于其動態(tài)特性,筆者概括為如下三個“變化”:
存儲系統(tǒng)規(guī)模的變化:這樣大規(guī)模的存儲系統(tǒng),往往不是在建設的***天就能預料到其最終的規(guī)模,甚至是根本就不存在最終規(guī)模這個概念的。只能是隨著業(yè)務的不斷開展,業(yè)務規(guī)模的不斷擴大,讓系統(tǒng)承載越來越大的數(shù)據(jù)容量。這也就意味系統(tǒng)的規(guī)模自然隨之變化,越來越大。
存儲系統(tǒng)中設備的變化:對于一個由成千上萬個節(jié)點構成的系統(tǒng),其節(jié)點的故障與替換必然是時常出現(xiàn)的情況。而系統(tǒng)一方面要足夠可靠,不能使業(yè)務受到這種頻繁出現(xiàn)的硬件及底層軟件問題的影響,同時還應該盡可能智能化,降低相關維護操作的代價。
存儲系統(tǒng)中數(shù)據(jù)的變化:對于一個大規(guī)模的,通常被應用于互聯(lián)網(wǎng)應用中的存儲系統(tǒng),其中存儲的數(shù)據(jù)的變化也很可能是高度頻繁的。新的數(shù)據(jù)不斷寫入,已有數(shù)據(jù)被更新、移動乃至刪除。這種場景需求也是設計時必須予以考慮的。
上述三個“變化”就是Ceph目標應用場景的關鍵特征。Ceph所具備的各種主要特性,也都是針對這些場景特征所提出的。
2. 針對目標應用場景所提出的預期技術特性
針對上述應用場景,Ceph在設計之初的幾個技術特性是:
高可靠性。所謂“高可靠”,首先是針對存儲在系統(tǒng)中的數(shù)據(jù)而言,也即,盡可能保證數(shù)據(jù)不會丟失。其次,也包括數(shù)據(jù)寫入過程中的可靠性,也即,在用戶將數(shù)據(jù)寫入Ceph存儲系統(tǒng)的過程中,不會因為意外情況的出現(xiàn)造成數(shù)據(jù)丟失。
高度自動化。具體包括了數(shù)據(jù)的自動replication,自動re- balancing,自動failure detection和自動failure recovery。總體而言,這些自動化特性一方面保證了系統(tǒng)的高度可靠,一方面也保障了在系統(tǒng)規(guī)模擴大之后,其運維難度仍能保持在一個相對較低的水平。
高可擴展性。這里的“可擴展”概念比較廣義,既包括了系統(tǒng)規(guī)模和存儲容量的可擴展,也包括了隨著系統(tǒng)節(jié)點數(shù)增加的聚合數(shù)據(jù)訪問帶寬的線性擴展,還包括了基于功能豐富強大的底層API提供多種功能、支持多種應用的功能性可擴展。
3. 針對預期技術特性所提出的設計思路
針對3.2節(jié)中介紹的預期技術特性,Sage對于Ceph的設計思路基本上可以概括為以下兩點:
充分發(fā)揮存儲設備自身的計算能力。事實上,采用具有計算能力的設備(最簡單的例子就是普通的服務器)作為存儲系統(tǒng)的存儲節(jié)點,這種思路即便在當時來看也并不新鮮。但是,Sage認為這些已有系統(tǒng)基本上都只是將這些節(jié)點作為功能簡單的存儲節(jié)點。而如果充分發(fā)揮節(jié)點上的計算能力,則可以實現(xiàn)前面提出的預期特性。這一點成為了Ceph系統(tǒng)設計的核心思想。
去除所有的中心點。一旦系統(tǒng)中出現(xiàn)中心點,則一方面引入單點故障點,另一方面也必然面臨當系統(tǒng)規(guī)模擴大時的規(guī)模和性能瓶頸。除此之外,如果中心點出現(xiàn)在數(shù)據(jù)訪問的關鍵路徑上,事實上也比然導致數(shù)據(jù)訪問的延遲增大。而這些顯然都是Sage所設想的系統(tǒng)中不應該出現(xiàn)的問題。雖然在大多數(shù)系統(tǒng)的工程實踐中,單點故障點和性能瓶頸的問題可以通過為中心點增加備份加以緩解,但Ceph系統(tǒng)最終采用創(chuàng)新的方法更為徹底地解決了這個問題。
4. 支撐設計思路實現(xiàn)的關鍵技術創(chuàng)新
無論多么新穎奇妙的設計思路,最終落地必定需要有技術實力的支撐。而這也正是Ceph最為閃亮的地方。
Ceph最為核心的技術創(chuàng)新就是前面所概括的八個字——“無需查表,算算就好”。一般而言,一個大規(guī)模分布式存儲系統(tǒng),必須要能夠解決兩個最基本的問題:
一是“我應該把數(shù)據(jù)寫入到什么地方”。對于一個存儲系統(tǒng),當用戶提交需要寫入的數(shù)據(jù)時,系統(tǒng)必須迅速決策,為數(shù)據(jù)分配一個存儲位置和空間。這個決策的速度影響到數(shù)據(jù)寫入延遲,而更為重要的是,其決策的合理性也影響著數(shù)據(jù)分布的均勻性。這又會進一步影響存儲單元壽命、數(shù)據(jù)存儲可靠性、數(shù)據(jù)訪問速度等后續(xù)問題。
二是“我之前把數(shù)據(jù)寫到什么地方去了”。對于一個存儲系統(tǒng),高效準確的處理數(shù)據(jù)尋址問題也是基本能力之一。
針對上述兩個問題,傳統(tǒng)的分布式存儲系統(tǒng)常用的解決方案是引入專用的服務器節(jié)點,在其中存儲用于維護數(shù)據(jù)存儲空間映射關系的數(shù)據(jù)結構。在用戶寫入/訪問數(shù)據(jù)時,首先連接這一服務器進行查找操作,待決定/查到數(shù)據(jù)實際存儲位置后,再連接對應節(jié)點進行后續(xù)操作。由此可見,傳統(tǒng)的解決方案一方面容易導致單點故障和性能瓶頸,另一方面也容易導致更長的操作延遲。
針對這一問題,Ceph徹底放棄了基于查表的數(shù)據(jù)尋址方式,而改用基于計算的方式。簡言之,任何一個Ceph存儲系統(tǒng)的客戶端程序,僅僅使用不定期更新的少量本地元數(shù)據(jù),加以簡單計算,就可以根據(jù)一個數(shù)據(jù)的ID決定其存儲位置。對比之后可以看出,這種方式使得傳統(tǒng)解決方案的問題一掃而空。Ceph的幾乎所有優(yōu)秀特性都是基于這種數(shù)據(jù)尋址方式實現(xiàn)的。