孫艷華 王麗娜
摘要:隨著物聯(lián)網(wǎng)建設(shè)的不斷發(fā)展,以實時傳感數(shù)據(jù)為基礎(chǔ)的各類流數(shù)據(jù)如何及時快速存儲已成為當前急需解決的問題。面對連續(xù)不斷到達的數(shù)據(jù)流,數(shù)據(jù)流存儲系統(tǒng)必須及時快速將其存儲到持久化介質(zhì)中。針對這一需求,本文提出了一種基于緩存的分布式實時存儲方法DRS。DRS方法依據(jù)窗口閾值,不間斷地從緩存區(qū)接收數(shù)據(jù),并結(jié)合一致性哈希算法將數(shù)據(jù)分布存儲到數(shù)據(jù)服務(wù)器中。實驗表明,該分布式存儲方法能夠?qū)崟r地將數(shù)據(jù)存儲到持久化介質(zhì)中。
關(guān)鍵字:流數(shù)據(jù);實時存儲;閾值;一致性哈希
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2015)19-0005-02
1引言
隨著物聯(lián)網(wǎng)建設(shè)地不斷發(fā)展,流數(shù)據(jù)逐漸成為信息化系統(tǒng)中一類關(guān)鍵數(shù)據(jù)形式。該類數(shù)據(jù)如何及時存儲已成為當前物聯(lián)網(wǎng)應(yīng)用建設(shè)中的一個重點。對于實時數(shù)據(jù)存儲系統(tǒng)而言,首先要確保數(shù)據(jù)及時存儲,從而保證數(shù)據(jù)的實時性。由于數(shù)據(jù)延遲存儲,造成數(shù)據(jù)處理的非正確性,做出錯誤的決策。
以一個物聯(lián)網(wǎng)環(huán)境下的地鐵站交通監(jiān)管數(shù)據(jù)流存儲任務(wù)為例,該任務(wù)需要監(jiān)管以下幾類數(shù)據(jù):1)客流;2)基礎(chǔ)設(shè)施:扶梯,售票機,防火設(shè)備,照明燈等;3)車流:地鐵,公交車,出租車等。收集并將該流數(shù)據(jù)及時存儲。在該背景下,設(shè)計一種實時存儲方法成為必要。
2交通樞紐實時監(jiān)管系統(tǒng)
交通監(jiān)管系統(tǒng)通過具體設(shè)備進行數(shù)據(jù)監(jiān)測,存儲,處理,對交通事件做出及時具體的措施。該系統(tǒng)采用了分布式的并行架構(gòu)。其結(jié)構(gòu)如圖1所示。
3DRS方法的基本思想
車輛實時監(jiān)管系統(tǒng)分布式架構(gòu)中需要存儲大規(guī)模實時數(shù)據(jù),而這些數(shù)據(jù)具有實時性,高速性,因此我們提出的存儲方法首要考慮存儲的實時性。DRS方法的基本思想如下:
利用Map Reduce思想設(shè)計DRS方法,其方法的設(shè)計思路:數(shù)據(jù)接收階段對數(shù)據(jù)做簡單的劃分工作,數(shù)據(jù)寫入階段則對已劃分數(shù)據(jù)進行處理。以車流數(shù)據(jù)為例,當數(shù)據(jù)接收區(qū)監(jiān)聽到數(shù)據(jù)緩沖區(qū)有數(shù)據(jù)時,數(shù)據(jù)接收區(qū)開始接收數(shù)據(jù)。接收數(shù)據(jù)的同時,存儲程序生成多個存放數(shù)據(jù)的隊列,根據(jù)數(shù)據(jù)的時間標示,將該條數(shù)據(jù)放置到對應(yīng)的隊列中。當隊列中數(shù)據(jù)到達到窗口閾值后,數(shù)據(jù)寫入?yún)^(qū)解析存儲該隊列中的數(shù)據(jù)。各個隊列中數(shù)據(jù)對象發(fā)送給各個數(shù)據(jù)寫入?yún)^(qū),數(shù)據(jù)寫入?yún)^(qū)解析各個數(shù)據(jù)對象,將其同時存儲到不同數(shù)據(jù)服務(wù)器中,實現(xiàn)高速率數(shù)據(jù)快速存儲。
窗口閾值采用時間和數(shù)量閥值,當發(fā)送的數(shù)據(jù)在規(guī)定的時間閥值到達之前已經(jīng)達到數(shù)量閾值,則立即將該部分數(shù)據(jù)進行解析存儲,反之亦然。
4DRS方法的實現(xiàn)
4.1數(shù)據(jù)劃分策略
各個隊列中數(shù)據(jù)對象在內(nèi)存中采用鏈表結(jié)構(gòu)存儲。根據(jù)第三節(jié)對DRS方法思想的描述可知,數(shù)據(jù)接收階段接收數(shù)據(jù)的同時要對數(shù)據(jù)進行劃分操作。該方法使用數(shù)據(jù)的唯一標示劃分數(shù)據(jù),將該條數(shù)據(jù)劃分到對應(yīng)的數(shù)據(jù)隊列中。以車流為例描述該劃分策略:首先,獲取該條數(shù)據(jù)的時間戳屬性值,進行hash直接取余,根據(jù)hash值將該條數(shù)據(jù)放置到對應(yīng)的隊列中。
當某個隊列數(shù)據(jù)滿足某個窗口閾值時,數(shù)據(jù)接收區(qū)會給數(shù)據(jù)對象加上標示key。每個數(shù)據(jù)寫入?yún)^(qū)只負責(zé)某個隊列數(shù)據(jù)對象的解析存儲。
4.2數(shù)據(jù)寫入
數(shù)據(jù)接收區(qū)將該段時間內(nèi)的數(shù)據(jù)劃分后,數(shù)據(jù)寫入?yún)^(qū)接收分片數(shù)據(jù)。使用一致性哈希算法將各個分片數(shù)據(jù)有組織地存儲到數(shù)據(jù)服務(wù)器中。每個服務(wù)器節(jié)點可以對等均勻地分布數(shù)據(jù)。
使用一致性哈希計算時,數(shù)據(jù)寫入?yún)^(qū)將數(shù)據(jù)寫入到哪臺數(shù)據(jù)服務(wù)器不僅僅依賴標示key本身而將數(shù)據(jù)服務(wù)器的配置(IP地址或者機器名)也參與hash運算。單個數(shù)據(jù)服務(wù)器節(jié)點只需要專注于自身存儲工作,從而實現(xiàn)將復(fù)雜的分布式架構(gòu)邏輯與單個服務(wù)節(jié)點數(shù)據(jù)處理相分離,最大限度地利用現(xiàn)有的數(shù)據(jù)庫存儲技術(shù)。
數(shù)據(jù)存儲流水線可以看做一個由數(shù)據(jù)監(jiān)測,數(shù)據(jù)接收,數(shù)據(jù)劃分,數(shù)據(jù)寫入四個部分組成的串聯(lián)系統(tǒng)。初始化數(shù)據(jù)發(fā)送速率,隊列劃分個數(shù)和窗口閾值大小,運行存儲程序。
4.3DRS方法實現(xiàn)
基于上述理論,該DRS方法的實現(xiàn)如下:
首先,首先給幾類流數(shù)據(jù)設(shè)定標示,如給流數(shù)據(jù)設(shè)置屬性值,并配置其值,然后通過屬性值將數(shù)據(jù)分類,即擁有相同屙性值的數(shù)據(jù)為相同類。
其次,數(shù)據(jù)處理機對某類數(shù)據(jù)處理之后,結(jié)果集也賦予相同的Attribute value值,將其一起發(fā)送到數(shù)據(jù)緩沖區(qū),最后,存儲程序?qū)邮盏臄?shù)據(jù)進行存儲,流程如下:
傳感設(shè)備發(fā)送數(shù)據(jù)或者數(shù)據(jù)處理機發(fā)送數(shù)據(jù)時,首先將數(shù)據(jù)發(fā)往數(shù)據(jù)緩沖區(qū);
(1)數(shù)據(jù)接收區(qū)一直監(jiān)聽數(shù)據(jù)緩沖區(qū)的數(shù)據(jù),監(jiān)測到數(shù)據(jù)緩沖區(qū)中有數(shù)據(jù),則開始接收數(shù)據(jù)并初始化存放數(shù)據(jù)的隊列;
(2)如果數(shù)據(jù)緩沖區(qū)監(jiān)測沒有此類數(shù)據(jù)的到來,則一直等待,直到發(fā)送端發(fā)送數(shù)據(jù);
(3)存儲程序根據(jù)時間戳屬性計算出該條數(shù)據(jù)發(fā)往的對應(yīng)隊列;
f4)如果某個隊列數(shù)據(jù)到達時間窗口閾值,無論數(shù)據(jù)量是否滿足數(shù)據(jù)量閾值,數(shù)據(jù)接收區(qū)均給該數(shù)據(jù)對象配置標示key;
(5)數(shù)據(jù)寫入?yún)^(qū)獲取該數(shù)據(jù)對象,根據(jù)標示key和數(shù)據(jù)服務(wù)器列表,進行一致性哈希計算,根據(jù)hash值將該數(shù)據(jù)對象存放到對應(yīng)數(shù)據(jù)服務(wù)器中;
(6)如果到達數(shù)據(jù)量窗口閾值,無論時間是否滿足時間窗口閾值,數(shù)據(jù)寫入?yún)^(qū)都將進行取數(shù)據(jù)對象操作。
5實驗設(shè)計及結(jié)果
以物聯(lián)網(wǎng)下交通樞紐監(jiān)測系統(tǒng)下車流的存儲為例測試驗證DRS方法。
實驗準備:2臺雙核3.0GHz CPU和4GB內(nèi)存的機器上安裝Load Runner9.0,模擬數(shù)據(jù)流發(fā)送端;1臺2x4核2.4GHzCPU,16GB內(nèi)存的機器上安裝第三方緩存ActiveMQ中間件,作為緩存服務(wù)器;一臺2x4核2.4GHz CPU,16GB內(nèi)存的機器上安裝存儲程序;6臺2x4核2.4GHz CPU,16GB內(nèi)存1TBRAID5磁盤陣列的機器上安裝oracle10g,作為持久化存儲。
實驗1:使用DRS方法進行低中速率數(shù)據(jù)存儲測試,查看效果:使用Load Runner服務(wù)器模擬數(shù)據(jù)流發(fā)送時,設(shè)置不同的數(shù)據(jù)發(fā)送速率,窗口時間閾值設(shè)定為2s,數(shù)據(jù)量閾值設(shè)定為2000條。持續(xù)運行10小時。
實驗結(jié)果:
圖2中,橫軸為數(shù)據(jù)發(fā)送速率,即每秒發(fā)送的數(shù)據(jù)量,單位為條/秒,表示速率不斷提高,縱軸為延遲時間,單位為小時。由圖2得知,將流數(shù)據(jù)劃分并考慮將數(shù)據(jù)分布存儲之后,低中速數(shù)據(jù)無延遲的存儲到數(shù)據(jù)服務(wù)器中,這大大提高了系統(tǒng)性能,保證了數(shù)據(jù)的完整性,實時性。
實驗2:使用DRS方法進行萬級別發(fā)送速率的存儲測試,查看效果:使用Load Runner服務(wù)器模擬數(shù)據(jù)流發(fā)送時,設(shè)置不同的數(shù)據(jù)發(fā)送速率與不同的數(shù)據(jù)量閾值,每秒數(shù)據(jù)發(fā)送量依次設(shè)置為1w,2w,3w,4w,5w,6w,7w,8w。數(shù)據(jù)量閾值分別設(shè)為2000條,3000條,5000條,在這三種閾值下分別進行測試。時間閾值設(shè)定為2s,持續(xù)運行10小時。
圖3中,橫軸為數(shù)據(jù)發(fā)送速率,即每秒發(fā)送的數(shù)據(jù)量,單位為條/秒,表示速率不斷提高,縱軸為延遲時間,單位為小時。由結(jié)果圖可知使用DRS方法進行存儲也出現(xiàn)延遲現(xiàn)象,延遲時間隨著速率不斷提高而增長。當數(shù)據(jù)速率提高到更高級別時,由于數(shù)據(jù)劃分策略緣故延遲現(xiàn)象不會完全消除,這也是本論文下一步將要解決的問題。
6結(jié)論
本文提出了分布式實時存儲方法DRS,該方法基于實時車輛數(shù)據(jù)進行了一系列實驗。結(jié)果證明該方法在大部分情況下?lián)碛辛己玫男阅?,并?yīng)用于某市交通監(jiān)管實時系統(tǒng)中,成效顯著,提高了系統(tǒng)的性能。
本文下一步工作將針對于閾值的設(shè)定,數(shù)據(jù)的劃分與發(fā)送數(shù)據(jù)的速率之間的關(guān)系做進一步分析,使該方法更有使用價值。