張 猛,錢育蓉,蒲勇霖,范迎迎,杜 嬌
(新疆大學 軟件學院,新疆 烏魯木齊 830008)
隨著信息技術的飛速發(fā)展,網(wǎng)絡數(shù)據(jù)呈爆炸式增長,社交網(wǎng)絡、信息檢索和電子商務等在線數(shù)據(jù)密集型(on line data intensive,OLDI)應用[1]成為研究的熱點話題,這些應用對于數(shù)據(jù)的訪問性能(帶寬、延遲等)提出了更高的要求[2]。雖然在現(xiàn)有的云計算平臺下,虛擬化技術的普及以及CPU與內存性能有很大的提升,但是網(wǎng)絡帶寬和磁盤I/O仍然是制約OLDI應用發(fā)展的瓶頸[3]。一方面,大、小數(shù)據(jù)塊在數(shù)據(jù)密集型應用中大量存儲[4]。例如大量的MB級別乃至GB級別的視頻和音頻對象存儲在在線視頻或者音樂應用當中,而且用戶對其點擊閱覽要求也非常高,這就要求在線數(shù)據(jù)密集型應用要有很高的性能。另一方面,隨著計算機技術的不斷成熟以及內存成本的不斷降低,內存云[5](RAMCloud)的設計理念應運而生,并且性能很好地滿足了當前此類應用的要求。內存云是由大量的普通服務器內存組成的一種新型數(shù)據(jù)中心存儲系統(tǒng),使用鍵值的存儲方式將所有的應用數(shù)據(jù)都時刻存儲在內存中[6]。一般的傳統(tǒng)硬盤只是將被動隨機訪問存儲器(dynamic random access memory,DRAM)取代而作為內存云的備份介質。相比傳統(tǒng)的硬盤,內存云的吞吐量和訪問延遲要比傳統(tǒng)磁盤存儲系統(tǒng)好100~1 000倍。
當前內存云設計只考慮了大、小數(shù)據(jù)塊對象在內存中如何管理以提供高效的讀寫性能的問題,以及在現(xiàn)有的研究中只關心大、小塊數(shù)據(jù)對象的存儲優(yōu)化問題[7]和硬件節(jié)能策略[8]卻忽略了數(shù)據(jù)存儲在內存中的精確度問題,基于此,研究內存云的數(shù)據(jù)存儲的精確度將會成為必然。因此,基于內存云中數(shù)據(jù)存儲精確度低的問題,文中提出一種數(shù)據(jù)存儲優(yōu)化策略。
內存云是由成千上萬的服務器(它是由動態(tài)隨機訪問存儲器構成的內存集群,里面存儲著所有的應用數(shù)據(jù))組成并且在數(shù)據(jù)中心運行的集群存儲系統(tǒng)[9]。在內存云中,每一臺服務器不僅被作為響應客戶端請求的主服務器(Master),而且又作為備份其他主服務器內存信息的備份服務器(Backup)。每一個內存云集群都擁有一個類似于Hadoop分布式文件系統(tǒng)(Hadoop distributed file system,HDFS)[10]中的NameNode節(jié)點的Coordinator節(jié)點,用來存儲文件的Mapping映射信息,通過運用鍵值對來保存用戶所請求的信息在哪一臺主服務器上,而集群的管理配置信息是由Coordinator執(zhí)行的并且存儲服務器的網(wǎng)絡地址和對象的位置等不參與客戶請求。RAMCloud的客戶端包含存儲表和存儲服務器的映射關系的緩存,并且在第一時間獲取映射表。客戶端可以不經(jīng)過Coordinator直接向相關的服務器發(fā)送存儲請求[11-12]。它的整體結構如圖1所示。

圖1 內存云基本結構模型
存儲在內存中的數(shù)據(jù)會因為電腦宕機掉電而丟失,為了避免以上這種情況的發(fā)生,保證數(shù)據(jù)的可靠性,需要在每一臺的主機服務器中隨時備份數(shù)據(jù)到各個磁盤中,這里的存儲方式是基于日志結構的[13]。首先,將內存中的部分數(shù)據(jù)以日志的形式保存起來,其次切分成段(Segment),然后,將切分好的數(shù)據(jù)存儲到不同的服務器的內存緩沖區(qū)(Buffer)中,最后用哈希表進行記錄。主服務器繼續(xù)執(zhí)行其他命令,此時備份服務器的報告才算完成,接著備份服務器周而復始地接受其他備份操作請求,當內存緩沖區(qū)滿后采用批處理方式異步順序傳輸?shù)奖镜卮疟P,當某臺主機宕機時,各個備份服務器就會根據(jù)其存儲的日志來進行數(shù)據(jù)恢復,這樣大大提升了恢復系統(tǒng)崩潰的速度,而且也提高了文件的寫入速率。
內存云的存儲模型是以鍵值對來表現(xiàn)的,在RAMCloud集群系統(tǒng)中,這種模型是由數(shù)據(jù)塊對象(key)組成,并且被組織到可以在RAMCloud集群中跨越多個主服務器的表中,每一個主服務器的內存中都包含一個由眾多表和鍵組成的哈希表和一個對象集合[14],如圖2所示。這樣的內存管理機制能夠快速地定位任何一個對象,并且每一個對象都被一個知識偏移量[15]所標識。

圖2 主服務器備份服務器的內部結構
本節(jié)首先對數(shù)據(jù)的儲存機制進行建模,并在此基礎上建立了節(jié)點矩陣、文件分塊矩陣,兩個層次的可用性模型。
眾多的服務器組成了一個RAMCloud集群[16],它們主要分為三類:協(xié)調器(Coordinator)、主服務器(Master)、備份服務器(Backup)。一般一個Coordinator和storage server組成一個典型的RAMCloud集群,然而一個RAMCloud內部是由一個Coordinator以及Master、Backup組成。
Cluster={
(1)
定義1(集群節(jié)點矩陣):設Coordinator集合組成了一個RAMCloud集群,其中
(2)
其中,Csm×i中的第i列表示編號為Coordinatori的RAMCloud集群K中的si個Coordinator服務器,其中節(jié)點數(shù)量集合{s1,s2,…,si}中的最大值用sm表示。設k=∑si表示Coordinator節(jié)點數(shù)量,矩陣Csm×i可以表示sm×i個元素,當sm×i>∑si時,用sm×i-∑si個0來填充矩陣Csm×i,在RAMCloud集群中該位置沒有放置Coordinator服務器。
定義2:文件分塊矩陣。
存儲在RAMCloud集群中的文件都會被拆分,并且以數(shù)據(jù)塊的形式存儲在table中,并且table可以跨越多個server,在同一個集群中提高數(shù)據(jù)的可靠性。如果由k(k>3)個Coordinator{dn∈Csm×i}組成的RAMCloud集群中,設F為RAMCloud集群中存儲的某一文件,數(shù)據(jù)庫的大小為bs,則文件F的大小為n×bs,那么F就會有n×m個數(shù)據(jù)塊存儲在k個Coordinator中,則矩陣Fn×m表示文件的分塊,使用{b11,b21,…,bn1}來表示原文件F的數(shù)據(jù)塊,文件的原始數(shù)據(jù)塊用n表示,并且該文件的副本用矩陣Fn×(m-1)表示。
(3)
(4)
當RAMCloud集群得到用戶傳輸?shù)臄?shù)據(jù)時,數(shù)據(jù)塊b11就會存儲在table節(jié)點中,數(shù)據(jù)塊b12作為b11的副本存放在與b11不同的Backup中,同樣b12作為b11的副本2,也存放在與b12相同的機架但是卻不同的Backup中。假設m為副本系數(shù)且m>3,則其他數(shù)據(jù)塊就會存儲在b11、b12、b13以外的Backup中且該Backup是任意的。并且在數(shù)據(jù)的存儲過程中,重復存儲的數(shù)據(jù)會影響到內存的緩存,還會影響到數(shù)據(jù)存儲的精度,所以在RAMCloud中設置MD5索引,查找內存中重復的數(shù)據(jù),其中重復的數(shù)據(jù)文件要經(jīng)過布隆過濾器過濾,在這里該策略不做詳細論述。
算法:存儲優(yōu)化策略。
輸入:數(shù)據(jù)文件{F1,F2,…,Ft},表示用戶上傳t個數(shù)據(jù)文件到系統(tǒng)。
輸出:Disk,表示數(shù)據(jù)文件存儲到磁盤。
1.{F1,F2,…,Ft}←getUpDatafile();
/*獲得用戶上傳數(shù)據(jù)文件*/
2.t←Datafiles.length();
/*數(shù)據(jù)文件的個數(shù)*/
3.RAMCLOUDfile←file[t];
/*數(shù)據(jù)文件存儲到內存云*/
4.fori=0 tot-1 do
5.DatafileInfo={F1,F2,…,Fm}.get(file[j]);
/*獲得數(shù)據(jù)文件i的信息*/
6.ni=Datafile.getBlockDivNum();
/*取得數(shù)據(jù)原始分塊數(shù)*/
7.mi=Datafile.getBlockDuplicateNum();
/*副本系數(shù)*/
8.(Fn×m)i← createBlock×F(ni,mi);
/*構造數(shù)據(jù)文件矩陣模型*/
9.MD5Stri← {t(file),get(i),MD5(64)};
/*MD5的值,刪除內存中的重復文件*/
10.fors=0 tonido
11.foru=0 tomido
12.Blocksuget MatrixValue((Fn×m)i);
/*獲得數(shù)據(jù)文件中的一條數(shù)據(jù)流*/
13.DiskDatafile←Blocksu;
/*將數(shù)據(jù)塊存儲到磁盤文件區(qū)中*/
14.end for
15.end for
16.end for
通過64位MD5索引刪除內存云中的重復數(shù)據(jù),節(jié)省了大量的內存空間,該方法既有效提高了內存云系統(tǒng)的讀/寫準確性,又節(jié)省了內存活動狀態(tài)的空間,完全符合優(yōu)化內存云數(shù)據(jù)存儲的思想。

(5)
(6)
基于負載均衡,數(shù)據(jù)分類將系統(tǒng)中所有數(shù)據(jù)存儲到內存中。設數(shù)據(jù)文件冗余率為r%,由于對重復覆蓋的數(shù)據(jù)進行布隆過濾器過濾,過濾后的數(shù)據(jù)塊大小為a,那么過濾的數(shù)據(jù)占有的內存空間為:

(7)
設原系統(tǒng)內存存儲的數(shù)據(jù)文件占有的內存空間為SUMOm,經(jīng)過重復覆蓋原系統(tǒng)內存中存儲的數(shù)據(jù)文件并且經(jīng)過濾重復的文件后,現(xiàn)在存儲的數(shù)據(jù)文件占有的內存空間SUMMem為:
SUMMem=SUMMem+SUMOm-SUMown=SUMMem+
a×r%]/u
(8)
數(shù)據(jù)文件副本系數(shù)m的值越大,數(shù)據(jù)的可用性越高,且數(shù)據(jù)精準度越高。精確度原數(shù)據(jù)模型可根據(jù)用戶對不同的數(shù)據(jù)文件可用性要求對m進行動態(tài)調節(jié)。在滿足用戶可用性QoS的前提下最大限度地節(jié)約對存儲資源的消耗。根據(jù)文獻[13]定理2,m的最小值的函數(shù)目標為:
(9)
其中,bais表示內存中數(shù)據(jù)可用概率;QoSava表示該數(shù)據(jù)的可用性QoS。
實驗采取的是模擬RAMCloud集群的方式,集群中共有20個節(jié)點,其中包括1個協(xié)調器節(jié)點,19個存儲服務器節(jié)點。這20個節(jié)點中的每一個服務器節(jié)點和硬盤不僅是集群中的主服務器而且是備份服務器,在這20個節(jié)點中的每一個服務器均配置了8 GB內存和100 GB的硬盤。硬盤的緩沖區(qū)為64 MB,磁盤副本參數(shù)為3,主服務器的段大小參數(shù)默認為8 MB,20個服務器節(jié)點模擬聯(lián)想集群服務器(Syatem X3950 X6241JCC),其配置為48個CPU,可擴展112個節(jié)點。
內存云運行期間數(shù)據(jù)需要不斷地從各個服務器傳送至協(xié)調器,通常數(shù)據(jù)存儲的精確度與數(shù)據(jù)量的大小以及數(shù)據(jù)傳輸中各節(jié)點的性能有關,準確率通過式10計算:

(10)
(1)有效存儲準確率對比。
圖3展示了在不同數(shù)據(jù)大小下,引入DSOS后的準確率對比,未引入DSOS時隨著存儲數(shù)據(jù)的增大數(shù)據(jù)存儲的準確率逐漸減小。
(2)有效存儲效率對比。
從圖4可以明顯看出,采用存儲優(yōu)化算法在不同數(shù)據(jù)下呈現(xiàn)出類似于線性的理想存儲效率,并且隨著存儲數(shù)據(jù)的增加,存取效率對比原系統(tǒng)也在不斷提高。實驗結果表明,采用存儲優(yōu)化算法的數(shù)據(jù)越大,其存儲效率也越高。該實驗體現(xiàn)出了基于內存云的大數(shù)據(jù)存儲優(yōu)化算法具有較好的性能和效果。

圖3 相同存儲數(shù)據(jù)下有效存儲準確率的對比

圖4 相同存儲數(shù)據(jù)下有效存儲效率的對比
內存云框架的出現(xiàn)為線數(shù)據(jù)密集(OLDI)的應用帶來了新的機遇與挑戰(zhàn),但是在大數(shù)據(jù)的背景下,海量的數(shù)據(jù)想要準確無誤地存儲到內存中已經(jīng)成為制約其發(fā)展的一個重要問題。針對該問題,提出了基于內存云提升數(shù)據(jù)存儲精確度的策略。該策略根據(jù)RAMCloud的體系結構,將原系統(tǒng)中已存在的數(shù)據(jù)重復覆蓋,經(jīng)過布隆過濾器過濾掉重復的數(shù)據(jù),從而提升了數(shù)據(jù)存儲到RAMCloud的準確率。
下一步研究工作將著重在以下幾方面:在保持RAMCloud中數(shù)據(jù)存儲精確度不變的條件下降低RAMCloud的能耗;在保持內存云較高的性能前提下,降低內存云的能耗;擴展內存云的應用范圍以及更加合理地設計存儲框架。
參考文獻:
[1] DEAN J,CHEMAWAT S.MapReduce:simplified data processing on large clusters[J].Communication of the ACM,2008,51(1):107-113.
[2] 于 炯,廖 彬,張 陶,等.云存儲系統(tǒng)節(jié)能研究綜述[J].計算機科學與探索,2014,8(9):1025-1040.
[3] ARMBRUST M, FOX A,GRIFFITH R,et al. A view of cloud computing[J].Communications of ACM,2010,53(4):50-58.
[4] 褚 征,于 炯,魯 亮,等. 基于內存云的大塊數(shù)據(jù)對象
并行存取策略[J].計算機應用,2016,36(6):1526-1532.
[5] RUMBLE S, KEJRIWAL A, OUSTERHIUT J.Log-struchured memory for DRAM-based storage[C]//Proceeding of the 12th USENIX conference on file and storage technologies.Berkeley:USENIX Association,2014:1-6.
[6] 宋寶燕,王俊陸,王 研.基于范德蒙碼HDFS優(yōu)化存儲策略研究[J].計算機學報,2015,38(9):1825-1837.
[7] 英昌甜,于 炯,魯 亮,等.基于小文件的內存云存儲優(yōu)化策略[J].計算機應用,2014,34(11):3104-3108.
[8] 魯 亮,于 炯,英昌甜,等.內存云架構的磁盤節(jié)能策略[J].計算機應用,2016,34(9):2518-2522.
[9] OUSTERHOUT J,AGRAWL P,ERICKSON D,et al.The case for RAMCLouds:scalable high-performance storage entirely in DRAM[J].ACM SIGOPS Operating Systems Review,2010,43(4):92-105.
[10] 董新華,李瑞軒,周彎彎,等.Hadoop系統(tǒng)性能優(yōu)化與功能增強綜述[J].計算機研究與發(fā)展,2013,50:1-15.
[11] ZHENG Zhiyun,ZHAO Shaofeng,ZHANG Xingjin,et al.Cloud storage management technology for small file based on two-dimensional packing algorithm[C]//Proceedings of the 2013 international conference on computer engineering and networking.Berlin:Spriang-Verlag,2013.
[12] STUTSMAN R.Durability and crash recovery in distributed in-memory storage system[D].Stanford:Stanford University,2013.
[13] ROSENBLUM M,OUSTERHOUT J K.The design and implementation of a log-structured file system[J].ACM SIGOPS Operating System Review,1991,25(5):1-15.
[14] 錢育蓉,于 炯,王衛(wèi)源,等.云計算環(huán)境下軟硬件節(jié)能和負載均衡策略[J].計算機應用,2013,33(12):3326-3330.
[15] RUMBLE S M,KEJRIWA L A,OUSTERHOUT J.Log-stractured memory for DPAM-based storage[C]//Proceedings of the 12th USENIX conference on file and storage technologies.Berkeley:USENIX Association,2014:1-6.
[16] 郭 剛,于 炯,魯 亮,等.內存云分級存儲架構下的數(shù)據(jù)遷移模型[J].計算機應用,2015,35(12):3392-3397.