徐 智,王 岳,王 欣
(1. 三江學院機械與電氣工程學院,江蘇 南京 210012;2. 江蘇科技大學船舶與海洋工程學院,江蘇 鎮江 212003)
傳統網絡中,數據大部分以結構化形式傳遞與存儲,隨著云計算網絡的發展,非結構化數據大量涌現。所謂非結構化,表示不具有固定格式,不具有約定規則[1],這類數據不容易統一處理,也不利于理解。但是在IDC的統計報告中提到,這類無規則數據的年增長速度超過60%,在2020年會達到40ZB。當前,Google日處理網頁量在20PB以上;Facebook日存儲數據量在15TB以上;一些實驗室和教育機構的非結構化數據日生成量也在TB或者PB級別,其中,主要由本文、網頁、音視頻等組成。依托著云計算,非結構數據正在向著海量發展,其存儲負擔和存儲成本也急劇上升,同時,對非結構大數據的持久化和操作也有著嚴格的可靠程度和時延要求。在其優化存儲研究中,可靠程度的保證主要是采取冗余持久化機制;而在提高時效方面,由于現有的存儲機制采取的是統一結構處理,將其直接向非結構化拓展存在很大難度,所以針對非結構化存儲機制和存儲方法的優化亟待解決[2]。采用Hadoop集群并行存儲,是當下主流的持久化框架,但是還需要在此基礎上部署數據清洗和存儲調度策略等。有學者[3]設計了有關節點類型的存儲方案,根據節點所屬類型,以及相應的流行度對數據采取差異性存儲。這種存儲機制有利于降低云存儲數據的傳輸距離與訪問時延,但是沒有針對非結構化數據的優化處理。也有學者[4]提出了UDSS存儲,通過MongoDB[5]或者NoSQL數據庫的拓展查詢機制,與其它組件集成非關系數據庫[6]。另外,非結構化數據由于不規則,在云存儲過程中很容易受到損壞,因此通常進行數據審計。當前多采用三方審計,這種方法存在著單點失效、時間開銷增加等問題。考慮到區塊鏈網絡具有良好的去中心化和拓展能力[7],可以替代三方審計,改善交互速度。為此,本文在優化非結構化大數據云存儲方法的同時,引入區塊鏈,并在區塊鏈網絡中對數據進行完整性驗證,進一步提高非結構化大數據的云存儲性能。
根據云環境中的分布與偏好差異,將數據調度方程描述如下
mij=w1a+w2b+w3c+w4d
(1)
這里的w1~w4為加權系數,它們的和為1;a項為云存儲數據包采樣時間成本;b項為數據包符合要求的程度;c項為存儲質量;d項為存儲消耗。假定云環境面臨的非結構化數據總量為n,對應的持久化集合為(1,2,…,n+a),a>0。集合中n+a代表網絡中節點的數量,也代表了存儲的數據量。由此可以得到任意存儲數據,如下所示
yi=λi[x1,x2,…,xn]
(2)
其中,λi是域F2={0,1}中的行向量;xi為數據包。為保證數據包的唯一性,構成向量λi的元素應符合如下分布規則

(3)


(4)


(5)
其中,v是節點總數。在存儲節點選擇概率為0.5時,非滿秩概率關系化簡成pfailure≤(0.5)a。考慮到存儲過程中的損耗受節點數量影響,將其關系采取指數形式表示為

(6)
在進行存儲操作時,本文采用了F2={0,1}域獲得存儲所需信息。調度控制根據域首判斷出數據狀況,并實時更新存儲策略。將調度控制存儲窗表示為{di|i=1,2,…,m},包采集窗表示為{dj|j=m-k+1,…,m}。其中,k為采集窗大小,且k (7) 對下一輪存儲數據包進行預估,dm+1代表實際值;m+1代表估計值。于是,可以得到關于數據的動態振蕩 (8) 當D(m,k)增加,即云環境中的非結構化大數據振蕩活躍時,應該加速存儲頻次;當D(m,k)減小,即云環境中的非結構化大數據振蕩活躍度下降,應該降低存儲頻次。 為了更好的提升非結構大數據云存儲效率,引入審計方案進行優化存儲。首先對云存儲數據包采取審計需求分析。存儲數據包是否進行審計,審計的必要程度有多大,受數據包的屬性〈dv,hv〉影響,dv表示數據損壞的概率;hv表示數據熱度。把單一屬性的與審計需求關系擴展至數據包級別,得到云存儲數據包的存儲審計需求如下 (9) Qmax是最大審計需求;μ1、μ2依次是屬性dv與hv的加權系數。 然后對數據存儲時間采取審計。由于對時間進行審計能夠確定數據存儲的時間消耗,在完成數據存儲的前提下盡可能降低節點存儲時間。假定數據包存儲集合是{D1,D2,…,Dn},任意數據包Di被存儲次數是ci,于是可以得到存儲審計時間如下 (10) 其中,ti,j代表第j次存儲審計的耗時。再對云存儲數據包的數量進行審計。根據審計周期將存儲數據包采取正序排列{T1,T2,…,Tu},在第i個周期內數據包存儲所需的平均耗時是τi,于是可以得到存儲數據包的數量審計如下 (11) 對于周期Ti,如果取值偏小,會使審計結果急劇上升;如果取值偏大,則會使存儲數據包的審計集合過于龐大。審計過程中,結合匹配指標盡可能保證數據包分散在各個周期中。這里將匹配指標定義如下 Maudit=(Sp-Smin)/Smin (12) 其中,Sp為審計強度;Smin為滿足存儲數據審計需求的Sp下限。Maudit指標用于衡量審計處理的偏差。當Maudit>0時,說明審計的強度超出需求范圍;當Maudit<0時,說明強度在需求范圍內;當Maudit=0時,說明強度正好滿足需求。Sp指標能夠體現存儲數據的審計效果,如數據識別能力。假定將數據審計效果表示為關于審計周期的鍵值對形式〈Tv,Zv〉,其中Zv表示Tv周期內的數據識別率。則對應的Sp指標表示如下 (13) Smax代表最大審計強度;Tmax、Zmax依次為Tv與Zv的最大值;η1、η2依次為Tv與Zv的加權系數。 云計算采用數組與Merkle樹對非結構化大數據進行存儲。將保存非結構化數據的數組以一對一的形式映射至Merkle樹,數組結構包含ID與Merkle根節點地址。這樣一來,在有數據增加的情況下,就轉變為數組相應Merkle樹的操作。Merkle樹由inner與leaf兩種節點構成,其中,leaf采用(O,Hash,)形式數據結構,它的Hash選取的是同態Hash[8],O表示加密數據ID和數組ID,表示D的加密數據。inner采用(O,Hash)鍵值對形式的數據結構,它的Hash選取的是MD5,O表示leaf內的最大O值。假定任意非結構化數據D(ID,NAME,d1,d2,d3),在區塊鏈中,根據ID和NAME分辨數據,所有節點會通過共享密鑰實現除ID和NAME以外的加密處理[9]。當系統存在數據更新,只需要對加密后的數據進行修改,于是,數據更新過程描述為 UD=(1+Δd1,2+Δd2,3+Δd3) (14) 根據數據更新計算可知該過程符合同態Hash。在區塊鏈結構設計中,其首部組件有父Hash、Merkle根Hash、時間戳,以及所在區塊Hash。其中,父Hash用于構造鏈型結構,指向了前一區塊Hash。所在區塊Hash是由其余三個組件經過MD5計算得到,該Hash將會作為下一區塊的父Hash。區塊體組件有HashTable、Merkle樹和認證路徑。其中,HashTable用于存放區塊鏈網絡驗證的請求,根據這些請求創建Merkle樹。在Merkle樹中,由leaf構成的數組即為認證路徑。在區塊鏈網絡的創世區塊中,父Hash和Merkle均是空值,創世區塊Hash僅由時間戳計算得到。圖1描述了本文的區塊鏈模型。 圖1 區塊鏈模型 考慮到非結構化大數據云存儲過程中,存儲數據完整性審計依托于三方引發的存儲效率下降問題,基于區塊鏈網絡實現數據完整性驗證。驗證階段,區塊鏈網絡授權中心首先根據計算得到密鑰鍵值,然后節點將非結構化數據采取加密、Hash操作,得到Lk(),并傳送出去。云計算網絡接收到數據后經過審計進行存儲,同時得到區塊鏈網絡加密數據的Merkle樹葉子節點。當區塊鏈網絡發現數據存在更新,則將Merkle對應的葉子節點進行修改。網絡中負責驗證的節點會隨機選擇數據ID,與云存儲網絡、區塊鏈網絡中該ID數據相關的節點做驗證。云存儲網絡搜索到數據標簽后回送響應至區塊鏈網絡節點,一起回送的還有Merkle樹根Hash,區塊鏈節點搜索到對應標簽Lk()后對比Merkle樹根Hash,當確認Hash值一致時,則表明驗證成功,數據完整性驗證結束。 基于4臺PC建立實驗平臺,配置為:Ubuntu12.04.3系統,16GB內存,150GB ATAHitachiHTS54501硬盤。其中,2臺PC建立云存儲網絡集群,部署非結構化數據存儲方法與存儲審計策略。另外2臺PC建立區塊鏈,部署驗證策略。仿真時間設定24h,審計策略參數設置為μ1=μ2=0.5,η1=0.3,η2=0.7,dmax=0.3,hmax=2,Tmax=5,Zmax=1。 首先,仿真確定格式差異對非結構化數據云存儲時間的影響,實驗用的非結構化數據含有文本、圖像、網頁三種格式,總量達到100萬條。在文本、圖像、網頁三種格式下,依次改變請求進程的數量,得到存儲時間的變化情況,結果如圖2所示。根據存儲時間的變化曲線可知,在請求進程數量相同時,三種格式數據的存儲時間比較接近,說明非結構化數據的格式差異并不會導致存儲時間的明顯差異,方法對于格式差異的非結構化數據具有良好的普適性。在請求進程增加的過程中,存儲時間的增速在逐漸放緩,并接近與平穩,表明本文提出的非結構化數據云存儲方法能夠應對大量請求訪問,具有良好的大數據處理能力。 圖2 三種格式非結構化數據存儲時間 再針對存儲數據完整性審計功能進行驗證,在給定數據包為1024kB的前提下,通過遞增數據包數量,仿真得到數據完整性審計的時間開銷,結果如圖3所示。本文引入TPA[10]審計作為對比,根據結果對比可知,本文的完整性審計時間開銷明顯縮短,且受數據包數量影響較小。在給定數據包數量為100的情況下,依次增加數據包的大小,每次增幅為1024kB,通過仿真得到此時數據完整性審計的時間開銷,結果如圖4所示。根據數據完整性審計結果可以發現,兩種方法的審計時間受數據包數量變化影響較小,受數據包大小的影響較大,但是經過與TPA審計對比可知,對于同樣大小的數據包,本文方法所需的審計時間明顯更短,且隨數據包大小變化的增幅更為緩慢。數據完整性審計時間開銷的縮短,是由于云存儲網絡每接收固定個數據包就會構造出相應的區塊數據,由區塊鏈網絡完成數據完整性審計,并且結合匹配指標盡可能保證數據包分散在各個審計周期內,避免云存儲節點出現空閑和審計急劇上升的情況。 圖3 存儲數據量對完整性審計時間的影響 圖4 數據包大小對完整性審計時間的影響 最后,為了驗證本文方法在非結構化大數據云存儲時間開銷上的性能優勢,仿真過程中通過依次遞增非結構化數據的大小,得到云存儲的時間開銷,并與文獻[3]方法的性能做對比,結果如圖5所示。根據結果對比可知,本文方法的非結構化大數據云存儲時間開銷明顯小于對比方法,存儲效率顯著提升。 圖5 非結構化大數據云存儲時間開銷 本文提出了基于區塊鏈技術的非結構化大數據云存儲方法。針對云存儲網絡端的非結構化數據,通過域分析獲得存儲信息,根據估算的數據振蕩情況動態調整存儲頻次。同時在云存儲網絡端設計了數據存儲審計方案,旨在提高數據存儲效率。為了保證非結構化大數據云存儲的完整性驗證效率,引入區塊鏈技術,設計了相應的區塊鏈網絡結構,并在其中實現了數據完整性高效驗證。通過仿真,證明了本文所提方法對于格式差異的非結構化數據具有良好的普適性,且顯著提高了非結構化數據的云存儲效率,能夠有效應對大量請求訪問數據,具有良好的大數據處理能力。

3 云存儲數據審計




4 區塊鏈網絡設計

5 實驗與結果分析
5.1 實驗參數設置
5.2 實驗結果分析




6 結束語