劉海寧,李德山
(1.天津中德應用技術大學 經貿管理學院,天津 300350;2.西南科技大學 經濟管理學院,四川 綿陽 621010)
隨著物聯網的發展,網絡上產生的數據成指數型增長[1-2],大數據成為研究者的關注熱點。大數據是指從異構設備收集的海量數據量[3],包括傳感器網絡、科學實驗、網站和其他應用以各種格式產生的數據[4]。數據結構從結構化數據向非結構化數據進行轉化,使得傳統的關系數據庫不再適合存儲[5]。綜上,指數增長、數據結構和類型的多樣性給傳統的數據管理系統帶來了數據存儲和分析的挑戰[6]。這就促進了高效的分布式存儲機制的發展,為動態增長的大數據提供可靠和高效的存儲,從而引發具有改進的訪問性能和容錯性的存儲系統的創新發展。
存儲機制從傳統的數據存儲到NoSQL技術的結構轉變滿足了大數據存儲要求。 NoSQL數據庫克服了關系數據庫的局限,提供了可橫向擴展、靈活、高可用、可訪問且相對便宜的存儲解決方案, 已成為大多數存儲系統采用的技術[7]。與關系數據庫不同,這些技術可為大量用戶同時與大數據交互提供支持。NoSQL數據庫在實現一致性、容錯性、可用性和查詢支持方面表現出色,同時還保證了關系數據庫的一些獨特功能:可伸縮性、可用性、一致性和二級索引[8]。
文獻[9]提出一種面向列的NoSQL數據庫,并從中提取增量,用于不同的增量應用程序和不同的數據目標。文獻[10]提出一種基于圖和關系數據庫的混合數據庫方法,通過調節一些約束可以從兩者的混合系統中獲益,使得兩個模型集成在一個系統中以消除各個系統的限制。文獻[11]提出了一種基于Mongo DB分布式數據庫存儲結構的蛋白質組學數據存儲系統設計方案,解決了傳統存儲系統中集群架構關系復雜、維護成本高、代碼處理復雜的問題。文獻[12]提出了一種可靠的分布式存儲系統,使用結合對稱和非對稱加密方法的冗余輕量級加密算法,提高了分布式系統的可靠性和安全性。文獻[13]提出了一種新的分布式存儲系統Amoeba,使用自適應多屬性數據分區以有效地支持自組織和重復查詢,使得在所有屬性上的自組織查詢具有類似的性能增益,然后自適應地重新劃分基于觀察到的查詢序列的數據,使得系統隨著時間的推移而改進。文獻[14]提出一種基于ARM的海量大數據存儲系統設計方法,實現海量大數據的靈活高效存儲。對于存儲系統中數據放置機制的研究,文獻[15]中給出了一種多數據副本放置機制,以最小化訪問代價為優化目標,基于遺傳算法確定優化的數據副本放置方案。文獻[16]提出一種可調整副本部署策略的數據副本放置機制,該機制根據數據訪問頻率調整副本數量,并根據節點空閑容量設置副本。以上兩種數據放置機制在檢索時間等性能方面還有提升空間。
安全有效地存儲大數據是一個迫切的問題。本文在現有數據存儲系統的基礎上,設計了一種大數據存儲系統架構,通過文件組合策略改進HDFS小文件的讀寫過程,使用Hive工具并行分析和提取海量日志,在HDFS文件系統上構建云存儲平臺。提出一種快速啟發式數據放置機制,將數據放置問題進行數據化表示,并通過圖著色的貪婪算法給出放置方案。該放置方法能在最小化搜索時間的同時保證數據存儲的安全性,采用該系統及數據放置機制能夠有效實現大數據安全高效地存儲。
大數據分布式存儲系統使用HDFS文件系統,其主要功能包括文檔用戶管理、HDFS小文件合并處理和日志分析。HDFS文件系統由1個名稱節點和3個數據節點組成,而DFS服務器封裝了HDFS文件的基本操作,用戶只需通過瀏覽器即可輕松完成文件管理。分布式存儲系統的體系結構如圖1所示。

圖1 大數據存儲系統架構
元數據服務器主要用于存儲小文件的元數據信息,如果用戶上傳的文件被確定為小文件,則通過附加的寫入方法將其合并到用戶文件中,并將其元數據信息記錄在元數據服務器中。當用戶讀取一個小文件時,它將根據文件直接定位和讀取元數據信息,提高了閱讀效率。在數據節點中顯示DFS服務器的作用是當用戶讀取小于文件塊的文件時直接轉移到數據節點,此時,存儲此文件的數據節點將直接向用戶傳輸數據,從而減少DFS服務器上的壓力,改善服務器響應時間,同時提高文件的I / O效率。Hive元數據服務器主要用于日志分析,日志分析保存Hive表的元數據信息,然后將日志分析結果存儲到關系數據庫中,方便用戶查看。
NameNode是整個存儲系統的中央控制器,用于管理和維護整個文件系統樹及其中所有的文件和目錄,同時負責接收和處理留置請求以及管理、分配特定的存儲任務。NameNode管理的元數據信息以兩個文檔的形式持久地保存在本地磁盤上:名稱空間圖像文件FsImage和編輯日志文件EditLog。每個啟動NameNode將首先加載FsImage文件,然后重做所記錄的操作EditLog,最后將Fslmage重新持久化到本地磁盤以及空的EditLog文件。NameNode定期執行檢查點,定期合并FsImage文件和EditLog文件。FsImage總是在最后一個檢查點之后記錄文件系統的元數據,而EditLog則記錄一次檢查點到下一個檢查點之間的操作。NameNode記錄與每個文件對應的每個塊的Datanode信息,但區別在于這些信息不會被持久存儲,而是在系統啟動時由Datanode節點報告和構造。從NameNode對FsImage和EditLog文件進行合并,然后將新的FsImage文件傳輸回舊的文件,并且新的EditLog在獲得FsImage和EditLog之后為空文件,因此一方面要確保EditLog文件不會太大,減少系統重啟時間;另一方面,Secondary NameNode對NameNode中的名稱空間映像文件進行備份,提高其容錯性。
整個系統可分為認證、數據文件塊加密、數字保護、數據文件加密和上傳、解密和下載、數據文件檢索查詢部分以及在后臺執行的分布式數據文件系統過程和異常檢測軟件部分,系統結構如圖2所示。
目前,性能問題和安全性要求的結合使得大數據存儲系統中的數據放置問題成為具有挑戰性的問題。本文提出一種基于圖著色的貪婪算法的安全感知數據放置機制,在系統上以最小化總檢索時間存儲所有數據塊,同時保證數據的安全性,使得即使成功侵入塊,攻擊者也無法猜測或推斷其他塊的位置。

圖2 大數據存儲系統模塊化
大數據分布式存儲系統由M個存儲節點組成,節點i具有Ci單元的總存儲容量。節點之間的連接由對稱矩陣B(M×M)表示,其中Bi, j=Bj,i表示節點i和j之間的雙向鏈路的帶寬。因此,Bi, j=Bj,i=0的情況意味著節點i和j沒有連接。系統的拓撲結構表示為圖G(V,E),其中V是頂點集合,即存儲節點,E是邊緣集合頂點,即連接存儲節點的鏈接。假設任何存儲節點都可以被視為訪問。用戶可以提交存儲請求的系統點,給定需要存儲大小為D的數據量的用戶請求。假設數據可以被分割成具有任意大小的多個塊,每個塊包含整個數據的部分重要/敏感信息,因此泄露單個塊的信息對惡意用戶沒有意義。本文將安全級別定義為存儲任何數據塊對的兩個節點之間的最小非零距離。最小距離必須保持為變化的參數,以滿足不同用戶的安全要求。



(1)
假設來自/到達存儲設備的讀/寫時間可以忽略不計,從讀取請求的節點i到節點p的數據傳輸時間與從p到i的數據傳輸時間相同。對于寫請求,因為系統中的鏈接是雙向的,因此如果可以最小化數據的檢索時間,那么它的總上傳時間也將最小化。
總傳輸時間的線性優化編程公式在數學上表示為minimize:TD,其受限條件為:
(2)
該約束確保所有塊大小的總和等于原始數據的大小。
Si≤Smax,Si≤Ci
(3)
其中Si≤Smax確保每個塊的大小不超過用戶定義的閾值,表示為Smax,Smax≤D。本文認為數據所有者是指定塊大小閾值的最佳候選者,以便在塊泄漏時不泄露太多敏感信息。Si≤Ci確保了候選節點的足夠存儲容量。
f(Si,Sj,i,j)≥K,i,j=1,…,M
(4)
式(4)確保放置解決方案保證所需的安全級別,即存儲相同數據的兩個塊的節點之間的最小距離,表示為K。K=0表示非安全級別,K=1表示最低安全級別,K=2表示默認安全級別。然后定義函數f(Si,Sj,i,j)來計算該距離。該功能定義如下:

(5)
當Si≠0且Sj≠0時,函數取值為D(i,j),根據網絡中的最短路徑計算兩個節點之間的跳數。如果Si=0或Sj=0,意味著未選擇節點i或節點j來存儲任何數據塊,則將函數的結果設置為大于K的值,設置為最大整數值MaxInt。
解決上述問題在計算上是困難的,因為即使對于簡單的小型存儲系統來說,確定是否存在有效的放置解決方案也是NP的。上面給出的線性規劃能更好地描述數據放置問題,并更好地理解問題的復雜性,因此必須設計出有效的啟發式算法來解決這個問題。
針對上節中存儲系統有效放置解決方案是NP的問題,提出一種基于圖著色的安全感知數據放置機制。該放置機制屬于一種貪婪算法,確保了數據隱私的安全級別,同時最小化了數據檢索時間。
設圖G=(V,E)表示存儲系統的網絡拓撲,給定包含0的非負整數的集合T,T著色問題是從頂點集合V到用于給頂點著色的顏色值的非負整數集合的映射函數f,使得|f(i)-f(j)|?T,其中i,j∈V。即T著色問題將顏色分配給頂點,使得相鄰頂點的顏色之間的距離必須不屬于T。當T={0}時,T著色問題歸結為一個共同的頂點著色問題,其中兩個相鄰的頂點不能被賦予相同的顏色。
當T={0}時,T著色問題適用于數據放置問題以確保數據的完全安全性。假定數據可以劃分為任意數量的塊,在默認安全級別(即K=2),兩個不同的數據塊不能存儲在兩個相鄰節點中。即給定存儲節點圖的著色解,具有相同顏色的節點可以存儲數據的塊,因為它們不是圖中的相鄰節點。具有相同顏色的存儲節點的數量可能比特定數據的塊的數量大得多,這就使得數據的安全性得到保證,因為即使有節點上發生成功的入侵,惡意用戶也不能猜測其他數據塊的位置。
當所需的安全級別高于默認級別時,問題會更復雜,要求數據的兩個不同塊之間的距離大于2。為了解決這個問題,本文提出一種算法,將K>2的問題轉換為K=2的問題。給定K值及其網絡拓撲,算法開始連接距離小于K的所有節點對。圖3給出了當K被設置為3時的轉換過程的示意圖,其中(a)給出了系統的原始圖,(b)給出了圖轉換算法的結果,添加的邊被標記為虛線,(c)給出了在得到的圖上獲得的著色解決方案。

圖3 具有所需安全級別K=3的轉換示意圖
鑒于著色解決方案,可得到一組可行的存儲節點解決方案,如圖3(c)中所示,數據可以分成2個塊并存儲在可行的節點對上,節點1和節點6(紅色),節點2和節點7(藍色),節點3和節點4(綠色)或節點5和節點9(紫色)。
上述內容解決了圖形轉換和著色問題。本文的大數據放置機制算法由兩個部分組成:第1部分即著色解決方案,第2部分是貪婪算法,用以確定存儲在所選節點上的數據塊的大小。算法1給出了用于數據塊分配的貪婪算法的偽代碼。
算法首先計算用于為圖形著色的顏色數量,然后在外部for循環中使用用于對圖著色的顏色集合(表示為C)以確定最佳放置解決方案。對于集合C中的每種顏色c,該算法首先按照單元數據到接入點的檢索時間的升序對所有節點進行排序,這些節點由c著色。給定有序的存儲節點集,表示為Vc′,算法開始以最小的檢索時間分配來自第1節點的數據塊。

對于有序集合中的每個節點v,Vc′的數據塊大小由min{Smax,Cv,Dtemp}確定。這意味著,如果剩余數據的大小較大,則只能分配具有最大Smax的塊。然而,如果存儲節點的可用存儲空間Cv不夠,則只有較小的塊可以占用剩余的可用存儲空間。當整個數據被容納時,即使仍然存在可行的存儲節點,由于這些節點在數據傳輸中較慢,該算法也會中斷for循環。
在算法執行中,可能會發生沒有足夠節點來存儲數據的情況,即for循環已經用相同的顏色完成了所有可行的節點,但是數據仍然保留。由于無法在系統中容納數據,可忽略此分配解決方案。只有可以容納整個數據時,算法才計算放置解決方案的總檢索時間,如果當前解決方案的總檢索時間小于先前的最佳解決方案,則該算法更新最佳解決方案以供將來進行比較。
算法在迭代完所有可用解后停止,這些可行解由用于圖著色的顏色集表示。最終的解決方案是最佳的數據放置解決方案,它不僅滿足安全約束,而且最小化了數據的總檢索時間。當數據過大而所有存儲節點都已經飽和或者具有相同顏色的節點的數量過少時,可能不存在可行的解決方案。在這種情況下拒絕存儲請求,即算法返回空集合。實際上,如果拒絕率太高,則提供者可能需要通過增加節點數量及其容量來擴展系統。
在具有隨機網絡拓撲的云存儲系統上對本文存儲架構和數據放置機制進行測試。隨機生成具有最小節點度的拓撲設置為2,鏈路的帶寬從[100,500]Mbps隨機選擇。安全級別被默認設置為3,即存儲相同數據的任何一對塊的節點之間的距離應該至少是3跳,圖4~6給出了不同方法在隨機網絡拓撲下的性能。
本文采用平均檢索時間、存儲請求中的拒絕次數兩個指標性能對大數據存儲的數據放置方法進行驗證。為了驗證有效性,將本文方法與其他3種方法進行比較,這3種方法分別是:文獻[16]中的ARDS放置方法、隨機選擇節點(random selection of nodes,RSN)和最遠節點優先(furthest node first,FNF)。RSN在滿足安全要求的節點中隨機選擇一個存儲節點來存儲數據塊。該過程重復進行,直到沒有更多的存儲節點可用時,整個數據被容納或拒絕;FNF選擇與存儲相同數據塊的節點最遠的節點,FNF是一個迭代算法,與RSN具有相同的停止條件。

圖4 不同方法的總檢索時間比較
從圖4中可以看出:與其他算法相比,本文提出的大數據存儲系統與數據放置機制的總檢索時間是最少的。在最好的情況下,刻度減少檢索時間高達25.1%。另外,當請求次數增加時,本文方法的檢索時間略有增加,這是因為,在少量請求的情況下,本文方法會利用滿足安全約束的最近節點進行搜索;在請求數量較高時,所有最近的存儲節點都飽和,然后利用其他節點,從而增加了檢索時間。
從圖5中數據可以看出:所有方法的存儲數據總量性能隨著請求數量的增加而變大,本文方法的存儲數據總量性能總是優于其他3種方法,且隨著請求數量的增加,存儲總量的優越性越大。

圖5 不同方法允許存儲的總數據量
從圖6中數據可以看出:對于拒絕次數性能,所有方法的拒絕次數隨著請求數量的增加而變大,本文方法的拒絕次數總是少于其他3種方法;隨著請求次數的增加,本文方法的拒絕次數增速較緩,ARDS方法增速也較緩,即隨著請求數量的增加,RSN和FNF方法的拒絕次數增加幅度大于本文方法和ARDS方法。

圖6 不同方法的拒絕次數
綜上,從圖5、6中可以看出:本文方法不僅在檢索時間方面具有最佳性能,而且在存儲數據總量和拒絕次數性能方面也具有最佳性能,這說明本文方法不會犧牲其他性能指標來實現數據安全性。
為了驗證本文方法的普適性和可推廣性,從不同存儲節點數量和安全級別來驗證本文存儲系統和數據放置機制的性能。存儲節點數量的影響:通過將存儲節點數量從25個變為50個來評估所提算法的性能。
圖7表示不同算法對于存儲節點數的檢索時間。每種方法中檢索時間的縮短是由于鏈路容量的異構性導致,可以看出本文算法在不同存儲節點數量下總是優于其他方法。

圖7 不同存儲節點數量下的檢索時間
安全級別的影響:將安全級別從2改為5,并評估算法的性能。圖8給出了關于安全級別的檢索時間。

圖8 不同安全級別下的檢索時間
結果表明:當安全級別增加時,檢索時間增加, 這是因為靠近接入點的存儲節點違反了安全約束。另外,當增加安全級別時,從存儲數據塊的節點到接入點的平均跳數也增加,導致檢索時間增加。可以看出本文方法在不同的安全級別下檢索時間總是小于其他方法,同時能夠保證數據的安全性。
本文提出一種大數據存儲模型和存儲系統中數據放置機制,首先設計了大數據存儲的存儲模型架構,在分析HDFS架構和運行機制的基礎上,通過文件組合策略改進HDFS小文件的讀寫過程,給出大數據存儲框架。為了減少數據存儲檢索時間和提高安全性能,提出一種用于數據存儲系統的數據放置機制,該放置機制是基于圖著色的貪婪算法來解決數據安全放置問題。實驗結果表明:與其他3種方法比較,本文方法在檢索時間、存儲數據總量和拒絕次數方面都體現了最佳性能,說明了本文方法的有效性。