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