王昱彬 江蘇有線網(wǎng)絡(luò)發(fā)展有限責(zé)任公司吳江分公司
隨著信息化和網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,互聯(lián)網(wǎng)上的信息越來越呈現(xiàn)出多樣性和關(guān)聯(lián)性,存儲(chǔ)平臺(tái)需要處理的數(shù)據(jù)不再是簡(jiǎn)單的文本、圖像等數(shù)據(jù),可能是一段短視頻、一個(gè)表情、一段語音等各種多媒體的信息,并且這些信息之間可能存在關(guān)聯(lián)性。例如:一條轉(zhuǎn)發(fā)的微信公眾號(hào)消息,就包含了標(biāo)題、文本、圖片、GIF動(dòng)畫、視頻、評(píng)論和回復(fù)等要素。因此,對(duì)于存儲(chǔ)平臺(tái)來說,不僅要能夠存儲(chǔ)這些數(shù)據(jù)本身,還要能夠?qū)ο嚓P(guān)的信息集合進(jìn)行關(guān)聯(lián)。
為解決這些巨量、非結(jié)構(gòu)化和相互關(guān)聯(lián)的數(shù)據(jù)存儲(chǔ)及管理問題,需要構(gòu)建一個(gè)統(tǒng)一的、非結(jié)構(gòu)化的云存儲(chǔ)平臺(tái)。該平臺(tái)可以實(shí)現(xiàn)統(tǒng)一的對(duì)外存儲(chǔ)接口,實(shí)現(xiàn)高效率的數(shù)據(jù)存儲(chǔ),并且便于對(duì)存儲(chǔ)數(shù)據(jù)的訪問應(yīng)用。
根據(jù)我公司對(duì)存儲(chǔ)業(yè)務(wù)的需求,對(duì)云存儲(chǔ)平臺(tái)有以下需求:
(1)支持大量非結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ);
(2)設(shè)計(jì)統(tǒng)一的存儲(chǔ)服務(wù),兼容公司原有存儲(chǔ)方式;
(3)兼顧經(jīng)濟(jì)性和實(shí)用性。
我們對(duì)目前的幾種存儲(chǔ)方案進(jìn)行了比較:
(1)傳統(tǒng)文件系統(tǒng)和存儲(chǔ)介質(zhì)
是一種簡(jiǎn)單直接的存儲(chǔ)方式,直接依賴于計(jì)算機(jī)操作系統(tǒng)的文件系統(tǒng),因?yàn)闆]有附加的軟件,門檻比較低,不需要專業(yè)的維護(hù)人員。缺點(diǎn)是數(shù)據(jù)的索引難、數(shù)據(jù)的安全性、完整性、備份等問題都很困難?,F(xiàn)在有些單位會(huì)將數(shù)據(jù)備份在大容量藍(lán)光盤等存儲(chǔ)設(shè)備中,這種方式管理起來不太靈活,需要調(diào)取數(shù)據(jù)的時(shí)候流程復(fù)雜,難以控制,容易出現(xiàn)操作風(fēng)險(xiǎn)。
(2)關(guān)系型分布式數(shù)據(jù)庫(kù)系統(tǒng)
這是一種關(guān)系型數(shù)據(jù)庫(kù)與分布式技術(shù)結(jié)合的存儲(chǔ)方式。從物理上看,數(shù)據(jù)存儲(chǔ)是分布在不同地方的存儲(chǔ)單元,但是邏輯上是一套系統(tǒng),通過設(shè)置一定冗余,提高了系統(tǒng)整體可靠性和性能。這種系統(tǒng)經(jīng)過多年商業(yè)使用,已經(jīng)被證明十分可靠,廣泛使用在銀行等大型系統(tǒng)中。這類系統(tǒng)對(duì)技術(shù)人員要求很高,需要一支專業(yè)團(tuán)隊(duì)來維護(hù)。在信息爆炸的時(shí)代,大量的非結(jié)構(gòu)化數(shù)據(jù)的出現(xiàn),特別是達(dá)到PB級(jí)后,這種類型的數(shù)據(jù)庫(kù)在實(shí)際應(yīng)用中也出現(xiàn)了一系列問題。
(3)非結(jié)構(gòu)化云存儲(chǔ)技術(shù)
對(duì)于目前非結(jié)構(gòu)化數(shù)據(jù)大量增長(zhǎng)的情況,國(guó)內(nèi)外出現(xiàn)大量的對(duì)這種類型數(shù)據(jù)進(jìn)行存儲(chǔ)技術(shù)的研究開發(fā),尋找能夠有效管理海量非結(jié)構(gòu)化數(shù)據(jù)的解決方案。相對(duì)于關(guān)系型數(shù)據(jù)庫(kù)模型的較為統(tǒng)一,非結(jié)構(gòu)化的數(shù)據(jù)模型目前還是呈現(xiàn)“五花八門”的形態(tài),沒有一款主流的模型出現(xiàn)。
本文根據(jù)目前有線網(wǎng)絡(luò)公司在運(yùn)營(yíng)過程中非結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)需求,嘗試探索與本公司實(shí)際要求相適應(yīng)的云存儲(chǔ)技術(shù)解決方案。
(1)分布式文件系統(tǒng)
① HDFS:通常來說HDFS可以支持分割操作,所以可支持很大的數(shù)據(jù)文件,分塊后的數(shù)據(jù)塊會(huì)存在備份,其備份和分布式特點(diǎn),保障了數(shù)據(jù)的安全和訪問的效率。HDFS的設(shè)計(jì)是元數(shù)據(jù)存儲(chǔ)在NameNode內(nèi)存中,有限的尋址能力導(dǎo)致其不適合存儲(chǔ)海量的小文件。
② FastDFS:相比HDFS來說更加輕量級(jí),F(xiàn)astDFS更適用于中小型數(shù)據(jù)文件的存儲(chǔ)管理。FastDFS支持冗余備份,但簡(jiǎn)化了存儲(chǔ)和備份的機(jī)制,取消分塊,元數(shù)據(jù)由文件名存儲(chǔ),系統(tǒng)體量小。
(2)非結(jié)構(gòu)化數(shù)據(jù)庫(kù)
① HBase:由于面向的是海量的非結(jié)構(gòu)化數(shù)據(jù),所以最好能夠采用分布式云存儲(chǔ)技術(shù),而且由于公司體量的限制,希望采用相對(duì)比較低廉的價(jià)格維護(hù)更多的數(shù)據(jù),因?yàn)锳pache的HBase分布式數(shù)據(jù)庫(kù)特點(diǎn)和這次設(shè)計(jì)的需求較為符合,所以在非結(jié)構(gòu)化數(shù)據(jù)庫(kù)中選擇了HBase。
(3)其他數(shù)據(jù)庫(kù)
① Oracle:公司原有的重要系統(tǒng)數(shù)據(jù)庫(kù)以O(shè)racle為主,所以存儲(chǔ)平臺(tái)需要兼容原有的系統(tǒng)。
② XmlDB:專門用來存儲(chǔ)結(jié)構(gòu)化xml的高性能數(shù)據(jù)庫(kù)。
云存儲(chǔ)系統(tǒng)主要包含四個(gè)部分。云存儲(chǔ)平臺(tái)架構(gòu)如圖1所示。
(1)服務(wù)端的服務(wù)調(diào)度器和服務(wù)節(jié)點(diǎn),用于向客戶端提供數(shù)據(jù)服務(wù)。
(2)由于對(duì)外采用分布式架構(gòu)提供服務(wù),所以采用分布式協(xié)調(diào)器zookeeper來進(jìn)行服務(wù)的協(xié)調(diào)。
(3)服務(wù)端與MapReduce計(jì)算集群進(jìn)行對(duì)接,系統(tǒng)可獲得很強(qiáng)的計(jì)算和數(shù)據(jù)處理能力。
(4)在整個(gè)系統(tǒng)的底層,是文件系統(tǒng)和數(shù)據(jù)庫(kù)集群,包含:HDFS和FastDFS兩種分布式文件系統(tǒng)、HBase分布式數(shù)據(jù)庫(kù)、Oracle數(shù)據(jù)庫(kù)集群、DocumentDB集群、XmlDB集群等。
由于通過統(tǒng)一的服務(wù)端向客戶端提供服務(wù),對(duì)于用戶來說,只需連接服務(wù)節(jié)點(diǎn)就可以提交數(shù)據(jù)的處理任務(wù),并不需要考慮底層的文件系統(tǒng)和數(shù)據(jù)庫(kù)的異構(gòu)存儲(chǔ)實(shí)現(xiàn)。而對(duì)于底層的數(shù)據(jù)存儲(chǔ)來說,我們也設(shè)計(jì)了統(tǒng)一的存儲(chǔ)結(jié)構(gòu),對(duì)數(shù)據(jù)進(jìn)行落地存儲(chǔ)。
統(tǒng)一的存儲(chǔ)管理包含二進(jìn)制數(shù)據(jù)的管理、數(shù)據(jù)對(duì)象的管理兩方面的功能。
(1)二進(jìn)制數(shù)據(jù)管理
二進(jìn)制數(shù)據(jù)管理分為元數(shù)據(jù)和一般二進(jìn)制文件兩個(gè)部分。元數(shù)據(jù)是描述數(shù)據(jù)本身信息的數(shù)據(jù),例如:數(shù)據(jù)的類型、大小、更新時(shí)間、特征和屬性等,對(duì)于數(shù)據(jù)的查詢、更新以及索引、分析都有很重要的意義,通常以表的形式來存儲(chǔ),我們將系統(tǒng)元數(shù)據(jù)統(tǒng)一存儲(chǔ)到HBase中。我們?cè)谝话愣M(jìn)制文件的上載服務(wù)中設(shè)定了文件大小閾值,一般設(shè)置為500MB,根據(jù)大小的不同,調(diào)用不同的數(shù)據(jù)庫(kù)訪問API,低于閾值的,存儲(chǔ)到FastDFS中,反之,存儲(chǔ)HDFS中,查詢時(shí),根據(jù)統(tǒng)一的查詢接口,分別到HBase和FastDFS中去查詢得到結(jié)果。節(jié)點(diǎn)數(shù)據(jù)的同步在分布式存儲(chǔ)中是一個(gè)重要問題,我們?cè)诮y(tǒng)一存儲(chǔ)服務(wù)程序中增加了緩存機(jī)制,用以控制分布式各個(gè)節(jié)點(diǎn)之間的數(shù)據(jù)同步,通過分布式協(xié)調(diào)器zookeeper,一旦本節(jié)點(diǎn)元數(shù)據(jù)發(fā)生改變,就會(huì)立即通知其他節(jié)點(diǎn)進(jìn)行緩存數(shù)據(jù)的更新同步,提高了處理的效率。
(2)數(shù)據(jù)對(duì)象的管理
由于存儲(chǔ)接口是統(tǒng)一的,我們對(duì)結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)采取了不同的處理方式。對(duì)于結(jié)構(gòu)化數(shù)據(jù),兼顧了公司原有的數(shù)據(jù)庫(kù)系統(tǒng),采用Oracle的數(shù)據(jù)庫(kù)驅(qū)動(dòng),支持其他系統(tǒng)數(shù)據(jù)表的導(dǎo)入;對(duì)于非結(jié)構(gòu)化的數(shù)據(jù),利用HBase數(shù)據(jù)庫(kù)加以存儲(chǔ),具備了高可用性和高可靠性。另外系統(tǒng)還支持XmlBlob數(shù)據(jù)的存儲(chǔ),通過分析結(jié)構(gòu)化的Xml數(shù)據(jù),使用XmlDB進(jìn)行高效的存取。
圖 1 云存儲(chǔ)平臺(tái)架構(gòu)
本文主要分析了有線網(wǎng)絡(luò)公司工作中需要存儲(chǔ)海量非結(jié)構(gòu)化數(shù)據(jù)的解決方案,針對(duì)實(shí)際工作中的需要,設(shè)計(jì)了一套云存儲(chǔ)平臺(tái),對(duì)不同類型的數(shù)據(jù)采用了統(tǒng)一存儲(chǔ)接口,在底層可以實(shí)現(xiàn)異構(gòu)存儲(chǔ),具有高效存儲(chǔ)和高可用性的特點(diǎn)。
數(shù)據(jù)的存儲(chǔ)只是第一步,對(duì)于存儲(chǔ)的數(shù)據(jù)如何進(jìn)行有效檢索利用,并且能夠挖掘其潛在的價(jià)值,是后續(xù)開展研究工作的重點(diǎn)。