吳燕波 薛琴 向大為 麥永浩
摘 要: 隨著移動互聯(lián)網(wǎng)云計算、大數(shù)據(jù)的快速發(fā)展,以圖片、視頻等組成的數(shù)據(jù)存儲急劇增加,目前已有存儲方式無法滿足系統(tǒng)需要,而NoSQL分布式大數(shù)據(jù)存儲技術(shù)因其具有可擴展、快速讀取、海量處理等特點,其在云計算領(lǐng)域如雨后春筍般被廣泛應(yīng)用。采用基于Hadoop平臺和NoSQL的MongoDB數(shù)據(jù)庫技術(shù)設(shè)計非結(jié)構(gòu)化數(shù)據(jù)云存儲架構(gòu),證明云存儲的非結(jié)構(gòu)化數(shù)據(jù)存儲技術(shù)可緩解當前非結(jié)構(gòu)化數(shù)據(jù)存儲面臨的難題,提升非結(jié)構(gòu)化數(shù)據(jù)存儲服務(wù)質(zhì)量。
關(guān)鍵詞: Hadoop云存儲平臺; MongoDB數(shù)據(jù)庫; 非關(guān)系型數(shù)據(jù)庫; 云存儲
中圖分類號: TN911?34 文獻標識碼: A 文章編號: 1004?373X(2016)09?0044?04
Abstract: Since the mobile Internet cloud computing and big data are rapidly developed, and data storage composed of pictures and videos is sharply increased, the existing storage methods can′t satisfy the system requirement. The NoSQL distribu?ted big data storage technology is widely used in cloud computing field due to its characteristics of extensibility, fast read speed and mass data processing. The unstructured data cloud storage architecture was designed with MongoDB database technology based on Hadoop platform and NoSQL. The unstructured data storage technology of cloud storage can alleviate the difficulties exiting in the current unstructured data storage, and improve the service quality of unstructured data storage.
Keywords: Hadoop cloud storage platform; MongoDB database; NoSQL; cloud storage
隨著Web 2.0技術(shù)的發(fā)展,越來越多的非結(jié)構(gòu)化數(shù)據(jù)比如文檔、圖片、音樂、視頻等產(chǎn)生。IDC研究表明:當前企業(yè)中有80%是非結(jié)構(gòu)化數(shù)據(jù),并且以60%的增長率在不斷增加。如何突破傳統(tǒng)技術(shù),實現(xiàn)大規(guī)模數(shù)據(jù)高效存儲和利用管理是當前面臨的重大挑戰(zhàn)。
1 NoSQL數(shù)據(jù)庫技術(shù)
非關(guān)系型數(shù)據(jù)庫(NoSQL)是一種全新的非關(guān)系型分布式存儲技術(shù),該數(shù)據(jù)庫數(shù)據(jù)不但包括日常的文本數(shù)據(jù),還包括如圖片、視頻、FLASH動畫等其他數(shù)據(jù),因其具有海量存儲、靈活易用、高并發(fā)等特點,可以為系統(tǒng)提供一個可擴展的松耦合類型數(shù)據(jù)模式,該模式嚴格遵循CAP定理,能夠很好地支持非結(jié)構(gòu)化數(shù)據(jù)的存儲,滿足高并發(fā)讀寫需求,具有很好的擴展性。
目前的NoSQL數(shù)據(jù)存儲主要包括以下幾種,具體見表1。
(1) 鍵值對存儲。通過對提供的鍵值對數(shù)據(jù)存儲,能夠很好地滿足系統(tǒng)的讀寫需求,例如MemcacheDB,Redis,Dynamo。
(2) 文檔數(shù)據(jù)存儲。能夠高效滿足系統(tǒng)的海量數(shù)據(jù)存儲和訪問需求,目前的存儲主要包括MongoDB和CouchDB等,能夠很好地提高海量數(shù)據(jù)存儲的訪問效率。
(3) 面向列存儲。在面向列的存儲系統(tǒng)中,數(shù)據(jù)以列為存儲單位。相同列的數(shù)據(jù)存儲在一起,從而支持列的動態(tài)擴展,對某一列或某幾列的查詢具有明顯的I/O優(yōu)勢。典型代表有Hbase,Hypertable等。
2 MongoDB數(shù)據(jù)庫
MongoDB數(shù)據(jù)庫不但能夠通過系統(tǒng)的鍵值對存儲提高其快速寫入和讀取,而且能夠很好地兼容傳統(tǒng)關(guān)系型DBMS功能,它主要可以提供一種功能強大、靈活、可擴展的無結(jié)構(gòu)的存儲方式,該存儲方式采用松散的BSON數(shù)據(jù)結(jié)構(gòu)進行存儲。
MongoDB的主要特性如下:
(1) 擴展性好:MongoDB數(shù)據(jù)庫在設(shè)計初期,首先考慮到數(shù)據(jù)庫的擴展問題,通過采用無模式的存儲結(jié)構(gòu)可以快速對服務(wù)器進行自動分割。采用MongoDB數(shù)據(jù)庫的自動分片機制,可以實現(xiàn)集群中數(shù)據(jù)的動態(tài)負載均衡。
(2) 數(shù)據(jù)存儲豐富多樣化:MongoDB是面向文檔的數(shù)據(jù)庫,MongoDB拋棄關(guān)系存儲模型,用戶在進行添加模塊時不用事先定義,即可橫向靈活的更改數(shù)據(jù)模型。
(3) 檢索功能豐富:該數(shù)據(jù)庫不但支持輔助索引,而且方便存儲JavaScript腳本和MapReduce等模式。
(4) 性能引擎優(yōu)良:MongoDB數(shù)據(jù)庫中的文檔數(shù)據(jù)可以動態(tài)擴充,通常先將存儲引擎配置到內(nèi)存映射文件中,實現(xiàn)數(shù)據(jù)文件進行預(yù)分配,然后通過采用空間轉(zhuǎn)換的形式,確保數(shù)據(jù)庫的性能穩(wěn)定。
(5) 配置管理便捷:MongoDB數(shù)據(jù)庫為提升系統(tǒng)的可靠性和穩(wěn)定性,通常采用服務(wù)器自身機制完成配置功能。MongoDB數(shù)據(jù)庫的核心是文檔數(shù)據(jù),每個文檔數(shù)據(jù)中的字段名和值一一對應(yīng)存放在表中??梢酝ㄟ^MongoDB數(shù)據(jù)庫實例方便管理相應(yīng)的數(shù)據(jù)庫表。
圖1為MongoDB的分布式存儲架構(gòu)。
2.1 分片
在MongoDB數(shù)據(jù)庫中,每個分片均由一臺或多臺服務(wù)器構(gòu)成,該服務(wù)器的功能主要是通過運行MongoDB進程實現(xiàn)數(shù)據(jù)的存儲。但在實際環(huán)境中,為了提高系統(tǒng)的可靠性和實現(xiàn)自動故障恢復(fù),每個分片可以獨立看作是一個replica set,replica set從本質(zhì)上來講,它是一種異步的主從復(fù)制機制,每個replica set至少包括一個主節(jié)點和一個以上副節(jié)點。主節(jié)點主要負責數(shù)據(jù)的寫入,副節(jié)點主要負責數(shù)據(jù)的讀取。replica set中兩類節(jié)點之間通過oplog保證數(shù)據(jù)的一致性,所有操作數(shù)據(jù)及時間戳都會被寫入oplog,因其大小固定,所有的副節(jié)點均會監(jiān)聽oplog的變化情況,以實現(xiàn)與主節(jié)點的同步。replica set通常能夠?qū)崿F(xiàn)兩個以上子節(jié)點的故障自動恢復(fù)。
2.2 配置服務(wù)
配置服務(wù)主要用來存儲MongoDB數(shù)據(jù)庫集群的元數(shù)據(jù)信息,這些元數(shù)據(jù)信息來源于兩方面:一部分是分片服務(wù)器上的集群信息;另一部分是該分片集群服務(wù)器上的文檔數(shù)據(jù)和集合信息。每一個配置服務(wù)信息中都包括了MongoDB數(shù)據(jù)庫中的群集信息,通常采用一個兩階段協(xié)議實現(xiàn)相互之間的通信,確保配置信息的一致性。配置服務(wù)器目前擁有自己的復(fù)制模型,可以對集群元數(shù)據(jù)信息備份。當任何一個集群服務(wù)器發(fā)生宕機時,集群中的元數(shù)據(jù)就自動變?yōu)橹蛔x狀態(tài),通過此種方式能夠有效避免系統(tǒng)在不穩(wěn)定的情況下,誤操作導致元數(shù)據(jù)信息被改動,避免config servers節(jié)點間出現(xiàn)元數(shù)據(jù)不一致的情形。數(shù)據(jù)庫集群中某一配置服務(wù)器發(fā)生異常,不會影響整個集群的正常工作,最終能夠確保集群中寫入數(shù)據(jù)或從集群中讀取數(shù)據(jù)。
2.3 路由進程
路由進程可以將數(shù)據(jù)庫集群中的多個組件看作是一個單一的系統(tǒng),當MongoDB數(shù)據(jù)庫服務(wù)器接收到用戶請求時,首先查詢相應(yīng)的配置文件,找到存放該數(shù)據(jù)的分片服務(wù)器。然后通過配置服務(wù)協(xié)議把用戶請求轉(zhuǎn)發(fā)給相對應(yīng)的分片服務(wù)器。當所有的分片服務(wù)器完成操作后,會將結(jié)果通過路由協(xié)議打包分別發(fā)送給Mongos。當Mongos匯總所有的數(shù)據(jù)結(jié)果后,再把最終結(jié)果返回給用戶。Mongos每次啟動,首先要去配置服務(wù)器中讀取元數(shù)據(jù)單元,并同時保存到本地。每當配置服務(wù)器中的元數(shù)據(jù)信息發(fā)生變動時,它都會在第一時間通知所有的Mongos。
3 Hadoop大數(shù)據(jù)云存儲平臺
Hadoop大數(shù)據(jù)平臺是Apache公司的一個開源子項目,該平臺項目的主要目標是能夠依據(jù)目前已有的廉價硬件設(shè)備生成系統(tǒng)穩(wěn)定、可擴展的分布式計算架構(gòu)。其中HDFS是Hadoop平臺的子項目之一,它主要是能夠?qū)崿F(xiàn)分布式文件系統(tǒng),為各大機構(gòu)和公司建設(shè)云存儲解決方案提供了參考。
云存儲數(shù)據(jù)中心是由多服務(wù)器組成的服務(wù)器集群的統(tǒng)稱,該云存儲數(shù)據(jù)中心能夠提供大容量、高并發(fā)的數(shù)據(jù)存儲。該服務(wù)集群主要由一個主控節(jié)點和多個數(shù)據(jù)節(jié)點構(gòu)成,能夠通過網(wǎng)絡(luò)設(shè)備將集群系統(tǒng)連接在一起,方便實現(xiàn)用戶統(tǒng)一的管理和維護。
非結(jié)構(gòu)化數(shù)據(jù)存儲非常廣泛,目前系統(tǒng)建設(shè)功能模塊中對非結(jié)構(gòu)化數(shù)據(jù)要求很多,包括圖片上傳下載、新聞圖片發(fā)布、視頻剪輯、文檔管理等功能。其云存儲層次結(jié)構(gòu)如圖2所示。
但是大部分的功能實現(xiàn)是通過在服務(wù)器上創(chuàng)建可寫的目錄來存儲,采用此種方式有如下弊端:
(1) 性能低下。因系統(tǒng)所需的非結(jié)構(gòu)化數(shù)據(jù)存儲量大,服務(wù)器帶寬和計算能力會根據(jù)數(shù)據(jù)類型進行相應(yīng)分配,這樣導致大量服務(wù)器存儲被占用,對于一些核心設(shè)備上性能要求極高的服務(wù)器有很大影響。
(2) 集群同步難以維護。當大型項目規(guī)模需要集群支持時,為了確保實現(xiàn)節(jié)點內(nèi)各服務(wù)器之間同步數(shù)據(jù),通常采用基于服務(wù)器內(nèi)部之間的協(xié)議保證數(shù)據(jù)傳輸?shù)囊恢滦院屯暾浴?/p>
(3) 服務(wù)安全管控性差。目前服務(wù)器都逐步采用集中式管控,這對服務(wù)器出入口安全提出更苛刻的要求,傳統(tǒng)入侵都是通過對服務(wù)器上傳木馬實現(xiàn)的,為更好的提升服務(wù)安全管理,迫切需要對外服務(wù)接口進行監(jiān)管。
(4) 數(shù)據(jù)安全性。針對服務(wù)器集群數(shù)據(jù)間的交換,通常采用vpn登錄等方式獲取所需的數(shù)據(jù)信息,而vpn通常是內(nèi)外網(wǎng)信息的入口憑證,加強vpn等登錄信息的監(jiān)管是確保數(shù)據(jù)安全的重中之重。
(5) 數(shù)據(jù)持久性?;跇I(yè)務(wù)應(yīng)用的系統(tǒng),通常采用單一數(shù)據(jù)庫服務(wù)器存儲,一旦數(shù)據(jù)庫發(fā)生異常,無法保證數(shù)據(jù)的完整性和一致性,容易發(fā)生存儲數(shù)據(jù)丟失等情況,一旦丟失,進行數(shù)據(jù)恢復(fù)往往比較困難。
本文設(shè)計的非結(jié)構(gòu)化數(shù)據(jù)云存儲架構(gòu)建立在Hadoop之上,層次結(jié)構(gòu)如下:
(1) 存儲層:非結(jié)構(gòu)化數(shù)據(jù)云存儲系統(tǒng)對外提供不同的存儲服務(wù),每種服務(wù)的數(shù)據(jù)被統(tǒng)一存儲在系統(tǒng)中,構(gòu)成一個數(shù)據(jù)池。
(2) 管理層:管理層是非結(jié)構(gòu)化數(shù)據(jù)云存儲系統(tǒng)中最核心的一層。通過管理層實現(xiàn)云存儲中多個存儲設(shè)備之間的協(xié)同工作,確保這些設(shè)備對外提供統(tǒng)一的數(shù)據(jù)公眾服務(wù)。
(3) 應(yīng)用服務(wù)層:該層主要是根據(jù)用戶自身業(yè)務(wù)而實現(xiàn)的業(yè)務(wù)需求,能夠?qū)崿F(xiàn)與云存儲服務(wù)器集群進行交互的具體操作,最終實現(xiàn)用戶的業(yè)務(wù)操作。
(4) 應(yīng)用接口層:對應(yīng)于云存儲中的用戶訪問層。
4 本文設(shè)計內(nèi)容
本文為優(yōu)化HDFS的存儲,引入MongoDB非關(guān)系型數(shù)據(jù)庫進行相應(yīng)的改進,在Hadoop云平臺上搭建HDFS和MongoDB存儲系統(tǒng)實現(xiàn)非結(jié)構(gòu)化海量資源的存儲。非結(jié)構(gòu)化數(shù)據(jù)云存儲平臺如圖3所示。
非結(jié)構(gòu)化數(shù)據(jù)云存儲平臺中MongoDB架構(gòu)如圖4所示,其功能如下:
(1) Client:包含訪問MongoDB的接口,維護緩存數(shù)據(jù)加快數(shù)據(jù)的訪問速度,如集合位置信息。
(2) 協(xié)調(diào)服務(wù):確保整個系統(tǒng)集群只有一個主控制節(jié)點,能夠存儲所有集合的尋址入口,實時監(jiān)控集合服務(wù)的狀態(tài),將集合服務(wù)的狀態(tài)信息實時發(fā)送到主控制節(jié)點;存儲和管理MongoDB的模式信息,包括有哪些集合,每個集合有哪些文檔。
(3) 控制節(jié)點:分配集合空間,負責元數(shù)據(jù)存儲的負載均衡;發(fā)現(xiàn)失效的數(shù)據(jù)節(jié)點時,進行故障轉(zhuǎn)移;處理MongoDB上的垃圾文件回收和schema更新請求。
(4) 集合服務(wù):數(shù)據(jù)的I/O請求;對數(shù)據(jù)量較大的集合進行自動分片。
非結(jié)構(gòu)化數(shù)據(jù)云存儲平臺中HDFS架構(gòu)如圖5所示,其功能如下:
(1) NameNode節(jié)點即控制節(jié)點,它可以看作是HDFS中的管理者,工作內(nèi)容主要包括:管理文件系統(tǒng)的命名空間、集群配置、存儲塊復(fù)制等。
(2) 存儲節(jié)點是數(shù)據(jù)存儲的基本單元,通過將數(shù)據(jù)以塊的方式存儲到本地文件系統(tǒng)中,同時能夠?qū)⑺袎K信息及時準確地發(fā)送給控制節(jié)點。
(3) MongoDB客戶端就是獲取分布式文件系統(tǒng)的應(yīng)用程序。
通過開源Hadoop非結(jié)構(gòu)化數(shù)據(jù)云存儲平臺,用戶可以將海量非結(jié)構(gòu)化數(shù)據(jù)存儲到云平臺上。HDFS可以用來存儲PB級的數(shù)據(jù),但數(shù)據(jù)訪問延時高,不適合存儲小文件等。MongoDB存儲海量數(shù)據(jù)的元數(shù)據(jù),可以實現(xiàn)實時讀寫,很好地彌補了HDFS的不足。
5 測試結(jié)果
測試實驗數(shù)據(jù)來源于所在公司的商務(wù)數(shù)據(jù)。本次實驗主要對Hadoop平臺下NameNode節(jié)點內(nèi)存損耗進行測試。為了進行NameNode內(nèi)存損耗測試實驗,實驗設(shè)計數(shù)據(jù)如下:采用樣本數(shù)分別為10 000,20 000,30 000,40 000,50 000,每組樣本數(shù)中各自創(chuàng)建10萬個文件;對引入MongoDB前后的系統(tǒng)進行相應(yīng)實驗,獲取NameNode節(jié)點的內(nèi)存大小并記錄,實驗結(jié)果如表2所示。
從實驗數(shù)據(jù)中可以看出,對于原始不加任何修改的HDFS文件系統(tǒng),隨著文件數(shù)量的不斷增加,NameNode節(jié)點的內(nèi)存消耗也呈線性增長趨勢。而在引入MongoDB后,文件數(shù)量等比增加,NameNode節(jié)點的內(nèi)存消耗基本保持不變,內(nèi)存占用率也不高。表3為響應(yīng)時間對比結(jié)果。
從表3中可以看出,對于原始不加任何修改的HDFS文件系統(tǒng),隨著文件數(shù)量的不斷增加,系統(tǒng)響應(yīng)時間呈線性增長趨勢。而在引入MongoDB后,文件數(shù)量等比增加,系統(tǒng)響應(yīng)時間同樣基本保持不變。實驗結(jié)果表明,基于Hadoop云存儲平臺,采用MongoDB和HDFS相結(jié)合的方式,對緩解大數(shù)據(jù)NameNode節(jié)點的內(nèi)存耗費和響應(yīng)時間均有很好的改進。
6 結(jié) 語
本文通過對互聯(lián)網(wǎng)發(fā)展的現(xiàn)狀進行分析,重點研究了當前流行的NoSQL數(shù)據(jù)庫代表MongoDB的數(shù)據(jù)庫模型、特性以及它的分布式存儲架構(gòu),并詳細介紹了大數(shù)據(jù)云平臺技術(shù)的特點,依據(jù)大數(shù)據(jù)云存儲平臺和非結(jié)構(gòu)化數(shù)據(jù)庫自身的特點,設(shè)計基于MongoDB和HDFS的非結(jié)構(gòu)化數(shù)據(jù)云存儲服務(wù)架構(gòu)。針對非結(jié)構(gòu)化數(shù)據(jù)元數(shù)據(jù)的特點以及MongoDB的存儲特性,將MongoDB部署到Hadoop平臺中,存儲非結(jié)構(gòu)化數(shù)據(jù)的元數(shù)據(jù)信息,而非結(jié)構(gòu)化數(shù)據(jù)以文件的方式存放在HDFS系統(tǒng)中。這樣可以降低HDFS在應(yīng)對海量小文件的存儲應(yīng)用時,由于NameNode內(nèi)存不足導致的性能瓶頸。在本文的最后設(shè)計實驗對平臺的可行性進行了驗證,實驗數(shù)據(jù)證明了改進方案的有效性和高效性。
參考文獻
[1] WHITE Tom.Hadoop權(quán)威指南[M].北京:清華大學出版社,2011.
[2] 李喬,鄭嘯.云計算研究現(xiàn)狀綜述[J].計算機科學,2011,38(4):32?37.
[3] 謝華成,陳向東.面向云存儲的非結(jié)構(gòu)化數(shù)據(jù)存取[J].計算機應(yīng)用,2012,32(7):1924?1928.
[4] WANG R W, ZHANG H, DENG Y F, et al. Efficient parallel radiosity for terascale applications [C]// Proceedings of 2008 International Conference on Computer Science and Software Engineering. [S.l.]: IEEE, 2008: 1074?1077.
[5] FABIANOWSKI B, DINGLIANA J. Interactive global photon mapping [J]. Computer graphics forum, 2009, 28(4): 1151?1159.
[6] 田浪軍,陳衛(wèi)衛(wèi),陳衛(wèi)東,等.云存儲系統(tǒng)中動態(tài)負載均衡算法研究[J].計算機工程,2013,39(10):19?23.
[7] GHEMAWAT S, GOBIOFF H, LEUNG S T. The Google file system [C]// Proceedings of 2003 ACM Symposium on Opera?ting Systems Review. [S.l.]: ACM, 2003: 29?43.
[8] 林菲,張萬軍,孫勇.一種分布式非結(jié)構(gòu)化數(shù)據(jù)副本管理模型[J].計算機工程,2013,39(4):36?38.
[9] 胡珊珊.面向云存儲的非結(jié)構(gòu)化數(shù)據(jù)存儲研究與應(yīng)用[D].廣州:廣東工業(yè)大學,2014.
[10] 李存琛.海量數(shù)據(jù)分布式存儲技術(shù)的研究與應(yīng)用[D].北京:北京郵電大學,2013.
[11] 楊磊.基于NoSQL數(shù)據(jù)庫的結(jié)構(gòu)化存儲設(shè)計與應(yīng)用[J].科技風,2011(18):99.
[12] 朱建生,汪健雄,張軍鋒.基于NoSQL數(shù)據(jù)庫的大數(shù)據(jù)查詢技術(shù)的研究與應(yīng)用[J].中國鐵道科學,2014,35(1):135?141.