OpenStack Swift跨地域存儲集群的部署與優(yōu)化
原創(chuàng)OpenStack Swift,大家會說它是OpenStack的對象存儲服務(wù),或者對象存儲項(xiàng)目,但是實(shí)際上對象存儲這個(gè)詞它的含義,不同的人有不同的理解。
首先,讓我們先看一個(gè)例子,就是淘寶在06、07年的時(shí)候,開始用他們自己研發(fā)的分布式存儲系統(tǒng),或者用現(xiàn)在時(shí)髦的話說叫SDS存儲系統(tǒng),來替代NAS設(shè)備。就以前淘寶的圖片都是放在NAS里面的,但是從06年開始逐步的替換,當(dāng)然很快,現(xiàn)在早已經(jīng)不見了,沒有一臺NAS,負(fù)責(zé)一臺SAN在淘寶的后端里面。中間有一個(gè)數(shù)據(jù),當(dāng)然更新的數(shù)據(jù)在2010年的時(shí)候,淘寶后端的圖片數(shù)量已經(jīng)突破了280億,這個(gè)數(shù)量也是非常巨大的。這也是造成他們?yōu)槭裁匆鎿QNAS一個(gè)很重要的原因,就是因?yàn)閷τ诤A繑?shù)據(jù)存儲,傳統(tǒng)的NAS、傳統(tǒng)的文件系統(tǒng)可能會遇到問題,這是一方面。另一方面,就是他要支持客戶端直接訪問。
也就是說,我們現(xiàn)在隨著互聯(lián)網(wǎng)的發(fā)展、移動互聯(lián)網(wǎng)的發(fā)展,我們的手機(jī),我們的移動互聯(lián)網(wǎng)的發(fā)展,像網(wǎng)頁如果要讀取存儲或者讀取數(shù)據(jù)的話,我們會希望他能夠直接訪問存儲系統(tǒng),而不像再像以前,先通過Http服務(wù),訪問應(yīng)用服務(wù)器或者訪問web前端服務(wù)器,然后web再往后給到應(yīng)用服務(wù)器。應(yīng)用服務(wù)器再往后接到存儲,然后再把數(shù)據(jù)吐出來,現(xiàn)在可能會希望能夠由客戶端直接訪問存儲,這樣的話對整個(gè)存儲系統(tǒng)的并發(fā),一方面是對整個(gè)系統(tǒng)的并發(fā)有一個(gè)非常好的提升。另一方面,也對存儲系統(tǒng)的并發(fā)提出了一個(gè)挑戰(zhàn),當(dāng)然這樣做以后就會大量節(jié)省中間那兩層,web服務(wù)器和應(yīng)用服務(wù)期的開銷,簡化整個(gè)系統(tǒng)的架構(gòu),所以他帶來的好處也是很多的,這就是為什么像淘寶,他會在當(dāng)年用,其實(shí)用現(xiàn)在的話就是SDS或者對象存儲系統(tǒng)來替代當(dāng)初的NAS。
那么淘寶只是一個(gè)例子,其實(shí)在互聯(lián)網(wǎng)公司中,類似的架構(gòu)、類似的技術(shù)在廣泛的得到使用,互聯(lián)網(wǎng)公司是這樣。那對于傳統(tǒng)行業(yè),我們現(xiàn)在所謂的傳統(tǒng)行業(yè),或者我更習(xí)慣說是非互聯(lián)網(wǎng)行業(yè),
而過去將近一年多,將近兩年時(shí)間我所從事的主要工作,就是我把所了解的互聯(lián)網(wǎng)公司里面用到的比較好的技術(shù)推薦或者傳播或者說幫助傳統(tǒng)行業(yè)的非互聯(lián)網(wǎng)產(chǎn)業(yè)的企業(yè)怎么樣應(yīng)用、怎么樣改造他們的IT系統(tǒng)。
以前我們?nèi)ャy行辦卡,需要排幾十分鐘的隊(duì)才能辦到一張卡,或者需要去指定網(wǎng)點(diǎn)才能辦,而現(xiàn)在,比如在招行,進(jìn)去10分鐘,就可以辦一張卡出來。為什么?因?yàn)槲覀儾挥迷俚焦衽_去排隊(duì)了,雖然也要去網(wǎng)點(diǎn),但是也有這樣的一個(gè)機(jī)器,你站在這個(gè)機(jī)器前邊,跟機(jī)器那邊的人對話幾句,然后簽署幾個(gè)電子檔的文件就可以了。然后在他的后端,會把你的這段視頻,實(shí)際上聲音是要單獨(dú)存儲的。因?yàn)槁曃淖R別比視頻識別目前來看,還是要更容易和準(zhǔn)確一些,所以聲音文件是要單獨(dú)存儲的,這是他們的業(yè)務(wù),這是他們的應(yīng)用,那后端的存儲用什么?用以前傳統(tǒng)存儲還行不行,同樣會面對像淘寶面對的兩個(gè)問題,第一個(gè)是數(shù)據(jù)量的激增,以前銀行可以說多長時(shí)間能存滿100T的數(shù)據(jù),,存100T會需要很長時(shí)間的數(shù)據(jù)積累,但是上了這套系統(tǒng)以后,因?yàn)榇罅康囊曨l需要存儲,所以很快這個(gè)存儲容量就會發(fā)生一個(gè)非常大的增長,那以前傳統(tǒng)的存儲架構(gòu)可能會有問題。另外這也是一種客戶端,這個(gè)客戶端,我們也會希望它能夠直接訪問存儲系統(tǒng),還有類似的,像以前我們?nèi)ャy行要復(fù)印一些,現(xiàn)在我們?nèi)チ嗽挘绻k借助卡,可能主要是復(fù)印一個(gè)身份證,但是實(shí)際上銀行有很多貸款業(yè)務(wù),中間有大量的票據(jù)需要復(fù)印、需要存檔,那現(xiàn)在用什么?全都是掃描件,全都是電子檔的數(shù)字圖片存檔。
面對這樣的存儲需求,背后最好的解決方案是什么?
就是我們今天在這里談?wù)摰膶ο蟠鎯Αο蟠鎯Γ部梢越蓄愃朴赟3的存儲,S3—like storgae,它主要有兩個(gè)特征。
- 第一個(gè)是沒有一級一級的文件夾、目錄數(shù)的東西,它是用戶在它的存儲空間只能看到一級,類似于目錄動,叫做桶或者叫做容器。然后它就把對象放到那些桶里面、容器里面,這個(gè)就跟我們使用傳統(tǒng)文件系統(tǒng)一級一級建目錄的方式不一樣。大家知道在亞馬遜的云上面,最早提出的服務(wù),在它的虛機(jī)、云主機(jī)推出之先,最早提供的服務(wù)也是對象存儲。
- 另外一個(gè)特點(diǎn),提供REST API ,也就是說直接能夠HTTP的訪問。這個(gè)是HTTP的接口,它非常簡單,因?yàn)樗荝EStful的,所以他主要通過put、get、Delete、post,四類接口對數(shù)據(jù)進(jìn)行操作。
文件存儲
跟文件存儲非常類似,叫Object Storage。Object Storage是對象,這個(gè)在臺灣那邊給它翻譯為物件存儲,我覺得更準(zhǔn)確一些,他說實(shí)際上這個(gè)Object 就是東西,東西往框里放,就是這樣一個(gè)意思。那Object本質(zhì)上或者從另外一個(gè)角度來說,它就是我們今天說的文件,只不過它的系統(tǒng)這種形態(tài)方面不太一樣。
這個(gè)也涉及到一個(gè)問題,就是這個(gè)東西沒有文件夾,沒有目錄數(shù)了,我們怎么管理數(shù)據(jù)對吧,現(xiàn)在很多人會想到這個(gè)事,他又會有疑慮,就是我的應(yīng)用,以前用的文件夾管理數(shù)據(jù),現(xiàn)在沒有了,怎么管理數(shù)據(jù)?
其實(shí)仔細(xì)想一下,現(xiàn)在在很多場景下文件存儲沒有用到文件夾。這個(gè)聽起來很瘋狂,文件的存儲沒有用到文件夾,其實(shí)大家仔細(xì)想一下,舉一個(gè)非常直接的例子,你知道你手記拍的照片存在哪個(gè)目錄下,文件名是什么嗎?其實(shí)你不知道,但是你用的很好。如果程序員來編程的話,在后端實(shí)現(xiàn)一個(gè)系統(tǒng)的時(shí)候,其實(shí)也是類似的,現(xiàn)在很多地方,都不需要用文件夾來管理數(shù)據(jù)的,不需要用目錄來管理數(shù)據(jù)的。當(dāng)然并不是說這種東西要否定它,只是說我們在遇到某些問題的時(shí)候可以多想一下,像buckets實(shí)現(xiàn),還有像操作系統(tǒng)的實(shí)現(xiàn),它肯定得依賴文件系統(tǒng)。
海量數(shù)據(jù)存儲的場景
大數(shù)據(jù)存儲場景主要包括這兩個(gè),一個(gè)是超大文件存儲,一個(gè)是海量小文件存儲。另外一個(gè)是極高的可靠性與可用性,就是極高的。就是這個(gè)基本上可以很容易做到你的數(shù)據(jù)永遠(yuǎn)不丟失,然后永遠(yuǎn)在線的訪問,這個(gè)對于Swift來說要做到很容易。當(dāng)然必須得做正確,不正確的做法其實(shí)也是很容易出問題的,所以我們強(qiáng)調(diào)運(yùn)維這個(gè)事情。特別是對分布式系統(tǒng)來說,正確的做事情,運(yùn)維在中間基本上,做OpenStack,有一句話叫三分產(chǎn)品、七分運(yùn)維,這個(gè)是很重要的。
由于Swift采用的是全分布式架構(gòu),所以它的擴(kuò)展性非常好,沒有集中節(jié)點(diǎn)。比如說HDFS,包括像淘寶的TFS,其實(shí)還是有NAS接點(diǎn)的,那NAS接點(diǎn)往往就會成為大家關(guān)注瓶頸的關(guān)鍵,這個(gè)在Swift里面是沒有的,所以它的擴(kuò)展性非常好。而且很多存儲系統(tǒng),隨著規(guī)模的擴(kuò)展到一定程度,規(guī)模特別大的時(shí)候,性能可能會下降,或者說衰減的很厲害,但是Swift不會。Swift幾乎在非常大的規(guī)模,仍然做到性能隨著規(guī)模的線性提升。
那么,還有就是目前可以支持糾刪碼,所以分布式存儲三副本或者多副本,不再耗裸存儲容量的事情,其實(shí)在Swift里面目前已經(jīng)是得到解決,
現(xiàn)在在Swift基礎(chǔ)上,做了哪些企業(yè)級用戶比較關(guān)心事情?
- 第一個(gè)是安全性。
- 第二個(gè)是我們除了支持對象結(jié)構(gòu)以外,我們?yōu)榱苏疹櫼郧傲?xí)慣NAS的應(yīng)用,我們也可以支持POSIX兼容的接口。
- 第三個(gè)就是就是支持應(yīng)用開發(fā)。
另外,說到在跨地域的基礎(chǔ)之上,我們其實(shí)還可以提供雙活或者多活的存儲解決方案。所以在我們存儲解決方案里面,針對目前這種企業(yè)級客戶比較關(guān)注的雙活和多活的事情,提供了這種定制化的解決方案。
跨域部署主要是三個(gè)方面:
- 第一個(gè)是在硬件上
- 第二個(gè)就是Ring的創(chuàng)建
- 第三個(gè)是最終一致性的問題





























