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