魏曉輝, 崔浩龍, 李洪亮, 白 鑫
(吉林大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 長(zhǎng)春 130012)
地震勘探是勘測(cè)地下石油與天然氣資源的重要方法, 在地殼研究等領(lǐng)域應(yīng)用廣泛. 勘探過(guò)程由數(shù)據(jù)采集、 數(shù)據(jù)處理和數(shù)據(jù)解釋3個(gè)階段組成. 通過(guò)數(shù)據(jù)采集獲得反射回來(lái)的原始地震波信號(hào), 運(yùn)用降噪、 削弱干擾、 提高分辨率等進(jìn)行數(shù)據(jù)處理, 對(duì)處理后的三維地震體數(shù)據(jù)進(jìn)行可視化, 可直觀地展現(xiàn)地球深部的具體構(gòu)造, 方便領(lǐng)域內(nèi)專家對(duì)地震數(shù)據(jù)進(jìn)行解釋, 為科學(xué)研究和資源勘探提供了便利工具.
目前, GOCAD,GeoEAST,Petrol,Ocean等三維建模軟件主要以處理解釋一體化的模式運(yùn)作, 在集中的數(shù)據(jù)管理層上對(duì)地震數(shù)據(jù)進(jìn)行可視化, 隨著數(shù)據(jù)采集技術(shù)的迅猛發(fā)展, 以及人們對(duì)高精度、 高分辨率數(shù)據(jù)的需求增加, 地震數(shù)據(jù)量級(jí)也呈指數(shù)級(jí)增長(zhǎng), 而計(jì)算機(jī)的存儲(chǔ)能力并不會(huì)無(wú)限擴(kuò)展. 因此許多平臺(tái)在面臨大規(guī)模數(shù)據(jù)的存儲(chǔ)瓶頸時(shí)選擇將其分成多個(gè)小數(shù)據(jù)塊進(jìn)行加載, 但該方法并未解決計(jì)算機(jī)存儲(chǔ)能力有限的問(wèn)題, 使可視化平臺(tái)的發(fā)展受到限制. GOCAD是目前國(guó)際公認(rèn)的主流建模軟件, 具有強(qiáng)大的三維建模、 數(shù)據(jù)可視化、 地質(zhì)解釋和分析的功能, 實(shí)現(xiàn)了高水平的半智能化建模[1-4]. GeoEast地震數(shù)據(jù)處理解釋一體化系統(tǒng)是國(guó)內(nèi)在該領(lǐng)域探索的代表, 系統(tǒng)整體功能已達(dá)到國(guó)際先進(jìn)水平[5-6]. 但這些三維地震體數(shù)據(jù)可視化系統(tǒng)都有一個(gè)共同缺陷, 就是對(duì)地震數(shù)據(jù)進(jìn)行集中處理解釋, 面對(duì)地震數(shù)據(jù)規(guī)模的快速增長(zhǎng), 在未來(lái)必將產(chǎn)生地震數(shù)據(jù)規(guī)模過(guò)大與存儲(chǔ)容量不足之間的矛盾.
用戶在對(duì)地震數(shù)據(jù)訪問(wèn)的過(guò)程中不會(huì)隨時(shí)都需要完整的數(shù)據(jù), 而是僅關(guān)注其中的某些區(qū)域, 稱為“興趣區(qū)域”[5,7-8], 隨著用戶的拖拽、 放大、 縮小等操作, 興趣區(qū)域也會(huì)隨之轉(zhuǎn)移, 帶來(lái)不同分塊文件的更替. 如果能對(duì)用戶的訪問(wèn)行為進(jìn)行預(yù)測(cè), 在用戶關(guān)注當(dāng)前區(qū)域時(shí)預(yù)測(cè)其下一步需要的數(shù)據(jù), 提前從文件系統(tǒng)加載到緩存中, 就能大量減少用戶等待時(shí)間. 文獻(xiàn)[9-10]對(duì)經(jīng)典的訪問(wèn)預(yù)測(cè)算法——LS(last successor)算法進(jìn)行了研究: 文獻(xiàn)[9]提出將文件訪問(wèn)順序與用戶身份綁定, 以應(yīng)對(duì)不同用戶在訪問(wèn)同一文件后分別訪問(wèn)不同文件的情形; 文獻(xiàn)[10]則提出記錄當(dāng)前訪問(wèn)文件的兩個(gè)后繼, 作為對(duì)LS算法僅記錄一個(gè)后繼文件的擴(kuò)充. 但上述方法均不適用于地學(xué)數(shù)據(jù)可視化過(guò)程中復(fù)雜的訪問(wèn)模式, 用戶對(duì)地震數(shù)據(jù)的訪問(wèn)會(huì)根據(jù)不同的可視化需要而變化, LS訪問(wèn)預(yù)測(cè)算法無(wú)法適應(yīng)該需求.
基于以上地學(xué)數(shù)據(jù)可視化平臺(tái)面臨的問(wèn)題, 本文提出一個(gè)構(gòu)造云數(shù)據(jù)中心存儲(chǔ)數(shù)據(jù), 在客戶主機(jī)上部署輕量級(jí)客戶端程序按需遠(yuǎn)程加載數(shù)據(jù)的計(jì)算模式, 解決了海量地震數(shù)據(jù)的存儲(chǔ)難題; 并提出使用分布式緩存技術(shù), 避免客戶端與服務(wù)端之間頻繁的網(wǎng)絡(luò)通信, 同時(shí)減少服務(wù)端訪問(wèn)云端文件系統(tǒng)帶來(lái)的延遲; 基于關(guān)聯(lián)規(guī)則挖掘用戶對(duì)地震數(shù)據(jù)的訪問(wèn)模式, 將符合概率條件的文件訪問(wèn)順序記錄下來(lái), 用于預(yù)測(cè)用戶下一步訪問(wèn), 適應(yīng)用戶多種訪問(wèn)模式的情形. 實(shí)驗(yàn)結(jié)果表明, 本文工作有效減少了客戶端的存儲(chǔ)占用, 實(shí)現(xiàn)了遠(yuǎn)程地震數(shù)據(jù)在本地的快速可視化.
本文提出的云存儲(chǔ)系統(tǒng)分為提供大規(guī)模數(shù)據(jù)存儲(chǔ)服務(wù)的云數(shù)據(jù)中心與對(duì)地學(xué)數(shù)據(jù)進(jìn)行可視化解釋的遠(yuǎn)程客戶端兩部分, 利用網(wǎng)絡(luò)進(jìn)行通信. 在云端存儲(chǔ)部分, 采用八叉樹結(jié)構(gòu)對(duì)地震數(shù)據(jù)進(jìn)行分塊處理, 將數(shù)據(jù)塊線性排列進(jìn)行編碼, 一個(gè)數(shù)據(jù)塊稱為一個(gè)tile, 若干tile構(gòu)成一個(gè)file, 組成地震數(shù)據(jù)塊的索引. 利用地震數(shù)據(jù)一次寫入多次讀取的應(yīng)用特性, 將建立索引的地震數(shù)據(jù)分塊存儲(chǔ)在Hadoop分布式文件系統(tǒng)(HDFS)中, 解決了單機(jī)集中存儲(chǔ)大規(guī)模地震數(shù)據(jù)時(shí)面臨的存儲(chǔ)容量瓶頸問(wèn)題, 同時(shí)依靠HDFS對(duì)數(shù)據(jù)文件副本的管理策略, 使得云端存儲(chǔ)系統(tǒng)能為用戶提供高可用性的數(shù)據(jù)服務(wù). 遠(yuǎn)程客戶端可部署在計(jì)算機(jī)、 工作站、 移動(dòng)設(shè)備等多種硬件平臺(tái)上, 按需從云端存儲(chǔ)獲取數(shù)據(jù)塊進(jìn)行可視化. 為了避免客戶端與云存儲(chǔ)頻繁進(jìn)行數(shù)據(jù)傳輸, 加速數(shù)據(jù)加載過(guò)程, 在客戶端與云端設(shè)立分布式緩存, 將常用的數(shù)據(jù)塊緩存到內(nèi)存或本地存儲(chǔ)中, 降低了頻繁數(shù)據(jù)傳輸帶來(lái)的額外時(shí)間開銷, 實(shí)現(xiàn)了大規(guī)模地震數(shù)據(jù)在輕量級(jí)客戶端下的快速可視化.
基于云端數(shù)據(jù)緩存系統(tǒng)架構(gòu)的地學(xué)數(shù)據(jù)可視化平臺(tái), 能實(shí)現(xiàn)輕量級(jí)的客戶端軟件, 簡(jiǎn)化平臺(tái)部署流程, 減少客戶端的存儲(chǔ)容量占用, 同時(shí)云端存儲(chǔ)的數(shù)據(jù)能支持多用戶共享, 允許多個(gè)遠(yuǎn)端用戶對(duì)數(shù)據(jù)的并發(fā)操作, 利用分布式緩存加快了數(shù)據(jù)加載過(guò)程, 實(shí)現(xiàn)地震數(shù)據(jù)的快速可視化.
云存儲(chǔ)架構(gòu)具有客戶端和云數(shù)據(jù)中心兩層緩存, 其中云數(shù)據(jù)中心由地震數(shù)據(jù)索引、 HDFS、 云端數(shù)據(jù)緩存、 ARLS(association rule last successor)訪問(wèn)預(yù)測(cè)算法組成, 大規(guī)模地震數(shù)據(jù)被分布存儲(chǔ)在HDFS中, 任意地震數(shù)據(jù)中tile數(shù)據(jù)塊在HDFS中的存儲(chǔ)位置由地震數(shù)據(jù)索引維護(hù), 便于云存儲(chǔ)系統(tǒng)快速定位到所需數(shù)據(jù)的存儲(chǔ)位置進(jìn)行加載, ARLS訪問(wèn)預(yù)測(cè)算法根據(jù)用戶的訪問(wèn)模式預(yù)測(cè)用戶行為, 提前預(yù)取用戶所需的數(shù)據(jù), 云端數(shù)據(jù)緩存與客戶端緩存按照分布式緩存管理策略存儲(chǔ)近期經(jīng)常使用的數(shù)據(jù)塊, 減少數(shù)據(jù)通信及對(duì)文件系統(tǒng)的訪問(wèn)頻率, 以支持大規(guī)模地震數(shù)據(jù)的快速可視化.
地震探測(cè)數(shù)據(jù)云存儲(chǔ)系統(tǒng)結(jié)合了地震數(shù)據(jù)索引[11-12]、 分布式文件系統(tǒng)HDFS、 訪問(wèn)預(yù)測(cè)算法、 分布式緩存[13]、 Boost網(wǎng)絡(luò)通信等技術(shù), 整合了廣泛分布的存儲(chǔ)資源, 將大量豐富的大型地震數(shù)據(jù)資源放置在云存儲(chǔ)系統(tǒng)中進(jìn)行統(tǒng)一管理和調(diào)度, 以低成本、 高可靠性地為用戶提供高性能、 按需的數(shù)據(jù)資源. 用戶無(wú)需關(guān)心云存儲(chǔ)的架構(gòu)和存儲(chǔ)方式, 可在任何地方快速訪問(wèn)需要的地震數(shù)據(jù), 克服了集中存儲(chǔ)模式的不足, 實(shí)現(xiàn)了云端大型地震數(shù)據(jù)的快速三維可視化.
云存儲(chǔ)系統(tǒng)不僅以八叉樹結(jié)構(gòu)對(duì)地震數(shù)據(jù)進(jìn)行分塊處理, 還利用八叉樹對(duì)地震數(shù)據(jù)進(jìn)行了多種分辨率的采樣, 以滿足用戶需求的多樣性. 當(dāng)客戶端設(shè)備與云存儲(chǔ)系統(tǒng)建立初始連接時(shí), 云存儲(chǔ)系統(tǒng)先為用戶返回所需數(shù)據(jù)的低分辨率采樣, 保證客戶端設(shè)備能快速顯示出可視化的地震數(shù)據(jù). 用戶之后會(huì)對(duì)低分辨率可視化結(jié)果進(jìn)行操作, 如拖拽、 拉伸、 放大、 縮小等, 這就需要更高分辨率的數(shù)據(jù)來(lái)完成, 因此客戶端向服務(wù)器提出數(shù)據(jù)加載請(qǐng)求.
服務(wù)器在等待客戶端數(shù)據(jù)請(qǐng)求的這段空閑時(shí)間內(nèi), 利用用戶的歷史訪問(wèn)記錄, 通過(guò)ARLS訪問(wèn)預(yù)測(cè)算法找出用戶下一步最可能訪問(wèn)的數(shù)據(jù), 提前預(yù)取到云端數(shù)據(jù)緩存. 當(dāng)接收到用戶的數(shù)據(jù)請(qǐng)求后, 先到云端數(shù)據(jù)緩存中進(jìn)行查找, 如果數(shù)據(jù)已經(jīng)預(yù)取, 則可直接返回給用戶, 避免了用戶等待, 同時(shí)訪問(wèn)預(yù)測(cè)模型會(huì)繼續(xù)預(yù)測(cè)下一步需要的數(shù)據(jù); 如果數(shù)據(jù)未預(yù)取到緩存中, 則需要根據(jù)地震數(shù)據(jù)索引獲得數(shù)據(jù)在集群中的位置, 將其加載到云端數(shù)據(jù)緩存中, 并返回給用戶, 訪問(wèn)預(yù)測(cè)模型也會(huì)根據(jù)用戶的訪問(wèn)實(shí)時(shí)進(jìn)行調(diào)整, 以保證預(yù)測(cè)的準(zhǔn)確率.
服務(wù)器可以并行處理多用戶的數(shù)據(jù)請(qǐng)求, 并在服務(wù)器和客戶端建立了雙層數(shù)據(jù)緩存, 客戶端部分利用內(nèi)存作為高速緩存, 用于存儲(chǔ)近期可視化的數(shù)據(jù); 云端數(shù)據(jù)緩存則根據(jù)訪問(wèn)預(yù)測(cè)模型的結(jié)果, 存儲(chǔ)未來(lái)熱點(diǎn)區(qū)域的數(shù)據(jù), 避免數(shù)據(jù)查找和讀寫持久化存儲(chǔ)設(shè)備, 加速了地震數(shù)據(jù)的可視化進(jìn)程.
集中存儲(chǔ)地震數(shù)據(jù)的云數(shù)據(jù)中心需要提供一些API接口, 便于客戶端遠(yuǎn)程連接到數(shù)據(jù)中心對(duì)文件進(jìn)行相應(yīng)操作, 也為服務(wù)器檢索、 加載數(shù)據(jù)文件、 獲取訪問(wèn)預(yù)測(cè)結(jié)果、 維護(hù)云端數(shù)據(jù)緩存提供工具, 其中對(duì)八叉樹結(jié)構(gòu)的索引記錄在.ldm文件中, 由SEG-Y轉(zhuǎn)換的tile數(shù)據(jù)存儲(chǔ)在.dat文件中, 二者共同構(gòu)成LDM文件供平臺(tái)加載數(shù)據(jù)使用. API接口功能列于表1.
云數(shù)據(jù)中心為開發(fā)者提供了對(duì)云端數(shù)據(jù)緩存和并行文件系統(tǒng)操作的應(yīng)用接口, 直接對(duì)外提供了針對(duì)地震數(shù)據(jù)的數(shù)據(jù)服務(wù), 使開發(fā)者可遠(yuǎn)程使用數(shù)據(jù)中心開放的地震數(shù)據(jù)構(gòu)建自己的獨(dú)立應(yīng)用, 進(jìn)行地震數(shù)據(jù)的研究與分析工作, 研究數(shù)據(jù)不再僅局限于科研領(lǐng)域, 而是供各行業(yè)根據(jù)自身需要發(fā)掘其中蘊(yùn)含的價(jià)值, 真正實(shí)現(xiàn)數(shù)據(jù)開放與共享.
表1 API接口功能
OpenProbe地學(xué)數(shù)據(jù)可視化平臺(tái)是一個(gè)具有自主知識(shí)產(chǎn)權(quán)的可視化平臺(tái), 也是對(duì)本文緩存技術(shù)進(jìn)行驗(yàn)證的實(shí)驗(yàn)平臺(tái), 該平臺(tái)解決了數(shù)據(jù)規(guī)模過(guò)大與內(nèi)存容量有限的矛盾, 實(shí)現(xiàn)了內(nèi)存的動(dòng)態(tài)加載機(jī)制, 能在集中模式下對(duì)數(shù)據(jù)進(jìn)行快速可視化. OpenProbe平臺(tái)的OpenProbeLDM模塊為上層渲染模塊提供了面向大規(guī)模地震數(shù)據(jù)的數(shù)據(jù)訪問(wèn)接口, 支持對(duì)勘探行業(yè)普遍使用的SEG-Y格式三維地震數(shù)據(jù)的快速可視化, 能將海量三維體數(shù)據(jù)以八叉樹的格式進(jìn)行分層和分塊, 以獲得多分辨率數(shù)據(jù)塊, 在數(shù)據(jù)渲染過(guò)程中根據(jù)需要實(shí)時(shí)將所需數(shù)據(jù)塊加載到內(nèi)存中, 實(shí)現(xiàn)在有限的內(nèi)存條件下對(duì)大規(guī)模地震數(shù)據(jù)的實(shí)時(shí)渲染.
八叉樹存儲(chǔ)結(jié)構(gòu)在對(duì)三維體數(shù)據(jù)進(jìn)行劃分與存儲(chǔ)時(shí), 將體數(shù)據(jù)放置在一個(gè)能容納它的最小滿八叉樹中, 根據(jù)體數(shù)據(jù)的規(guī)模計(jì)算八叉樹的層數(shù), 逐層對(duì)體數(shù)據(jù)進(jìn)行八等分, 每個(gè)數(shù)據(jù)塊作為八叉樹結(jié)構(gòu)的一個(gè)節(jié)點(diǎn), 稱為tile, 其中第(n-1)層的數(shù)據(jù)塊由第n層的數(shù)據(jù)塊采樣而形成, 據(jù)此形成上層的低分辨率數(shù)據(jù). 將三維體數(shù)據(jù)劃分而成的八叉樹結(jié)構(gòu)線性存儲(chǔ)在磁盤文件中, 對(duì)所有數(shù)據(jù)塊進(jìn)行編碼, 使用tileID標(biāo)識(shí)唯一的數(shù)據(jù)塊, 從而建立數(shù)據(jù)索引, 對(duì)三維體數(shù)據(jù)用八叉樹劃分過(guò)程如圖1所示.
圖1 三維體數(shù)據(jù)的八叉樹存儲(chǔ)結(jié)構(gòu)Fig.1 Octree storage structure of three-dimensional data
本文將遠(yuǎn)程數(shù)據(jù)緩存技術(shù)應(yīng)用在OpenProbe平臺(tái)上, 使用八叉樹結(jié)構(gòu)對(duì)三維地震體數(shù)據(jù)進(jìn)行數(shù)據(jù)索引, 利用云數(shù)據(jù)中心的API接口進(jìn)行客戶端與云端系統(tǒng)的交互, 實(shí)現(xiàn)了以下目標(biāo):
1) 構(gòu)建云數(shù)據(jù)中心集中存儲(chǔ)大規(guī)模地震數(shù)據(jù), 節(jié)約了客戶端的存儲(chǔ)資源;
2) 建立遠(yuǎn)端服務(wù)器數(shù)據(jù)緩存, 提出ARLS訪問(wèn)預(yù)測(cè)算法, 提高了緩存命中率, 加速了數(shù)據(jù)加載過(guò)程;
3) 建立客戶端的本地?cái)?shù)據(jù)緩存, 減少網(wǎng)絡(luò)通信頻率, 使遠(yuǎn)程數(shù)據(jù)加載的時(shí)間開銷接近本地?cái)?shù)據(jù)加載;
4) 節(jié)約客戶端設(shè)備的軟、 硬件資源, 在低消耗的前提下完成數(shù)據(jù)的快速可視化.
在地學(xué)數(shù)據(jù)可視化過(guò)程中, 人們通常在同一時(shí)間無(wú)法關(guān)注整個(gè)地震數(shù)據(jù), 而是僅關(guān)注某一特定區(qū)域, 該區(qū)域稱為“興趣區(qū)域”. 伴隨著對(duì)地震數(shù)據(jù)諸如拖拽、 放大、 縮小等操作, 興趣區(qū)域會(huì)隨之轉(zhuǎn)移, 導(dǎo)致對(duì)不同分塊文件的頻繁訪問(wèn), 在很多系統(tǒng)中, 這種數(shù)據(jù)訪問(wèn)模式都被視為獨(dú)立事件. 事實(shí)上, 數(shù)據(jù)請(qǐng)求并非完全隨機(jī), 而是用戶或程序行為驅(qū)動(dòng)的, 存在特定的訪問(wèn)模式[14]. 如果能對(duì)用戶的訪問(wèn)模式進(jìn)行預(yù)測(cè), 將下一步要訪問(wèn)的文件預(yù)取到服務(wù)器緩存中, 即可節(jié)省大量的文件檢索與讀取時(shí)間, 因此本文在服務(wù)器端根據(jù)用戶對(duì)地震數(shù)據(jù)訪問(wèn)的歷史記錄運(yùn)行文件訪問(wèn)預(yù)測(cè)算法, 對(duì)用戶未來(lái)的訪問(wèn)模式進(jìn)行預(yù)測(cè).
圖2 用戶的不同訪問(wèn)模式Fig.2 User’s different access modes
對(duì)用戶訪問(wèn)記錄進(jìn)行分析表明, 由于不同時(shí)刻用戶對(duì)數(shù)據(jù)瀏覽的需求不同, 其對(duì)文件的訪問(wèn)模式并不唯一. 如圖2所示, 用戶U1在初始加載低分辨率數(shù)據(jù)f0后會(huì)有兩種訪問(wèn)模式: 當(dāng)用戶需要仔細(xì)查看當(dāng)前區(qū)域, 對(duì)當(dāng)前區(qū)域進(jìn)行放大時(shí), 會(huì)需要該區(qū)域內(nèi)的高分辨率數(shù)據(jù)f1; 當(dāng)用戶大致瀏覽整個(gè)地學(xué)數(shù)據(jù)時(shí), 會(huì)快速移動(dòng)可視區(qū)域, 需要剩余的低分辨率數(shù)據(jù)f3. 用戶有多種訪問(wèn)需求時(shí), 會(huì)形成多個(gè)訪問(wèn)模式. 經(jīng)典的文件預(yù)測(cè)模型LS在面對(duì)這種情形時(shí)只能選擇一個(gè)后繼作為f0的預(yù)測(cè)結(jié)果, LS預(yù)測(cè)嚴(yán)重依賴于訪問(wèn)順序, 面對(duì)用戶切換訪問(wèn)模式時(shí)會(huì)失效.
本文提出一種ARLS算法, 通過(guò)使用數(shù)據(jù)挖掘中常用的關(guān)聯(lián)規(guī)則, 挖掘文件訪問(wèn)順序之間的聯(lián)系. 其中用戶的歷史訪問(wèn)記錄為H, minsup為最小支持度, 最終預(yù)測(cè)結(jié)果存儲(chǔ)在STL關(guān)聯(lián)容器M中, 算法描述如下.
算法1(ARLS) ARLS (H,minsup,M).
遍歷歷史記錄H;
產(chǎn)生單元素構(gòu)成的頻繁項(xiàng)集L1={large 1-items};
根據(jù)L1生成二元項(xiàng)構(gòu)成的候選集C2;
forall recordr∈Hdo begin
選出出現(xiàn)在C2中的記錄r, 構(gòu)成集合Cr;
forallc∈Crdo
c.count++;
end
從C2中選出c.count≥最小支持度minsup的項(xiàng)構(gòu)成二元頻繁項(xiàng)集L2;
end
遍歷二元頻繁項(xiàng)集L2, 以第一個(gè)元素為key, 第二個(gè)元素為value生成訪問(wèn)預(yù)測(cè)記錄, 存儲(chǔ)在關(guān)聯(lián)容器M中;
end.
最小支持度minsup由用戶確定, 最終L2保存了符合篩選條件的二元頻繁項(xiàng)集, 即為用戶最常用的訪問(wèn)順序, 將結(jié)果以〈front, successor〉的鍵值對(duì)形式保存在關(guān)聯(lián)容器M中, 一個(gè)前驅(qū)文件可對(duì)應(yīng)多個(gè)后繼文件, 全面覆蓋用戶常用的訪問(wèn)模式. 實(shí)驗(yàn)證明, ARLS訪問(wèn)預(yù)測(cè)算法的平均準(zhǔn)確率達(dá)到91.3%, 能有效預(yù)測(cè)用戶的訪問(wèn)行為.
地震探測(cè)數(shù)據(jù)云存儲(chǔ)系統(tǒng)借用OpenProbe項(xiàng)目實(shí)現(xiàn), 客戶端保留了OpenProbe的絕大多數(shù)功能, 但不再保存完整的地震數(shù)據(jù), 而是通過(guò)內(nèi)存緩存保存近期可視化區(qū)域用到的數(shù)據(jù). 首先將近期使用的數(shù)據(jù)存儲(chǔ)在內(nèi)存緩沖區(qū), 當(dāng)內(nèi)存緩沖區(qū)容量不足時(shí), 根據(jù)LRU替換策略將最近不常用的數(shù)據(jù)刪除, 以減少網(wǎng)絡(luò)通信開銷, 保證最近正在使用的數(shù)據(jù)文件一直存在于本地緩存中. 客戶端緩存的生命周期從數(shù)據(jù)可視化開始到會(huì)話結(jié)束為止, 對(duì)地震數(shù)據(jù)可視化結(jié)束后, 客戶端程序?qū)⒕彺娉刂械木彺鏀?shù)據(jù)清空, 始終保持客戶端的輕量級(jí)特性.
服務(wù)器端則是一個(gè)全新的系統(tǒng)實(shí)現(xiàn), 僅保留了八叉樹的數(shù)據(jù)索引規(guī)則, 利用基于關(guān)聯(lián)規(guī)則的ARLS算法挖掘用戶歷史訪問(wèn)記錄中的訪問(wèn)模式, 在滿足當(dāng)前用戶訪問(wèn)請(qǐng)求的同時(shí)預(yù)測(cè)用戶下一時(shí)刻需要的數(shù)據(jù), 預(yù)取到云端緩存. 云端緩存是長(zhǎng)期緩存, 如果客戶端請(qǐng)求的地震數(shù)據(jù)被訪問(wèn)預(yù)測(cè)算法正確預(yù)測(cè), 則數(shù)據(jù)文件會(huì)提前預(yù)取到緩存中, 服務(wù)器直接將數(shù)據(jù)文件發(fā)送給客戶端, 充分利用了服務(wù)器空閑等待的時(shí)間, 提高了數(shù)據(jù)獲取效率. 盡管訪問(wèn)預(yù)測(cè)算法對(duì)用戶單獨(dú)建模, 但由于服務(wù)端的同一地震數(shù)據(jù)對(duì)多個(gè)客戶端是共享的, 因此在緩存時(shí), 不同用戶對(duì)同一數(shù)據(jù)的預(yù)取存儲(chǔ)在一個(gè)緩存區(qū)中. 服務(wù)端的緩存長(zhǎng)期存在, 可最大限度減少當(dāng)某個(gè)用戶的訪問(wèn)預(yù)測(cè)失敗時(shí)所需數(shù)據(jù)不在緩存中的情形出現(xiàn), 以滿足眾多客戶端的快速可視化.
分布式緩存中的客戶端是短期緩存, 存儲(chǔ)的分塊文件大小均等, 因此數(shù)據(jù)文件在緩存中駐留時(shí)間僅與訪問(wèn)頻率有關(guān), 使用LRU替換策略維護(hù)本地內(nèi)存緩存, 根據(jù)不同設(shè)備設(shè)置內(nèi)存緩存的最大閾值, 避免對(duì)設(shè)備運(yùn)行產(chǎn)生過(guò)重負(fù)擔(dān). 使用隊(duì)列記錄內(nèi)存緩存的數(shù)據(jù)標(biāo)識(shí), 當(dāng)對(duì)某一數(shù)據(jù)文件進(jìn)行訪問(wèn)時(shí)將該標(biāo)識(shí)重新放到隊(duì)尾, 緩沖隊(duì)列容量超過(guò)閾值后將隊(duì)首的數(shù)據(jù)文件移出當(dāng)前緩沖區(qū), 并從客戶端刪除. 由于地震數(shù)據(jù)在使用過(guò)程中僅涉及到讀操作, 因此無(wú)需對(duì)其進(jìn)行一致性維護(hù).
云端數(shù)據(jù)緩存是長(zhǎng)期緩存, 為多個(gè)客戶端的不同數(shù)據(jù)請(qǐng)求提供服務(wù), 需要存儲(chǔ)多個(gè)地震數(shù)據(jù)不同規(guī)模的分塊文件, 因此數(shù)據(jù)文件在緩存區(qū)駐留的時(shí)間由訪問(wèn)頻率和文件大小共同決定, 對(duì)每個(gè)數(shù)據(jù)文件計(jì)算一個(gè)稱為使用度的值M, 該值與客戶端訪問(wèn)數(shù)據(jù)文件的頻率F及數(shù)據(jù)文件占服務(wù)端緩存區(qū)的百分?jǐn)?shù)S有關(guān), 可將M表示為:M=Fa1×Sa2, 其中指數(shù)a1和a2均為大于0的整數(shù), 由服務(wù)端管理員指定, 決定訪問(wèn)頻率F與容量占用S之間的相對(duì)重要性, 當(dāng)服務(wù)端緩存容量不足時(shí), 替換出M值最小的數(shù)據(jù)文件.
分布式緩存機(jī)制避免了數(shù)據(jù)反復(fù)的讀入、 取出, 減少了I/O開銷, 客戶端的短期緩存保證使用頻率高的數(shù)據(jù)存儲(chǔ)在本地, 減少了網(wǎng)絡(luò)通信次數(shù), 當(dāng)數(shù)據(jù)可視化所需的數(shù)據(jù)不在本地時(shí), 與云數(shù)據(jù)中心建立連接, 進(jìn)行網(wǎng)絡(luò)通信, 因此需要構(gòu)建相應(yīng)的數(shù)據(jù)通路.
圖3 數(shù)據(jù)加載流程Fig.3 Data loading process
客戶端在提出數(shù)據(jù)加載請(qǐng)求時(shí), 根據(jù)tileID找到對(duì)應(yīng)的.dat文件標(biāo)號(hào)fileID, 查找本地文件記錄判斷是否需要遠(yuǎn)程數(shù)據(jù)加載, 如果需要?jiǎng)t構(gòu)造通信消息, 攜帶如fileID、 文件路徑、 tileID和tile數(shù)據(jù)的偏移量等信息發(fā)送到云數(shù)據(jù)中心, 服務(wù)器返回tile所在的整個(gè)文件到客戶端形成數(shù)據(jù)緩存, 數(shù)據(jù)加載流程如圖3所示.
在數(shù)據(jù)通信過(guò)程中, 需要傳遞消息和數(shù)據(jù)文件對(duì)象, 因此需要對(duì)數(shù)據(jù)對(duì)象進(jìn)行數(shù)據(jù)序列化, 轉(zhuǎn)換成二進(jìn)制字節(jié)流在網(wǎng)絡(luò)上傳輸. 服務(wù)器與客戶端傳輸?shù)臄?shù)據(jù)文件規(guī)模超出了Socket對(duì)傳輸數(shù)據(jù)量的限制, 需要實(shí)現(xiàn)分包等操作. 基于以上兩點(diǎn)原因, 本文使用Boost作為函數(shù)庫(kù), 其中的Serialization在數(shù)據(jù)序列化方面不需要其他中介文件(如XML等)提供序列化支持, 支持對(duì)用戶自定義類的對(duì)象和STL容器對(duì)象進(jìn)行序列化; Asio對(duì)Berkeley Socket APIS進(jìn)行了封裝, 提供了網(wǎng)絡(luò)編程常用的操作系統(tǒng)接口, 使得底層的數(shù)據(jù)分包等操作對(duì)程序員不可見, 因而無(wú)需考慮傳輸數(shù)據(jù)量的限制, 極大簡(jiǎn)化了數(shù)據(jù)通信流程, 提高了網(wǎng)絡(luò)傳輸效率.
云存儲(chǔ)系統(tǒng): 吉林大學(xué)高性能計(jì)算中心節(jié)點(diǎn). 中科曙光A620r-G機(jī)架式服務(wù)器, 配置如下: 2×AMD Opteron 6386 SE(16核, 2.8 GHz, 16 MB L3級(jí)Cache); 64 GB(16×4 GB)DDR3 1 600 MHz內(nèi)存; 9×500 GB SATA2.5″硬盤; Linux 操作系統(tǒng): Redhat Enterprise Linux 5.5, 64 bit.
客戶端: ThinkStation C30工作站, 2×Intel Xeon E5-2620(6核, 2.0 GHz, 15 MB L3級(jí)Cache); 4 GB(2×2 GB)DDR3, 1 600 MHz內(nèi)存; 1 TB SATA Ⅲ3.5″硬盤; Windows操作系統(tǒng): Windows10 Professional 64 bit.
網(wǎng)絡(luò)帶寬: 100 M以太網(wǎng), 平均傳輸速率15 MB/s. 應(yīng)用軟件: OpenProbe V1.0. 測(cè)試用例: 107 MB, 770 MB, 2.15 GB.
OpenProbe平臺(tái)在數(shù)據(jù)可視化過(guò)程中最重要的環(huán)節(jié)是數(shù)據(jù)加載, 本文首先測(cè)試平臺(tái)在云存儲(chǔ)結(jié)構(gòu)中加載不同規(guī)模數(shù)據(jù)的效果, 如圖4所示, 其中: (A)為107 MB數(shù)據(jù); (B)為770 MB數(shù)據(jù); (C)為2.15 GB數(shù)據(jù); 緩存規(guī)模為32 MB, 用于模擬實(shí)際環(huán)境中地震數(shù)據(jù)規(guī)模與緩存規(guī)模相差數(shù)倍的情形. 測(cè)試結(jié)果表明, 對(duì)于不同規(guī)模的數(shù)據(jù), 客戶端能從云數(shù)據(jù)中心加載到本地獲得良好的可視化效果.
圖4 地震數(shù)據(jù)可視化效果Fig.4 Visualization effect of seismic data
本文提出了基于分布式緩存和ARLS訪問(wèn)預(yù)測(cè)算法的分布式地震數(shù)據(jù)可視化平臺(tái), 其中ARLS訪問(wèn)預(yù)測(cè)算法能預(yù)測(cè)用戶未來(lái)所需的數(shù)據(jù)文件, 利用服務(wù)器空閑時(shí)間預(yù)取數(shù)據(jù)到云端緩存, 通過(guò)提高云端緩存的命中率進(jìn)一步節(jié)省服務(wù)器與云存儲(chǔ)之間的文件檢索和加載耗時(shí). 圖5為ARLS訪問(wèn)預(yù)測(cè)算法的準(zhǔn)確率, 選取地震數(shù)據(jù)訪問(wèn)記錄中的100條用于訓(xùn)練集, 25條用于驗(yàn)證算法準(zhǔn)確率, 對(duì)測(cè)試用例在不同緩存規(guī)模(32 MB,64 MB,128 MB)下進(jìn)行實(shí)驗(yàn)(實(shí)際環(huán)境可根據(jù)地震數(shù)據(jù)大小增大緩存容量). 由圖5可見, 當(dāng)?shù)卣饠?shù)據(jù)被劃分為約20個(gè)緩存文件時(shí), 本文所用的預(yù)測(cè)算法能獲得82%以上的準(zhǔn)確率, 當(dāng)緩存文件個(gè)數(shù)增至30個(gè)以上時(shí)(A點(diǎn)), 準(zhǔn)確率只有47.59%, 但將歷史記錄增加為200條后, 準(zhǔn)確率會(huì)增至75%. 因此訪問(wèn)預(yù)測(cè)算法需要獲得大量的、 多樣的歷史數(shù)據(jù)進(jìn)行訓(xùn)練, 并需要與緩存管理系統(tǒng)協(xié)調(diào), 根據(jù)地震數(shù)據(jù)規(guī)模合理劃分緩存文件大小, 在保證準(zhǔn)確率的同時(shí), 確保頻繁訪問(wèn)的緩存文件會(huì)長(zhǎng)時(shí)間駐留在緩存區(qū). 根據(jù)數(shù)據(jù)加載時(shí)間可知, 即使在A點(diǎn)情形下(準(zhǔn)確率47.59%, 緩存規(guī)模32 MB, 文件68個(gè)), 也可節(jié)省文件加載時(shí)間為194 s, 鑒于云端會(huì)面臨多種地震數(shù)據(jù)的并發(fā)訪問(wèn), 本文提出的ARLS訪問(wèn)預(yù)測(cè)算法能有效利用服務(wù)器空閑時(shí)間, 避免了文件系統(tǒng)導(dǎo)致的延遲.
圖6為對(duì)經(jīng)典LS訪問(wèn)預(yù)測(cè)算法、 LNS算法[9]、 DLS算法[10]與本文ARLS算法在不同數(shù)據(jù)規(guī)模下的平均訪問(wèn)預(yù)測(cè)準(zhǔn)確率的比較結(jié)果. 隨著地震數(shù)據(jù)規(guī)模增大, 劃分的數(shù)據(jù)文件個(gè)數(shù)也增多, 用戶越有可能出現(xiàn)多樣的訪問(wèn)模式. 測(cè)試結(jié)果表明, 本文提出的ARLS算法能適應(yīng)不同規(guī)模的數(shù)據(jù)訪問(wèn), 相對(duì)LS訪問(wèn)預(yù)測(cè)算法77%的平均準(zhǔn)確率, ARLS算法的平均準(zhǔn)確率達(dá)到91.3%, 能適應(yīng)用戶擁有多種訪問(wèn)模式的情形.
圖5 ARLS訪問(wèn)預(yù)測(cè)算法準(zhǔn)確率Fig.5 Accuracy of ARLS access prediction algorithm
圖6 不同訪問(wèn)預(yù)測(cè)算法比較Fig.6 Comparison of different access prediction algorithms
圖7為對(duì)本地緩存需要的數(shù)據(jù)能否在云端緩存命中進(jìn)行分析的結(jié)果, 將3種示例數(shù)據(jù)分別在緩存規(guī)模為32 MB, 64 MB和128 MB情形下進(jìn)行實(shí)驗(yàn). ARLS訪問(wèn)預(yù)測(cè)算法通過(guò)數(shù)據(jù)預(yù)取的方法, 能夠提高云端緩存命中率, 使用戶的數(shù)據(jù)請(qǐng)求立刻被服務(wù)器響應(yīng), 降低了用戶的訪問(wèn)延遲. 由于云端緩存存儲(chǔ)了多個(gè)用戶對(duì)于同一數(shù)據(jù)文件的預(yù)測(cè)結(jié)果, 因此可有效降低緩存未命中與ARLS訪問(wèn)預(yù)測(cè)失敗同時(shí)出現(xiàn)的概率. 由實(shí)驗(yàn)結(jié)果可見, 云端緩存命中率在最差情形下也達(dá)到了69.1%, 平均緩存命中率達(dá)95.61%, 大幅度提高了遠(yuǎn)程數(shù)據(jù)的加載效率.
為分析分布式緩存和ARLS訪問(wèn)預(yù)測(cè)算法對(duì)地學(xué)數(shù)據(jù)可視化平臺(tái)整體性能的提升效果, 分別使用LS,LNS,DLS算法的C/S架構(gòu)作對(duì)比研究, 結(jié)果如圖8所示. 由于分布式緩存和云端ARLS訪問(wèn)預(yù)測(cè)算法的實(shí)現(xiàn), 平臺(tái)性能較對(duì)比架構(gòu)大幅度提升, 尤其對(duì)大規(guī)模地震數(shù)據(jù)進(jìn)行可視化的過(guò)程中, 地學(xué)用戶能在可容忍的數(shù)據(jù)加載時(shí)間內(nèi)(可視化過(guò)程的平均延遲, 橫線標(biāo)識(shí)為120 s, 實(shí)際使用過(guò)程中統(tǒng)計(jì)的經(jīng)驗(yàn)值)獲得理想的可視化效果, 并大幅度減少了本地存儲(chǔ)資源的占用. 由實(shí)驗(yàn)結(jié)果可知, 基于云存儲(chǔ)的地學(xué)數(shù)據(jù)可視化平臺(tái)整體性能較其他平臺(tái)架構(gòu)提高了70%, 實(shí)現(xiàn)了云端地震數(shù)據(jù)在客戶端的快速可視化.
圖7 云端緩存命中率分析結(jié)果Fig.7 Analysis results of cloud cache hit rate
圖8 平臺(tái)整體性能分析Fig.8 Analysis of overall performance of platform
綜上所述, 本文提出的分布式數(shù)據(jù)緩存技術(shù)實(shí)現(xiàn)了地學(xué)數(shù)據(jù)可視化平臺(tái)地震數(shù)據(jù)存儲(chǔ)與數(shù)據(jù)可視化的分離, 將大規(guī)模地震數(shù)據(jù)集中存儲(chǔ)在云數(shù)據(jù)中心, 以可容忍的網(wǎng)絡(luò)通信開銷為代價(jià)極大減少了客戶端的物理資源消耗. 基于Boost實(shí)現(xiàn)的數(shù)據(jù)通路優(yōu)化了網(wǎng)絡(luò)傳輸效率, ARLS訪問(wèn)預(yù)測(cè)算法的平均準(zhǔn)確率達(dá)91.3%, 充分利用了可視化過(guò)程中服務(wù)器的空閑時(shí)間, 使云端緩存命中率平均達(dá)95.61%. 服務(wù)端緩存與客戶端緩存提高了數(shù)據(jù)加載效率, 使地學(xué)數(shù)據(jù)可視化平臺(tái)整體性能大幅度提高, 用戶可在有限的數(shù)據(jù)加載時(shí)間內(nèi)獲得更好的地震數(shù)據(jù)可視化效果, 能有效支持對(duì)遠(yuǎn)程地震數(shù)據(jù)的快速可視化.