探究雅虎百億億次計算級別的 Ceph 存儲
像Yahoo、Facebook這樣的企業(yè)都需要存儲數(shù)億級的用戶圖片,他們都在為實現(xiàn)這個目標而努力,Yahoo將非結(jié)構(gòu)數(shù)據(jù)的MObStor對象存儲系統(tǒng)轉(zhuǎn)移到了Ceph上,并且正在部署***的基于Ceph的系統(tǒng)—云對象存儲,Yahoo在數(shù)百個PB級規(guī)模上操作,顯然已經(jīng)是業(yè)內(nèi)老大。
任何超級巨頭們都不會等待IT產(chǎn)業(yè)技術的自我更新,來滿足自己應用的需求,但是當一個可替代的開源項目成長足夠成熟,巨頭們通常會從自己的軟件到其他棧上做跨越式部署。從雅虎的門戶網(wǎng)站上我們可以清晰的看到,Yahoo的重心從自己研發(fā)的對象存儲轉(zhuǎn)移到了即將成為exascale級別的系統(tǒng),這個系統(tǒng)基于開源項目Ceph,一種Swiss army knife的存儲。
這樣的跨越并不常見,因為這些超級公司更傾向去超越技術規(guī)模的限制,不論是他們自己的技術還是開源項目,當然通常是開源項目。但這種情況確實存在。比如說這周早些時候談到的平臺,媒體巨頭Netflix,它一直使用Cassandra NoSQL 數(shù)據(jù)庫的一個自定義版本來作為控制流媒體服務和用戶交互的后端,去年秋天,它將端口從DataStax轉(zhuǎn)移到Cassandra的商業(yè)級別的 variant上。而Yahoo正在進行一次更大的跨越,他們將自己研發(fā)的用于非結(jié)構(gòu)數(shù)據(jù)的MObStor對象存儲系統(tǒng)轉(zhuǎn)移到了Ceph上,Yahoo的架構(gòu)副總監(jiān)說,他們這次的變化是經(jīng)過慎重考慮的。
所有的信息技術都從cat圖片開始
雅虎是對象存儲領域規(guī)模上的創(chuàng)新者,就如同F(xiàn)acebook和他的Haystack系統(tǒng),Amazon和他的S3系統(tǒng),Mosso Cloud Files系統(tǒng)曾經(jīng)是Rackspace Hosting的Swift對象存儲的基礎,而現(xiàn)在已成為OpenStack云控制器的一部分。Yahoo和Facebook都要存儲數(shù)億級別的用戶圖片,處理PB級別的容量,這就迫使他們開發(fā)自己的系統(tǒng),實現(xiàn)更高效的圖片存儲功能,亞馬遜和Rackspace假設,創(chuàng)建云應用的用戶同樣希望將豐富的媒體嵌入到圖片上,所以他們想將對象存儲變成他們公有云的一部分。
上面提到的所有對象存儲系統(tǒng),Haystack、 MObStor、 S3、Cloud Files/Swift, 他們被開發(fā)都是因為文件系統(tǒng)中常規(guī)存儲陣列都存在非常大系統(tǒng)開銷,這是因為用來跟蹤對象的元數(shù)據(jù)存在于集群中。對象存儲剛好忽略了文件系統(tǒng),并將所有數(shù)據(jù)放在同一個bucket里,然后使用一個key,比如文件名或web的地址,在集群中找到該數(shù)據(jù)。這樣可以使元數(shù)據(jù)的開銷更小,因為沒有文件系統(tǒng)與之抗衡。
十幾年前,早期的雅虎圖片服務器是由一個特殊的存儲系統(tǒng)來處理非結(jié)構(gòu)數(shù)據(jù),其之后是一個由Yahoo開發(fā),被稱為MObStor的系統(tǒng),它是一個用起來更加復雜、更具有普遍性的對象存儲系統(tǒng),Yahoo于2009年的夏天***公開提及MObStor。2005年,雅虎的圖片分享網(wǎng)站Flickr急需一種類似于對象存儲的技術,然而當時MObStor被雅虎應用程序用來儲存JavaScript和HTML代碼以及富媒體,在2010年夏天,雅虎的工程師更新了MObStor,這在當時非常先進,這也是在六個月內(nèi)系統(tǒng)的處理能力增長了4X(倍)的一個因素。當Yahoo揭露MObSto的時候,它仍在運作,而且運行在專用系統(tǒng)Direct Object Repository Architecture (DORA)上,DORA是針對MObStor的一個新后端,被稱作是一個集群對象存儲系統(tǒng),它在很多方面與Ceph非常相似。MObStor是DORA 后端系統(tǒng)的接口,Yahoo的程序員寫這個系統(tǒng)是因為他們需要存儲非結(jié)構(gòu)性內(nèi)容,比如照片、視頻和其他類似的數(shù)據(jù)。DORA是運行在普通硬件和存儲應用上的,雅虎當時還不太明確這些意味著什么,但是DORA后端特點允許Yahoo在更廉價的系統(tǒng)上做對象存儲,這也就說明了一切。
我們將在數(shù)百個PB級規(guī)模上操作,我不知道其他Ceph社區(qū)是否還會這樣做。如果我們不是***的,那么我們就會成為***的產(chǎn)品用戶,而且我們很可能會去尋找適合我們規(guī)模的版本。你只需要看雅虎這個規(guī)模的數(shù)據(jù),不用看傳統(tǒng)的那些。
經(jīng)過一些改進,McMillen說貫穿Yahoo所有的服務和中心數(shù)據(jù),如果將對象、塊和文件存儲疊加在一起,這將是一個exabyte級別的存儲。在發(fā)布過的一篇微博中說到,Yahoo從MObStor遷移到Ceph上是因為Flickr上的照片分享服務,公司說那有250億個對象,將近500PB的照片、視頻、郵件和博客帖子。這些都是為用戶存儲的,并且存儲量仍以每年百分之20-25速度增長。
根據(jù)McMillen所述,MObStor具有“完整特性”,它廣泛部署于雅虎。那么如果MObStor真的被廣泛應用和被看好,為什么Yahoo卻熱衷于一個新的技術了?不管怎樣這些都涉及到了錢。
首先,MObStor是一個閉源項目,這意味著雅虎不得不獨立完成創(chuàng)建、擴展和所有支撐工具。與之對應的是Yahoo所創(chuàng)的Hadoop數(shù)據(jù)分析平臺,這是一個開源項目,在這個平臺有一群資深的工程師,他們在不斷改進平臺上的所有的layer,這體現(xiàn)出了社區(qū)的價值。
"我想說,轉(zhuǎn)向Ceph的最主要是因為我們僅僅想降低存儲費用",McMillen解釋,"我們的存儲已經(jīng)增長了許多,我們在盡可能得縮減成本,盡可能得擁有更多的選擇,而不是堅守著一個系統(tǒng),一種技術或一種硬件架構(gòu)。
原始的MObStor對象存儲是運行在存儲陣列上,存儲陣列上有動態(tài)保護RAID數(shù)據(jù),保證了文件安全。隨著DORA的使用,雅虎增加了選項,用來復制存儲集群中陣列之間的數(shù)據(jù)。RAID和復制帶來了一個很大的開銷,而 McMillen卻不愿意透漏出任何有關MObStor與Ceph在這個方面對比的詳細信息。但他卻說過,對傳統(tǒng)對象存儲系統(tǒng)的檢查發(fā)現(xiàn),這個開銷對三路復制來說為200%,伴隨著糾刪碼技術運用到Ceph及其他的對象存儲,能將開銷降低到40-60%,這些能在雅虎安裝調(diào)試Ceph中看到,McMillen說最接近的40%的開銷在糾刪碼保護校驗來確定數(shù)據(jù)的原始性。這個意味著雅虎在Ceph上存儲容量的開銷是用傳統(tǒng)對象存儲的一半,而且還是三副本。
MObStor/DORA不支持糾刪碼,雅虎不得不將這個移植到該系統(tǒng)上,這可意味著大量的開發(fā)和測試的工作量的產(chǎn)生。另一方面Ceph是一個 exascale級部署設計,它有糾刪碼技術以確保數(shù)據(jù)的內(nèi)建。(有了糾刪碼,少量無結(jié)構(gòu)數(shù)據(jù)碎片和分散存儲,或者如果一部分丟失,糾刪碼算法可以重建丟失數(shù)據(jù))
#p#
云對象存儲
雅虎正在部署***的基于Ceph的系統(tǒng),它被稱為云對象存儲,從去年秋天開始,它已經(jīng)被雅虎stack的Flickr部門試驗。Flickr在管理上有“多PB級別”的Ceph容量,在本年度雅虎計劃增加10個基數(shù)來達到“輕量過百PB級別”,據(jù)McMillen所說,當推出基于Ceph的云對象存儲,將其隸屬于Flickr、雅虎郵箱、Tumblr(輕量博客)。(McMillen說Flickr會有更多的存儲量,其中的一分部還會在MObstor中保留一段時間)
雅虎也曾經(jīng)關注過swift和Gluster文件系統(tǒng),還有那些為尋找新的對象存儲系統(tǒng)的特有選擇,最終他們將注意力放在了Ceph上。首先,McMillen說Ceph有吸引力的地方是將支持對象和塊存儲兩者于一身,如果Ceph社區(qū)永遠如此高效處理問題,在未來某一天(很有希望)Ceph同樣支持文件系統(tǒng)存儲。
“并不是所有雅虎的存儲都適合對象存儲,但是很多卻適合”,McMillen說到,“我們正在使用塊存儲,但是他們卻沒有對象存儲走的遠。我們非常喜歡Ceph,除了它因糾刪碼而產(chǎn)生的低成本和它是一個開源項目,在開發(fā)者的社區(qū)發(fā)展非常迅速外,還因為它是一個同時具有塊存儲和對象存儲能力的單一存儲系統(tǒng)。所以代替塊、對象分開的存儲系統(tǒng),我們可以靈活掌握一種技術棧而獲得兩種使用方法。而且如果Ceph有一個穩(wěn)定的文件系統(tǒng),我們今天絕對會使用它。”
Ceph社區(qū)(后臺是Red Hat,其已經(jīng)在一年前以175 百萬獲得Ceph管理Inktank)仍在專注它 。
McMillen說,當Ceph可以從單個集群擴展到exabyte級存儲系統(tǒng),雅虎將Ceph應用于pod架構(gòu),這會比一個單一集群具有更好的性能預測性和錯誤隔離性,效果如下:
在雅虎云對象存儲上,每一個節(jié)點(被稱作一個對象存儲設備),有60TB的存儲,這都是基于X86的服務器。雅虎已經(jīng)嘗試過每個節(jié)點配置12-72個設備,對于COS服務,Yahoo沒有透露其硬件配置。每個集群有54個這樣的節(jié)點,總?cè)萘靠蛇_3.2 pb。為了向外擴展這些服務,雅虎復制pods并使用哈希算法來打破利用糾刪碼橫跨pods和節(jié)點的無結(jié)構(gòu)數(shù)據(jù)。
依賴這些應用,雅虎正在使用常規(guī)的硬件驅(qū)動和磁盤,他們使用的是shingled magnetic recording (SMR)技術,在容量和花費上都不同;SSDs也被部署到了COS服務來提供更高的I/O率。
雅虎正在Ceph的variant上使用8/3糾刪碼,這說明8份中的3份共享對象的服務或者驅(qū)動可以失敗卻仍然可以訪問的到。這是常規(guī)級別的糾刪碼在Ceph上應用的。但是雅虎已經(jīng)計劃了一個針對Ceph的11/3糾刪碼variant,這意味著11個中的3個驅(qū)動或者服務可以失敗,更重要的是這個可以減少40%的讀寫延遲。(根據(jù)McMillen的說法,雅虎計劃把這項改進回饋給Ceph社區(qū),通過這個方法,它能讓自己參與到“Hummer” 代碼稀釋中)公司已經(jīng)做出了一系列調(diào)整來使Ceph表現(xiàn)出更好的性能,如下圖:
#p#
加入了糾刪碼的更改,雅虎已經(jīng)想出一個共享bucket索引的方法,那就是一個索引保持跟蹤對象存儲到一個bucket(這是針對對象存儲容量單位的亞馬遜術語)正常Ceph是在一個單一的服務器節(jié)點上實現(xiàn)bucket索引,但是雅虎的工程師為了高可用性和性能方面的改進,已經(jīng)解決了如何切分和跨節(jié)點傳播。當有磁盤或服務器失效,數(shù)據(jù)恢復完成,雅虎想出一個在恢復數(shù)據(jù)時將延遲的速率限制到60%的方法。
與此同時,雅虎自支持Ceph的實現(xiàn),但是McMillen說公司與RehHat關系非常好,而且也不反對使用RedHat做一些技術支持。但是雅虎正處于一個大量消耗的時期,而這與超大規(guī)模Ceph有關,也許自支持是他們現(xiàn)在唯一的選擇。
“我們將在數(shù)百個PB級規(guī)模上操作,我不知道其他Ceph社區(qū)是否還會這樣做”,McMillen說。“如果我們不是***的,那么我們就會成為***的產(chǎn)品用戶,而且我們很可能會去尋找適合我們規(guī)模的版本。你只需要看雅虎這個規(guī)模的數(shù)據(jù),不用看傳統(tǒng)級別。我們正致力于解決所有這些問題,我相信社區(qū)會從中受益。