韓盛中 王沖 何抗洪
摘要:在互聯(lián)網(wǎng)日益發(fā)展的當(dāng)下,每天都產(chǎn)生大量的數(shù)據(jù)。據(jù)IDC統(tǒng)計(jì)預(yù)測,到2020年,全球的數(shù)據(jù)總量將達(dá)到44ZB,其中75%是非結(jié)構(gòu)化數(shù)據(jù)。各個(gè)產(chǎn)業(yè)都面臨著大規(guī)模的數(shù)字化轉(zhuǎn)型,產(chǎn)生的數(shù)據(jù)量非常巨大。因此對于海量數(shù)據(jù)的管理、治理、移動、分析有迫切的需求,因此分布式對象存儲系統(tǒng)孕育而生。對于文檔、圖片、視頻以及備份歸檔文件,都可以統(tǒng)一存放在對象存儲系統(tǒng)中。對象存儲系統(tǒng)保證了數(shù)據(jù)可靠性、高可用性、安全性,提供了高并發(fā)低時(shí)延的訪問。與傳統(tǒng)的NAS存儲相比,對象存儲提供了RESTOVERHTTP(s)的接口,方便用戶在互聯(lián)網(wǎng)環(huán)境下訪問。
關(guān)鍵詞:互聯(lián)網(wǎng);海量;對象存儲;REST
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2017)13-0034-02
當(dāng)前各類企業(yè)特別是中小企業(yè)面臨的數(shù)據(jù)存儲的痛點(diǎn)有哪些?首先老的存儲框架,無論是本地磁盤、SAN還是NAS都面臨擴(kuò)容難的問題,日益龐大的數(shù)據(jù)量越來越得不到滿足;其次老的存儲環(huán)境中,數(shù)據(jù)是死的,不能方便地移動,靈活性比較差;還有各個(gè)業(yè)務(wù)需要獨(dú)立的申請存儲環(huán)境,如果公用存儲環(huán)境,又很難做到相互間的隔離;最后,傳統(tǒng)的存儲基于的文件系統(tǒng)由于元數(shù)據(jù)和目錄樹管理比較復(fù)雜,不適合處理海量的數(shù)據(jù)的存取。
分布式對象存儲針對現(xiàn)有的痛點(diǎn),基于軟件定義的存儲,重新設(shè)計(jì)了存儲的架構(gòu),對于海量小文件進(jìn)行了聚合處理,對于大文件進(jìn)行了分塊處理,在系統(tǒng)設(shè)計(jì)時(shí)主要著眼于、數(shù)據(jù)可靠性、安全性、易用性、擴(kuò)展性以及高可用性進(jìn)行了設(shè)計(jì)。
業(yè)界很多流行的分布式存儲,比如Ceph、GlusterFS、HDFS,處理小文件的性能都差強(qiáng)人意,而TFS在處理大文件方面做的又有欠缺。因此需要設(shè)計(jì)一種統(tǒng)一存儲,滿足各種文件類型。
1整體架構(gòu)設(shè)計(jì)
如圖1所示,對象存儲系統(tǒng)可以由主控集群、數(shù)據(jù)存儲集群、賬號管理集群、桶資源管理集群、元數(shù)據(jù)管理集群、反向代理、緩存、回收、災(zāi)備幾個(gè)模塊組成。
其中主控集群負(fù)責(zé)所有其他模塊的在線狀態(tài)管理,其他模塊各個(gè)節(jié)點(diǎn)會定期地給主控集群上報(bào)狀態(tài)。主控集群通過zab或者raft選舉leader節(jié)點(diǎn),主控集群中非leader節(jié)點(diǎn)作為代理,可以轉(zhuǎn)發(fā)其他模塊的請求給leader節(jié)點(diǎn)。
數(shù)據(jù)存儲集群負(fù)責(zé)數(shù)據(jù)的到磁盤的讀寫,可以基于XFS或者EXT4文件系統(tǒng)。節(jié)點(diǎn)和磁盤的選擇由主控節(jié)點(diǎn)隨機(jī)分配。存儲集群通過多副本或者糾刪碼的方式保證數(shù)據(jù)的可靠性。通常對小文件或者讀性能要求較高的業(yè)務(wù)適用于多副本,對長期歸檔并且很少去訪問的冷數(shù)據(jù)適用于糾刪碼。
元數(shù)據(jù)管理集群,負(fù)責(zé)將元數(shù)據(jù)保存到數(shù)據(jù)庫。由于單個(gè)數(shù)據(jù)庫的容量和新能存在瓶頸,因此對象存儲中的元數(shù)據(jù)必須設(shè)計(jì)成分庫分表分節(jié)點(diǎn)的方式存儲管理元數(shù)據(jù),每個(gè)數(shù)據(jù)庫都成對出現(xiàn),保證元數(shù)據(jù)的高可靠性。
賬戶管理集群負(fù)責(zé)管理對象存儲所有的賬戶信息,每個(gè)業(yè)務(wù)系統(tǒng)接入對象存儲,都會申請對應(yīng)的賬號,每個(gè)賬號都會分配對應(yīng)的公鑰和私鑰。
桶資源管理集群負(fù)責(zé)管理每個(gè)賬號的桶資源,用戶的每個(gè)桶相當(dāng)于一個(gè)資源池,會有單獨(dú)的流量和統(tǒng)計(jì),每個(gè)桶之間是隔離的。如果桶設(shè)置為私有的,每個(gè)賬號必須有公鑰/秘鑰產(chǎn)生簽名后在能上傳/下載桶內(nèi)的文件資源。
緩存模塊也是一組分布式緩存集群,用來保存一些臨時(shí)文件和緩存信息。
回收模塊用來掃描系統(tǒng)中的過期文件,如果過期則會逐一清理。
災(zāi)備模塊負(fù)責(zé)主機(jī)房向備用機(jī)房的準(zhǔn)實(shí)時(shí)災(zāi)備。
圖片處理模塊可以將存儲在對象存儲中各種格式的圖片進(jìn)行處理,包括JPEG、PNG、bmp、webp、gif和tiff等格式圖片的格式轉(zhuǎn)換、縮放、裁剪、水印、拼圖、銳化等操作。
視頻處理模塊可以協(xié)助用戶進(jìn)行視頻文件的處理,比如視頻轉(zhuǎn)碼、截圖等功能。目前支持H.264和H.265格式的轉(zhuǎn)碼。
2小文件聚合方案
傳統(tǒng)的文件系統(tǒng)由于需要維護(hù)大量的元數(shù)據(jù)信息,導(dǎo)致對磁盤的10利用率不高,從而讀取小文件性能較差。SDOSS針對海量小文件的應(yīng)用場景做了優(yōu)化。
傳統(tǒng)文件系統(tǒng)讀文件分成3個(gè)步驟:1)讀取目錄元數(shù)據(jù)dentry到內(nèi)存;21讀取文件inode到內(nèi)存;3)讀取文件實(shí)際內(nèi)容。
其中,1、2兩步需要對磁盤進(jìn)行元數(shù)據(jù)操作,由于文件數(shù)太多的情況下,無法將所有元數(shù)據(jù)信息緩存到內(nèi)存。
對象存儲系統(tǒng)在小文件存儲方面做了優(yōu)化,借鑒Facebook的Haystack的系統(tǒng),設(shè)計(jì)了小文件聚合方案,元數(shù)據(jù)的訪問頻次減少了2/3,有效的提高的磁盤的訪問效率,從而提升了小文件的讀性能。
如圖2所示,對象存儲采用小文件聚合的方案,將每個(gè)文件的元數(shù)據(jù)信息提取處理順序存放在索引文件,并且加載到內(nèi)存中。文件讀取時(shí),通過info信息可以找到對應(yīng)的file數(shù)據(jù)信息。
在上傳一個(gè)新文件時(shí),對于數(shù)據(jù)文件和索引是一個(gè)追加寫的過程。刪文件時(shí),刪除索引文件中的記錄,并置空數(shù)據(jù)文件,追加寫入卷數(shù)據(jù)文件與卷索引文件(寫一段相同fileid且大小為0的needle數(shù)據(jù)),由之后垃圾回收線程回收。存儲服務(wù)重啟,索引文件全部加載到內(nèi)存。
3大文件分塊方案
本系統(tǒng)的目標(biāo)是一個(gè)通用的統(tǒng)一存儲,大文件和小文件的區(qū)別是:大文件對帶寬有更高的要求,大量的數(shù)據(jù)傳輸往往會造成網(wǎng)絡(luò)流量大,往往讀寫一個(gè)大文件就能造成某個(gè)服務(wù)器節(jié)點(diǎn)的網(wǎng)口爆滿,造成網(wǎng)絡(luò)擁塞。對于大文件,通常的設(shè)計(jì)思路是分塊上傳。
使用大文件分塊,提高了磁盤和節(jié)點(diǎn)的并發(fā)性(防止某一個(gè)文件的讀寫集中在一個(gè)節(jié)點(diǎn)或者一塊磁盤上),從而提升了整體的讀寫性能。用戶上傳一個(gè)10GB文件,可以按照一定的大小將文件分塊(一般可以設(shè)置1MB-64MB),每個(gè)chunk文件均勻的散列在各個(gè)服務(wù)器的磁盤上,讀寫改文件網(wǎng)絡(luò)和磁盤10都可以均勻散列開。每個(gè)chunk文件都是多副本,保證數(shù)據(jù)可靠性。
4元數(shù)據(jù)管理策略
海量數(shù)據(jù)的元數(shù)據(jù)信息管理成本極高,如果采用GFS的方式,勢必造成元數(shù)據(jù)服務(wù)器的單點(diǎn)問題;如果使用GlusterFs的無元數(shù)據(jù)管理的方式,無法滿足對象存儲豐富元數(shù)據(jù)的訴求。本系統(tǒng)元數(shù)據(jù)信息包括文件元數(shù)據(jù)、桶資源元數(shù)據(jù)、賬號元數(shù)據(jù)。各類元數(shù)據(jù)信息以分庫分表的形式散列在各模塊的數(shù)據(jù)庫中。
元數(shù)據(jù)管理可以用數(shù)據(jù)庫管理,分散在不同的元數(shù)據(jù)服務(wù)器上,避免了單點(diǎn)造成的性能瓶頸。隨著全行業(yè)的數(shù)字化轉(zhuǎn)型,對象存儲對于用戶而言,不僅僅是提供了一個(gè)存儲的環(huán)境,更是為用戶提供了一個(gè)數(shù)據(jù)管理的平臺,其中包括數(shù)據(jù)的治理和分析。用戶在上傳文件的過程中可以帶上自己業(yè)務(wù)的標(biāo)簽,即用戶自定義的元數(shù)據(jù)信息。對象存儲可以通過這些元數(shù)據(jù)信息,協(xié)助業(yè)務(wù)進(jìn)行系統(tǒng)行為和用戶行為的分析。
5跨機(jī)房災(zāi)備
容災(zāi)備份是指通過技術(shù)和管理的途徑,確保在災(zāi)難發(fā)生后,用戶關(guān)鍵數(shù)據(jù)、數(shù)據(jù)處理系統(tǒng)和業(yè)務(wù)在短時(shí)間內(nèi)能夠恢復(fù)。存儲系統(tǒng)在高可靠高可用的基礎(chǔ)上,設(shè)計(jì)異地災(zāi)備滿足更高級別的數(shù)據(jù)安全性。
本系統(tǒng)支持兩個(gè)異地機(jī)房之間的數(shù)據(jù)同步備份,主機(jī)房準(zhǔn)實(shí)時(shí)的向備用機(jī)房進(jìn)行數(shù)據(jù)同步。當(dāng)主用機(jī)房發(fā)生災(zāi)難時(shí),備用機(jī)房可以在短時(shí)間內(nèi)完成接管。
6數(shù)據(jù)處理
數(shù)據(jù)處理是對象存儲給用戶提供的增值服務(wù),包括圖片處理、視頻處理、數(shù)據(jù)分析。
其中圖片處理模塊可以基于ImageMagick等開源軟件開發(fā),視頻處理可以基于FFmepeg等開源軟件開發(fā)。圖片處理和視頻處理都是獨(dú)立的高可用模塊,將下載的文件流按照用戶指定的參數(shù)進(jìn)行圖像和視頻處理。
數(shù)據(jù)分析模塊可以基于Pentaho等開源數(shù)據(jù)分析軟件開發(fā),數(shù)據(jù)本身的價(jià)值是有限的,只有充分利用數(shù)據(jù),挖掘數(shù)據(jù)的潛在價(jià)值,才能真正地為互聯(lián)網(wǎng)商業(yè)模式提供基礎(chǔ)支撐,才能為數(shù)字化轉(zhuǎn)型提供有效的保障。
7總結(jié)
分布式對象存儲有效地解決了互聯(lián)網(wǎng)模式下的用戶需求:在保證高效可靠存儲的同時(shí),提供豐富的數(shù)據(jù)處理和分析能力。隨著全球數(shù)據(jù)量的日益增大,對于對象存儲技術(shù)本身來說也將面臨巨大的挑戰(zhàn),只有牢牢地把握用戶的需求,從專業(yè)的角度去分析和解決問題,才能設(shè)計(jì)出優(yōu)秀的存儲系統(tǒng)。