韓鎮(zhèn)陽(yáng),張 磊,任 冬
(武警陜西省總隊(duì),陜西 西安 710116)
大數(shù)據(jù)存儲(chǔ)架構(gòu)是指在存儲(chǔ)、處理和分析大規(guī)模數(shù)據(jù)時(shí)所采用的技術(shù)架構(gòu)。從廣義角度分析,大數(shù)據(jù)存儲(chǔ)架構(gòu)是用于提取和處理海量數(shù)據(jù)并針對(duì)業(yè)務(wù)目的進(jìn)行分析整理的整體系統(tǒng),可視作基于機(jī)構(gòu)業(yè)務(wù)需求的大數(shù)據(jù)解決方案的藍(lán)圖[1]。大數(shù)據(jù)存儲(chǔ)架構(gòu)通常包括以下幾個(gè)主要組成部分:數(shù)據(jù)存儲(chǔ)層、數(shù)據(jù)處理層、數(shù)據(jù)分析層和數(shù)據(jù)可視化層。隨著大數(shù)據(jù)時(shí)代的來(lái)臨,信息資源數(shù)據(jù)的體量越來(lái)越龐大,大數(shù)據(jù)存儲(chǔ)架構(gòu)面臨著巨大的挑戰(zhàn)[2]。傳統(tǒng)的大數(shù)據(jù)存儲(chǔ)架構(gòu)通常采用中央式存儲(chǔ)方式,這種方式在處理大規(guī)模數(shù)據(jù)時(shí)存在著很多局限性,例如可擴(kuò)展性差、容錯(cuò)能力低等問(wèn)題[3]。為了應(yīng)對(duì)挑戰(zhàn),研究者們提出了大數(shù)據(jù)存儲(chǔ)架構(gòu)可擴(kuò)展性優(yōu)化算法,對(duì)大數(shù)據(jù)存儲(chǔ)架構(gòu)進(jìn)行優(yōu)化,以提高其性能和可擴(kuò)展性。當(dāng)前,傳統(tǒng)的大數(shù)據(jù)存儲(chǔ)架構(gòu)可擴(kuò)展性優(yōu)化算法在實(shí)際應(yīng)用中以批處理為主,缺乏實(shí)時(shí)的支撐。面對(duì)需要快速響應(yīng)和處理的應(yīng)用場(chǎng)景,如實(shí)時(shí)分析、實(shí)時(shí)推薦等,仍然存在缺陷,且對(duì)業(yè)務(wù)支撐的靈活度效果不佳[4]。
Kalman算法是一種優(yōu)秀的估計(jì)算法,它具有很好的自適應(yīng)性和魯棒性,能夠?qū)?fù)雜系統(tǒng)進(jìn)行準(zhǔn)確的估計(jì)和預(yù)測(cè)[5]。在大數(shù)據(jù)存儲(chǔ)架構(gòu)中,Kalman算法可以用于數(shù)據(jù)的優(yōu)化和預(yù)測(cè),采用分布式存儲(chǔ)方式,通過(guò)將數(shù)據(jù)分散到多個(gè)節(jié)點(diǎn)上進(jìn)行存儲(chǔ)和處理,提高數(shù)據(jù)的可擴(kuò)展性和容錯(cuò)能力,提高數(shù)據(jù)存儲(chǔ)和處理的效率?;诖?,本文引入Kalman算法來(lái)開(kāi)展大數(shù)據(jù)存儲(chǔ)架構(gòu)可擴(kuò)展性優(yōu)化算法研究。
內(nèi)存布局對(duì)后續(xù)架構(gòu)可擴(kuò)展性優(yōu)化起到了至關(guān)重要的作用。首先,大數(shù)據(jù)存儲(chǔ)架構(gòu)內(nèi)存布局設(shè)計(jì)中,需要綜合考慮架構(gòu)與多核環(huán)境內(nèi)存布局之間的兼容性。本文設(shè)計(jì)的大數(shù)據(jù)存儲(chǔ)架構(gòu)內(nèi)存布局示意圖如圖1所示。
圖1 大數(shù)據(jù)存儲(chǔ)架構(gòu)內(nèi)存布局示意圖
47位地址以下部分均為用戶態(tài)地址空間,按照應(yīng)用性能的不同,將其劃分為了7個(gè)不同的地址,其中,內(nèi)存映射區(qū)域地址與堆地址之間的一段地址未被存儲(chǔ)架構(gòu)使用,因此將其標(biāo)記為內(nèi)存空洞[6]。從大數(shù)據(jù)存儲(chǔ)架構(gòu)配置文件中讀取相關(guān)的用戶配置信息,定義架構(gòu)分布式共享內(nèi)存的物理資源與協(xié)議[7]。其次,基于線程信息的地址段,存儲(chǔ)架構(gòu)中所有線程的運(yùn)行狀態(tài)信息(以及SNOP運(yùn)行過(guò)程中產(chǎn)生的日志)提供大數(shù)據(jù)存儲(chǔ)架構(gòu)運(yùn)行所需的同步原語(yǔ)狀態(tài)信息,在不同機(jī)器上訪問(wèn)堆和棧內(nèi)存。
為提高架構(gòu)的容錯(cuò)性,在設(shè)計(jì)分布式共享內(nèi)存協(xié)議前,需要設(shè)計(jì)內(nèi)存協(xié)議本身所使用的庫(kù)名與代碼,避免協(xié)議運(yùn)行中出現(xiàn)數(shù)據(jù)存儲(chǔ)無(wú)限遞歸現(xiàn)象。共享內(nèi)存協(xié)議使用庫(kù)名及代碼如表1所示。
表1 分布式共享內(nèi)存協(xié)議使用庫(kù)名及代碼
通過(guò)表1獲取到大數(shù)據(jù)存儲(chǔ)架構(gòu)分布式共享內(nèi)存協(xié)議本身所使用的庫(kù),避免協(xié)議在機(jī)器同步過(guò)程中引發(fā)無(wú)限遞歸。在此基礎(chǔ)上,設(shè)計(jì)大數(shù)據(jù)存儲(chǔ)架構(gòu)分布式共享內(nèi)存協(xié)議,如表2所示。
表2 大數(shù)據(jù)存儲(chǔ)架構(gòu)分布式共享內(nèi)存協(xié)議
按照表2所示的協(xié)議權(quán)限對(duì)大數(shù)據(jù)存儲(chǔ)架構(gòu)內(nèi)存頁(yè)進(jìn)行共享操作,展現(xiàn)協(xié)議的基本邏輯?;谕讲僮鳈C(jī)制,以確保各個(gè)進(jìn)程在訪問(wèn)共享內(nèi)存時(shí)能夠正確地協(xié)同工作,即便節(jié)點(diǎn)發(fā)生故障仍然能夠正確地訪問(wèn)和更新共享內(nèi)存中的數(shù)據(jù),提高大數(shù)據(jù)存儲(chǔ)架構(gòu)的容錯(cuò)性[8]。
在提高了大數(shù)據(jù)存儲(chǔ)架構(gòu)容錯(cuò)性的基礎(chǔ)上,利用Kalman算法對(duì)大數(shù)據(jù)存儲(chǔ)架構(gòu)的可擴(kuò)展性進(jìn)行全方位的優(yōu)化。
首先,收集大數(shù)據(jù)存儲(chǔ)架構(gòu)存儲(chǔ)節(jié)點(diǎn)的負(fù)載數(shù)據(jù),包括CPU利用率、內(nèi)存利用率、磁盤(pán)IO等。根據(jù)收集到的架構(gòu)歷史數(shù)據(jù),利用Kalman算法,建立存儲(chǔ)節(jié)點(diǎn)負(fù)載預(yù)測(cè)模型,對(duì)大數(shù)據(jù)存儲(chǔ)架構(gòu)的參數(shù)與狀態(tài)作出估計(jì)[9]。Kalman算法是一種線性動(dòng)態(tài)系統(tǒng)的最優(yōu)估計(jì)方法,其利用系統(tǒng)各時(shí)刻的測(cè)量值求得系統(tǒng)的狀態(tài)值,并不斷更新。Kalman算法主要由兩個(gè)步驟組成:預(yù)測(cè)步驟和更新步驟。
利用Kalman算法估計(jì)大數(shù)據(jù)存儲(chǔ)架構(gòu)的參數(shù)與狀態(tài)的過(guò)程如下:
(1)定義系統(tǒng)模型。首先,定義一個(gè)用于描述存儲(chǔ)節(jié)點(diǎn)負(fù)載的系統(tǒng)模型,通常包含一些狀態(tài)變量,包括CPU利用率、內(nèi)存利用率、磁盤(pán)IO等。
(2)初始化狀態(tài)估計(jì)和協(xié)方差矩陣。在開(kāi)始循環(huán)之前,初始化狀態(tài)估計(jì)向量(即系統(tǒng)的初始狀態(tài))和協(xié)方差矩陣。其中,協(xié)方差矩陣用于描述系統(tǒng)狀態(tài)估計(jì)的誤差。
(3)預(yù)測(cè)。在每個(gè)時(shí)間步內(nèi),使用系統(tǒng)模型和當(dāng)前狀態(tài)估計(jì)來(lái)預(yù)測(cè)下一個(gè)時(shí)間步的狀態(tài)。在大數(shù)據(jù)存儲(chǔ)架構(gòu)中,這個(gè)步驟可能涉及對(duì)存儲(chǔ)節(jié)點(diǎn)負(fù)載的預(yù)測(cè)。預(yù)測(cè)狀態(tài)估計(jì)如下:
X(k+1|k)=F(k)×X(k|k)+G(k)×U(k)
(1)
其中,X(k+1|k)表示在k+1時(shí)間步內(nèi)基于k時(shí)間步信息的預(yù)測(cè)狀態(tài),F(xiàn)(k)表示狀態(tài)轉(zhuǎn)移矩陣,G(k)表示控制矩陣,U(k)表示控制輸入。
(4)更新步驟。使用測(cè)量值(即實(shí)際負(fù)載)來(lái)更新對(duì)系統(tǒng)狀態(tài)的估計(jì)。這涉及將預(yù)測(cè)狀態(tài)與實(shí)際測(cè)量值進(jìn)行比較,然后根據(jù)比較結(jié)果調(diào)整狀態(tài)估計(jì)。調(diào)整的幅度取決于測(cè)量誤差協(xié)方差矩陣和過(guò)程噪聲協(xié)方差矩陣。
更新?tīng)顟B(tài)估計(jì)如下:
X(k+1|k+1)=
X(k+1|k)×(1-H(k+1))+K(k+1)×Z(k+1)
(2)
更新協(xié)方差矩陣如下:
P(k+1|k+1)=(I-K(k+1)×H(k+1))×P(k+1|k)
(3)
其中,H(k)、Q(k)、K(k)均表示系統(tǒng)模型和噪聲模型的參數(shù),Z(k)表示測(cè)量值,P(k+1|k+1)和P(k+1|k)表示協(xié)方差矩陣,I表示單位矩陣。
(5)循環(huán)執(zhí)行。在每個(gè)時(shí)間步重復(fù)執(zhí)行預(yù)測(cè)步驟和更新步驟,直到得到最優(yōu)估計(jì)值。
根據(jù)最優(yōu)估計(jì)值,衡量Kalman算法估計(jì)結(jié)果的好壞程度,估計(jì)值與實(shí)際值越接近越好,利用該值代替大數(shù)據(jù)存儲(chǔ)架構(gòu)的實(shí)際值[10]。在此基礎(chǔ)上,提取與大數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)存儲(chǔ)節(jié)點(diǎn)負(fù)載相關(guān)的特征,描述存儲(chǔ)節(jié)點(diǎn)負(fù)載的變化規(guī)律和趨勢(shì)。根據(jù)Kalman算法預(yù)測(cè)結(jié)果,對(duì)存儲(chǔ)節(jié)點(diǎn)的負(fù)載進(jìn)行動(dòng)態(tài)調(diào)整,以實(shí)現(xiàn)負(fù)載均衡。若發(fā)現(xiàn)負(fù)載不均或者出現(xiàn)其他問(wèn)題,及時(shí)進(jìn)行干預(yù)和處理?;诖鎯?chǔ)節(jié)點(diǎn)負(fù)載動(dòng)態(tài)調(diào)整結(jié)果,對(duì)大數(shù)據(jù)存儲(chǔ)架構(gòu)進(jìn)行優(yōu)化,以提高其可擴(kuò)展性。優(yōu)化中包括增加架構(gòu)存儲(chǔ)節(jié)點(diǎn)、優(yōu)化數(shù)據(jù)存儲(chǔ)策略、改進(jìn)數(shù)據(jù)處理流程等。定期重復(fù)以上步驟,以實(shí)現(xiàn)大數(shù)據(jù)存儲(chǔ)架構(gòu)的可擴(kuò)展性持續(xù)優(yōu)化。
為了驗(yàn)證上述提出的基于Kalman算法的大數(shù)據(jù)存儲(chǔ)架構(gòu)可擴(kuò)展性優(yōu)化算法的可行性及可擴(kuò)展性優(yōu)化效果,開(kāi)展了如下實(shí)驗(yàn)測(cè)試分析。
首先,基于該算法的運(yùn)行需求及運(yùn)行特征,創(chuàng)建實(shí)驗(yàn)所需的測(cè)試環(huán)境。實(shí)驗(yàn)環(huán)境配置如表3所示。
表3 大數(shù)據(jù)存儲(chǔ)架構(gòu)可擴(kuò)展性優(yōu)化算法實(shí)驗(yàn)環(huán)境配置
服務(wù)器節(jié)點(diǎn)之間通過(guò)以太網(wǎng)交換機(jī)連接,形成一個(gè)星型拓?fù)浣Y(jié)構(gòu),服務(wù)器節(jié)點(diǎn)與交換機(jī)之間的網(wǎng)絡(luò)連接采用雙絞線或光纖連接,以確保數(shù)據(jù)傳輸?shù)姆€(wěn)定性和可靠性。創(chuàng)建好優(yōu)化算法實(shí)驗(yàn)測(cè)試環(huán)境后,選取實(shí)驗(yàn)所需的工具,包括數(shù)據(jù)預(yù)處理工具與數(shù)據(jù)可視化工具兩種。其中,數(shù)據(jù)預(yù)處理工具采用Python Pandas庫(kù);數(shù)據(jù)可視化工具采用Matplotlib。完成實(shí)驗(yàn)測(cè)試準(zhǔn)備后,應(yīng)用上述本文提出的基于Kalman算法的大數(shù)據(jù)存儲(chǔ)架構(gòu)可擴(kuò)展性優(yōu)化算法,在進(jìn)行實(shí)驗(yàn)之前,確保所有設(shè)備和軟件都已正確安裝和配置后,開(kāi)展實(shí)驗(yàn)測(cè)試分析。
完成以上實(shí)驗(yàn)測(cè)試準(zhǔn)備后,接下來(lái),對(duì)大數(shù)據(jù)存儲(chǔ)架構(gòu)可擴(kuò)展性優(yōu)化結(jié)果作出全方位、多維度的分析。使用公開(kāi)可用的ImageNet數(shù)據(jù)集,該數(shù)據(jù)集是一個(gè)寶貴的大數(shù)據(jù)資源,包含了超過(guò)1 400萬(wàn)的圖像,涵蓋了2萬(wàn)多個(gè)類(lèi)別。
為了增強(qiáng)可擴(kuò)展性優(yōu)化結(jié)果的說(shuō)服力,將上述基于Kalman算法的大數(shù)據(jù)存儲(chǔ)架構(gòu)可擴(kuò)展性優(yōu)化算法設(shè)置為實(shí)驗(yàn)組,將文獻(xiàn)[1]中提出的基于分布K-means算法的可擴(kuò)展性優(yōu)化算法、文獻(xiàn)[2]中提出的基于ARM架構(gòu)的均衡計(jì)算型服務(wù)器數(shù)據(jù)存儲(chǔ)系統(tǒng)優(yōu)化算法分別設(shè)置為對(duì)照組1與對(duì)照組2,以對(duì)比分析的形式,判斷本文提出的算法是否可行。
三種優(yōu)化算法的大數(shù)據(jù)處理流程為:將大數(shù)據(jù)集內(nèi)的海量數(shù)據(jù)分散到4個(gè)配置相同的高性能服務(wù)器上,以分散的方式進(jìn)行處理,使用三種優(yōu)化算法對(duì)應(yīng)的數(shù)據(jù)處理模式,對(duì)大數(shù)據(jù)進(jìn)行分析和計(jì)算。
選取大數(shù)據(jù)存儲(chǔ)架構(gòu)可擴(kuò)展性優(yōu)化后的資源利用率作為此次實(shí)驗(yàn)測(cè)試的評(píng)價(jià)指標(biāo),其計(jì)算公式如下所示:
(4)
其中,MP表示大數(shù)據(jù)存儲(chǔ)架構(gòu)運(yùn)行過(guò)程中實(shí)際使用的資源量;M表示大數(shù)據(jù)存儲(chǔ)架構(gòu)運(yùn)行過(guò)程中所能使用的最大資源總量。大數(shù)據(jù)架構(gòu)資源利用率越高,說(shuō)明系統(tǒng)對(duì)服務(wù)器資源的利用越充分,可擴(kuò)展性能越好,能夠更加高效地處理大規(guī)模數(shù)據(jù),反之同理。
為避免實(shí)驗(yàn)測(cè)試結(jié)果存在偶然性,進(jìn)行了6組實(shí)驗(yàn),將6組實(shí)驗(yàn)分別標(biāo)號(hào)為A~F。測(cè)定三種優(yōu)化算法應(yīng)用后大數(shù)據(jù)存儲(chǔ)架構(gòu)資源利用率并作出客觀對(duì)比,結(jié)果如圖2所示。
圖2 大數(shù)據(jù)存儲(chǔ)架構(gòu)資源利用率對(duì)比結(jié)果
在6組實(shí)驗(yàn)測(cè)試中,應(yīng)用本文提出的基于Kalman算法的大數(shù)據(jù)存儲(chǔ)架構(gòu)可擴(kuò)展性優(yōu)化算法后,大數(shù)據(jù)存儲(chǔ)架構(gòu)的資源利用率始終高于另外兩種算法,均達(dá)到了96%以上,最高達(dá)到了98%,這意味著大數(shù)據(jù)存儲(chǔ)架構(gòu)在處理或管理數(shù)據(jù)方面效率更高,能夠處理更多的工作負(fù)載。由此可知,本文提出的優(yōu)化算法具有較高的可行性,架構(gòu)可擴(kuò)展性優(yōu)化效果優(yōu)勢(shì)顯著,對(duì)服務(wù)器資源的利用更加充分,能夠更高效地處理大規(guī)模數(shù)據(jù)。
產(chǎn)生上述結(jié)果主要有如下三點(diǎn)原因:
(1)優(yōu)化內(nèi)存布局:本文算法綜合考慮了大數(shù)據(jù)存儲(chǔ)架構(gòu)與多核環(huán)境內(nèi)存布局之間的兼容性,通過(guò)合理設(shè)計(jì)架構(gòu)內(nèi)存布局,可以更好地滿足多核環(huán)境下的數(shù)據(jù)存儲(chǔ)和訪問(wèn)需求,從而提高了內(nèi)存利用率。
(2)設(shè)計(jì)分布式共享內(nèi)存協(xié)議:本文算法設(shè)計(jì)了一種分布式共享內(nèi)存協(xié)議,確保各個(gè)進(jìn)程在訪問(wèn)共享內(nèi)存時(shí)能夠正確地協(xié)同工作,避免了沖突和數(shù)據(jù)不一致性問(wèn)題,提高了存儲(chǔ)架構(gòu)的容錯(cuò)性和整體性能。
(3)動(dòng)態(tài)調(diào)整存儲(chǔ)節(jié)點(diǎn)負(fù)載:利用Kalman算法可以動(dòng)態(tài)地調(diào)整存儲(chǔ)節(jié)點(diǎn)的負(fù)載,根據(jù)實(shí)際需求和系統(tǒng)狀態(tài)來(lái)合理分配存儲(chǔ)資源,避免了資源浪費(fèi)和資源瓶頸的產(chǎn)生,進(jìn)一步提高了資源利用率和系統(tǒng)性能。
本文通過(guò)引入優(yōu)秀的Kalman算法,有效地提高了大數(shù)據(jù)存儲(chǔ)架構(gòu)的性能和可擴(kuò)展性。該優(yōu)化算法利用Kalman算法的自適應(yīng)性和魯棒性,對(duì)海量大數(shù)據(jù)進(jìn)行優(yōu)化和預(yù)測(cè),提高了數(shù)據(jù)處理的效率和準(zhǔn)確性。同時(shí),采用分布式存儲(chǔ)方式,將數(shù)據(jù)分散到多個(gè)節(jié)點(diǎn)上進(jìn)行存儲(chǔ)和處理,提高了數(shù)據(jù)的可擴(kuò)展性和容錯(cuò)能力。該算法的研究和應(yīng)用,為大數(shù)據(jù)存儲(chǔ)和處理領(lǐng)域的發(fā)展提供了新的思路和方法,具有較為重要的理論意義和實(shí)踐價(jià)值。
網(wǎng)絡(luò)安全與數(shù)據(jù)管理2023年11期