俞祥鵬
摘要:內(nèi)存數(shù)據(jù)網(wǎng)格存儲(chǔ)系統(tǒng)能夠大大提高數(shù)據(jù)的存儲(chǔ)速度,現(xiàn)有的內(nèi)存數(shù)據(jù)網(wǎng)格原型系統(tǒng)大多支持?jǐn)?shù)據(jù)鍵值對(duì)的存儲(chǔ)。該文通過(guò)利用現(xiàn)有的數(shù)據(jù)網(wǎng)格原型系統(tǒng),實(shí)現(xiàn)了分布式的內(nèi)存文件存儲(chǔ)工具。并對(duì)該工具的存儲(chǔ)性能進(jìn)行分析,并提出幾種影響分布式內(nèi)存數(shù)據(jù)網(wǎng)格文件存儲(chǔ)性能的因素。
關(guān)鍵詞:內(nèi)存數(shù)據(jù)網(wǎng)格;文件存儲(chǔ);性能分析
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)22-0171-03
Abstract:In-memory-grid storage system can increase the speed of data storage. Most existing memory data grid prototype system only support key-value pair storage. In this paper,by using the existing data grid prototype system, we develop a tool that can storage file in In-memory-grid. And analyzed the performance of the tool, And put forward several kinds of influence factors of distributed memory data grid file storage.
Key words:in-memory data grid; file storage; performance analysis
隨著云計(jì)算技術(shù)的普及,產(chǎn)生的數(shù)據(jù)量越來(lái)越大,數(shù)據(jù)共享越來(lái)越普遍。為了處理海量數(shù)據(jù),解決傳統(tǒng)數(shù)據(jù)庫(kù)面臨的大規(guī)模數(shù)據(jù)訪問(wèn)瓶頸問(wèn)題,分布式緩存技術(shù)得以引入。分布式緩存將數(shù)據(jù)分布到多個(gè)緩存服務(wù)節(jié)點(diǎn),在內(nèi)存中管理數(shù)據(jù),對(duì)外提供統(tǒng)一的訪問(wèn)接口,基于冗余備份機(jī)制實(shí)現(xiàn)高可用支持,又被稱為內(nèi)存數(shù)據(jù)網(wǎng)格(IMDG)。IMDG是基于內(nèi)存的新型分布式數(shù)據(jù)鍵值對(duì)存儲(chǔ)系統(tǒng),與分布式緩存相比,可以簡(jiǎn)化應(yīng)用層數(shù)據(jù)訪問(wèn)邏輯的開(kāi)發(fā),減少維護(hù)緩存與數(shù)據(jù)庫(kù)的管理邏輯,屏蔽應(yīng)用與數(shù)據(jù)庫(kù)的交互細(xì)節(jié),并提供持久化機(jī)制將內(nèi)存中的數(shù)據(jù)自動(dòng)存儲(chǔ)于數(shù)據(jù)庫(kù)中[2]。
目前IMDG主要是對(duì)數(shù)據(jù)鍵值對(duì)存儲(chǔ)研究比較多,本文通過(guò)分析現(xiàn)存的IMDG原型系統(tǒng),利用Infinispan內(nèi)存數(shù)據(jù)網(wǎng)格原型實(shí)現(xiàn)的分布式文件存儲(chǔ)。通過(guò)在單機(jī)環(huán)境下和集群環(huán)境下的性能測(cè)試實(shí)驗(yàn),測(cè)試該內(nèi)存數(shù)據(jù)網(wǎng)格的文件讀寫性能,以及驗(yàn)證影響內(nèi)存數(shù)據(jù)網(wǎng)格的讀寫性能的因素[2,6]。
1 內(nèi)存數(shù)據(jù)網(wǎng)格的概述
1.1分布式緩存
在計(jì)算機(jī)中,分布式緩存是傳統(tǒng)概念上單一緩沖的擴(kuò)充。一個(gè)分布式緩存跨越多個(gè)服務(wù)器,因此其具有可擴(kuò)展性和事物處理性。通常主要是用于存儲(chǔ)應(yīng)用程序數(shù)據(jù)駐留在數(shù)據(jù)庫(kù)和web會(huì)話數(shù)據(jù)。因?yàn)閮?nèi)存變得非常便宜和網(wǎng)卡已經(jīng)變得非??旆植际骄彺娴腫1]現(xiàn)在已經(jīng)使用的越來(lái)越廣泛。對(duì)于分布式緩存主要的特性有高性能、動(dòng)態(tài)可擴(kuò)展、高可用性、易用性、分布式代碼執(zhí)行[3,4]。現(xiàn)今,很多的系統(tǒng)都使用了數(shù)據(jù)緩存技術(shù),典型的數(shù)據(jù)檢索系統(tǒng),將數(shù)據(jù)檢索技術(shù)和數(shù)據(jù)緩存技術(shù)結(jié)合起來(lái),極大地提高了檢索效率。
1.2 內(nèi)存數(shù)據(jù)網(wǎng)格文件存儲(chǔ)
Infinispan是JBoss Cache緩存框架的后續(xù)項(xiàng)目,它是一個(gè)開(kāi)源的數(shù)據(jù)網(wǎng)格平臺(tái),用于訪問(wèn)分布式狀態(tài)的群集節(jié)點(diǎn)。它可以提供無(wú)固定類型的存儲(chǔ)key-value值,文件的存儲(chǔ),基于網(wǎng)格的數(shù)據(jù)存儲(chǔ)。在存儲(chǔ)數(shù)據(jù)方面我們可以設(shè)置數(shù)據(jù)在集群中保存的副本數(shù)量;同時(shí)提供負(fù)載均衡,以及失效節(jié)點(diǎn)的數(shù)據(jù)自動(dòng)遷移到其他節(jié)點(diǎn)的功能[5]。GridFileSystem(網(wǎng)格文件系統(tǒng))是一個(gè)全新實(shí)驗(yàn)性的API,這些API使Infinispan后端的網(wǎng)格數(shù)據(jù)像文件系統(tǒng)一樣展示出來(lái)。對(duì)于實(shí)現(xiàn)的系統(tǒng),集群中某個(gè)節(jié)點(diǎn)失效時(shí),該節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)會(huì)自動(dòng)遷移到其他的節(jié)點(diǎn)上,實(shí)現(xiàn)數(shù)據(jù)的可靠性存儲(chǔ)。同時(shí)如果某個(gè)節(jié)點(diǎn)上存儲(chǔ)的數(shù)據(jù)過(guò)多,也能夠進(jìn)行負(fù)載平衡。
1.3 工具的實(shí)現(xiàn)
內(nèi)存數(shù)據(jù)網(wǎng)格提供系統(tǒng)兩種類型的時(shí)間存儲(chǔ)。一種是文件流形式的數(shù)據(jù)存儲(chǔ),主要存儲(chǔ)的內(nèi)容是文件。對(duì)于這種形式的數(shù)據(jù),內(nèi)存數(shù)據(jù)網(wǎng)格(Infinispan)首先要先去內(nèi)存文件系統(tǒng)中取數(shù)據(jù),在集群中選擇數(shù)據(jù)所要存放的節(jié)點(diǎn)(數(shù)據(jù)在集群中存兩份),然后通過(guò)Jgroup進(jìn)行數(shù)據(jù)的傳輸。另一種是Key-Value類型的數(shù)據(jù)。對(duì)于這種數(shù)據(jù)的存儲(chǔ)內(nèi)存數(shù)據(jù)網(wǎng)格(Infinispan)直接接收套接字客戶端發(fā)送過(guò)來(lái)的Key-Value的鍵值對(duì),然后在集群中選擇兩個(gè)節(jié)點(diǎn)進(jìn)行存儲(chǔ)(數(shù)據(jù)存放兩份),通過(guò)Jgroup進(jìn)行數(shù)據(jù)的傳送。
2 實(shí)驗(yàn)方案介紹
測(cè)試的系統(tǒng)采用的是Ubuntu14.1,內(nèi)核版本是3.11.10.11;java的環(huán)境是JDK8。虛擬機(jī)內(nèi)存大小是2GB。采用的方法是測(cè)試得到的數(shù)據(jù)取平均值,在試驗(yàn)中每組數(shù)據(jù)測(cè)了50次,然后求其平均值。單機(jī)環(huán)境下的測(cè)試,主要測(cè)試因素是文件大小和文件存取時(shí)分塊大小。文件存取時(shí)分塊大小,主要指的是,文件在存儲(chǔ)到內(nèi)存數(shù)據(jù)網(wǎng)格時(shí),內(nèi)存數(shù)據(jù)網(wǎng)格將文件分成塊,進(jìn)行分塊傳輸。文件在內(nèi)存數(shù)據(jù)網(wǎng)格中也是以塊的大小存放。這種分塊對(duì)上層用戶是透明的。下面分針對(duì)這兩種情況進(jìn)行了測(cè)試。在集群中的測(cè)試過(guò)程中因變量為讀文件時(shí)間和寫文件時(shí)間,自變量為文件大小、分塊的大小、集群環(huán)境。實(shí)驗(yàn)的交換機(jī)的帶寬是1000M/S。主要目的是為了找出在集群環(huán)境下,文件大小,文件存入是分塊的大小,集群環(huán)境與文件的存取時(shí)間的關(guān)系。
2.1實(shí)驗(yàn)集群場(chǎng)景選擇
集群環(huán)境的測(cè)試中,主要目的是為了測(cè)試,集群的分布與文件的讀寫時(shí)間的關(guān)系。主要考慮的因素有兩點(diǎn):一、同一臺(tái)物理機(jī)上的虛擬機(jī)之間會(huì)不會(huì)由于虛擬化的不穩(wěn)定,從而影響讀寫性能;二、文件存儲(chǔ)的過(guò)程中存儲(chǔ)在本節(jié)點(diǎn)與不存儲(chǔ)在本節(jié)點(diǎn)讀寫性能是否有影響。根據(jù)這兩個(gè)猜想我們?cè)O(shè)計(jì)了下面的集群中的幾個(gè)場(chǎng)景。在集群環(huán)境下我們采用下面圖中的幾種結(jié)構(gòu)。場(chǎng)景A寫AB存,一臺(tái)物理機(jī)上運(yùn)行兩臺(tái)虛擬機(jī),A虛擬機(jī)寫入數(shù)據(jù),A和B虛擬機(jī)存入數(shù)據(jù)(數(shù)據(jù)在集群中存儲(chǔ)兩份)。場(chǎng)景A寫B(tài)C存,一臺(tái)物理機(jī)上運(yùn)行三臺(tái)虛擬機(jī),A虛擬機(jī)寫入數(shù)據(jù),BC存入數(shù)據(jù)(數(shù)據(jù)在集群中存儲(chǔ)兩份);場(chǎng)景A寫AD存,物理機(jī)(HA-A)上運(yùn)行虛擬機(jī)A,物理機(jī)(HA-B)上運(yùn)行虛擬機(jī)D,物理機(jī)(HA-C)運(yùn)行虛擬機(jī)G,虛擬機(jī)A寫入數(shù)據(jù),存放在A和D兩個(gè)節(jié)點(diǎn)上;場(chǎng)景A寫B(tài)D存,物理機(jī)(HA-A)上運(yùn)行兩臺(tái)虛擬機(jī)A和B,物理機(jī)(HA-B)上運(yùn)行虛擬機(jī)D,虛擬機(jī)A寫入文件,虛擬機(jī)B和虛擬機(jī)D存儲(chǔ)文件。在這些場(chǎng)景中我們固定的文件大小為100M,文件塊大小為50M。
2.2數(shù)據(jù)的監(jiān)控
對(duì)于影響存取時(shí)間的猜想:數(shù)據(jù)段之間的時(shí)間隔,系統(tǒng)在接收和發(fā)送數(shù)據(jù)時(shí)都有一個(gè)發(fā)送緩沖區(qū)和接收緩沖區(qū),每接收完一個(gè)緩沖區(qū),集群需要確定當(dāng)前所有的集群是否是存活,發(fā)送數(shù)據(jù)。如果數(shù)據(jù)丟失,那么會(huì)重新發(fā)送一份發(fā)送之前緩沖區(qū)中的數(shù)據(jù)。對(duì)應(yīng)場(chǎng)景虛擬機(jī)環(huán)境和物理機(jī)環(huán)境的對(duì)比,存文件的時(shí)間效率不高的原因可能是虛擬機(jī)的不穩(wěn)定導(dǎo)致。
3 實(shí)驗(yàn)結(jié)果分析
一個(gè)PUT(存)操作,只會(huì)產(chǎn)生網(wǎng)格中節(jié)點(diǎn)子集數(shù)(numOwners)個(gè)遠(yuǎn)程調(diào)用。一個(gè)GET操作只針對(duì)網(wǎng)格中某一個(gè)節(jié)點(diǎn)產(chǎn)生一次遠(yuǎn)程調(diào)用。另為,在分布式模式下,不管配置的是同步調(diào)用還是異步調(diào)用,如果緩存條目不存在于本地時(shí),都是采用同步調(diào)用請(qǐng)求用來(lái)從其他節(jié)點(diǎn)獲取數(shù)據(jù)。對(duì)于數(shù)據(jù)的讀,時(shí)間上存在很大的變化,主要是它總是優(yōu)先讀取本地節(jié)點(diǎn)的數(shù)據(jù),才去讀取對(duì)應(yīng)節(jié)點(diǎn)的數(shù)據(jù)。
4 結(jié)束語(yǔ)
Infinispan分布式模式通過(guò)連續(xù)性哈希算法從網(wǎng)格中選擇出節(jié)點(diǎn)來(lái)保存緩存條目,節(jié)點(diǎn)總數(shù)就是數(shù)據(jù)網(wǎng)格中節(jié)點(diǎn)子集,哈希算法通過(guò)配置文件知道節(jié)點(diǎn)子集總數(shù),同時(shí)它維護(hù)緩存條目一直存在于這個(gè)數(shù)的節(jié)點(diǎn)上。節(jié)點(diǎn)子集數(shù)的大小與Infinispan數(shù)據(jù)網(wǎng)格的性能和容錯(cuò)能力相關(guān),節(jié)點(diǎn)子集數(shù)太大,即緩存條目保存在很多節(jié)點(diǎn)上會(huì)影響性能,但節(jié)點(diǎn)子集數(shù)太小又影響容錯(cuò)能力。
數(shù)據(jù)網(wǎng)格通過(guò)哈希算法從網(wǎng)格中存取數(shù)據(jù),存取數(shù)據(jù)的過(guò)程中不是向所有節(jié)點(diǎn)發(fā)送多播請(qǐng)求,存取過(guò)程也不需要維護(hù)很繁多的元數(shù)據(jù)。一個(gè)PUT(存)操作,只會(huì)產(chǎn)生網(wǎng)格中節(jié)點(diǎn)子集數(shù)(numOwners)個(gè)遠(yuǎn)程調(diào)用。一個(gè)GET操作只針對(duì)網(wǎng)格中某一個(gè)節(jié)點(diǎn)產(chǎn)生一次遠(yuǎn)程調(diào)運(yùn),在后臺(tái)實(shí)質(zhì)也是產(chǎn)生網(wǎng)格中節(jié)點(diǎn)子集數(shù)(numOwners)個(gè)調(diào)用,且這些調(diào)用是并發(fā)進(jìn)行的,查詢到的結(jié)果會(huì)返回給調(diào)用者。另為,在分布式模式下,不管配置的是同步調(diào)用還是異步調(diào)用,如果緩存條目不存在于本地時(shí),都是采用同步調(diào)用請(qǐng)求用來(lái)從其他節(jié)點(diǎn)獲取數(shù)據(jù)。因此寫數(shù)據(jù)時(shí)間比讀數(shù)據(jù)時(shí)間長(zhǎng)。
參考文獻(xiàn):
[1] 秦秀磊, 張文博, 魏峻, 等. 云計(jì)算環(huán)境下分布式緩存技術(shù)的現(xiàn)狀與挑戰(zhàn)[J]. 軟件學(xué)報(bào), 2013, 24(1): 50-66.
[2] Marchioni F. Infinispan data grid platform[M]. Packt Publishing Ltd, 2012.
[3] Chandra D G, DGE&T M L E. A Survey on Cloud Database[J]. IEEE IT Professional, 2013.
[4] Chandra D G, Prakash R, Lamdharia S. A Study on Cloud Database[C]//Computational Intelligence and Communication Networks (CICN), 2012 Fourth International Conference on. IEEE, 2012: 513-519.
[5] 劉朝輝,王偉,王彥士,等.面向內(nèi)存數(shù)據(jù)網(wǎng)格的分布式事務(wù)保障機(jī)制[J].計(jì)算機(jī)科學(xué)與探索, 2013,12(18):812-822.