田闖+張萍
[摘 要]企業(yè)常常面對大量分布分散的終端設備數(shù)據(jù),這些數(shù)據(jù)在傳輸?shù)綌?shù)據(jù)處理服務器的過程中,以流數(shù)據(jù)的方式向上匯聚。為了能夠快速處理流數(shù)據(jù),本文設計基于Esper的插件化流數(shù)據(jù)處理框架,以提高工作效率。
[關鍵詞]流數(shù)據(jù);Esper;插件化
doi:10.3969/j.issn.1673 - 0194.2017.12.077
[中圖分類號]TP391.44;TN929.5 [文獻標識碼]A [文章編號]1673-0194(2017)12-0-02
1 研究背景
流數(shù)據(jù)的特點是數(shù)據(jù)持續(xù)到達,且速度快、規(guī)模宏大、格式各異。目前,在進行外場感知設備的數(shù)據(jù)采集處理時,通常要同時對接不同的外場感知設備。由于不同的感知設備其通信協(xié)議不同,甚至差別較大,而傳統(tǒng)的做法一般都是針對不同的外場感知設備的數(shù)據(jù)采集,通常進行專門的開發(fā)。
本文對外場感知設備的數(shù)據(jù)采集技術進行了分析與研究,并基于Esper設計實現(xiàn)了一個能夠適用于多協(xié)議流數(shù)據(jù)處理平臺SCP(Stream Computer Platform)。
2 外場感知數(shù)據(jù)采集
2.1 流數(shù)據(jù)
近三十多年來,數(shù)據(jù)庫技術發(fā)展迅速且得到了廣泛應用。一方面,數(shù)據(jù)建模形式多樣,從層次數(shù)據(jù)庫、網(wǎng)狀數(shù)據(jù)庫、關系數(shù)據(jù)庫、對象數(shù)據(jù)庫到關系對象數(shù)據(jù)庫等;另一方面,數(shù)據(jù)規(guī)模也越來越大。傳統(tǒng)數(shù)據(jù)庫技術的一個共同點是:數(shù)據(jù)存儲在介質(zhì)中,可以多次利用;用戶提交數(shù)據(jù)操縱語言(Data Manipulation Language,DML)來獲取查詢結果。盡管傳統(tǒng)數(shù)據(jù)庫獲得了較大的成功,但是在20世紀末,一種新的應用模型卻對它提出了挑戰(zhàn)。一種名為流數(shù)據(jù)(Streaming Data)的應用模型廣泛出現(xiàn)在眾多領域,例如金融應用、網(wǎng)絡監(jiān)視、通信數(shù)據(jù)管理、Web應用、傳感器網(wǎng)絡數(shù)據(jù)處理等。
令t表示任一時間戳,at表示在該時間戳到達的數(shù)據(jù),流數(shù)據(jù)可以表示成{…,at-1,at,at+1,…}。區(qū)別于傳統(tǒng)應用模型,流數(shù)據(jù)模型具有以下4點共性:①數(shù)據(jù)實時到達;②數(shù)據(jù)到達次序獨立,不受應用系統(tǒng)所控制;③數(shù)據(jù)規(guī)模宏大且不能預知其最大值;④數(shù)據(jù)一經(jīng)處理,除非特意保存,否則不能被再次取出處理,或者再次提取數(shù)據(jù)。
2.2 外場感知設備數(shù)據(jù)采集中的關鍵問題
外場感知數(shù)據(jù)的數(shù)據(jù)量大、設備分散、各自同時向上匯聚數(shù)據(jù)的特點帶來了一些采集的特殊問題。本部分分析了感知設備的配置管理問題,對于大量異構數(shù)據(jù)的匯聚,給出了兩步走的分層設計,以解決大并發(fā)情況下異構數(shù)據(jù)的采集。并對采集到的異構數(shù)據(jù)進行解析,給出了一個可擴展的插件式的處理框架,以解析采集到的異構數(shù)據(jù)。
2.2.1 流數(shù)據(jù)的并發(fā)傳輸
外場感知數(shù)據(jù)由于設備較多,數(shù)據(jù)匯聚點也較多,且互相之間沒有必然聯(lián)系,各自獨立上傳,這導致前置機要同時接受多個甚至大量的鏈接。即便前置機可以處理多個鏈接,也不能同時將數(shù)據(jù)進行分類和處理,因為這會導致前置機壓力過大,影響數(shù)據(jù)的時效性和完整性。所以,為了能夠同時處理大量來自不同匯聚點的異構數(shù)據(jù),本文給出兩步走的解決方法。第一步,前置機的功能弱化,只接收同構數(shù)據(jù),這能降低前置機的通信復雜性,同時將異構數(shù)據(jù)的處理放到第二步中。第二步將構建基于Esper的數(shù)據(jù)匯聚總線,Esper總線將接收前置機的數(shù)據(jù),不進行任何處理,只是簡單地將不同結構的數(shù)據(jù)放置到不同的模塊隊列中。這樣,來自外場感知的異構數(shù)據(jù)就最終被放到了不同的模塊隊列中,同時可以保證大數(shù)據(jù)量的實時處理。流數(shù)據(jù)的并發(fā)傳輸如圖1所示。
2.2.2 多規(guī)約數(shù)據(jù)的解析
以往的流數(shù)據(jù)處理框架通常將數(shù)據(jù)的解析和傳輸在一起實現(xiàn),對于多種外場感知數(shù)據(jù)需要單獨實現(xiàn)一套采集程序,不能很好地進行復用。由于本文使用了Esper總線,將數(shù)據(jù)分發(fā)到不同模塊的消息隊列中,所以多規(guī)約的數(shù)據(jù)解析就在各規(guī)約數(shù)據(jù)的模塊隊列中完成了解析。為了能夠?qū)Σ煌?guī)約的數(shù)據(jù)進行解析,這里只需要實現(xiàn)不同規(guī)約對應的解析模塊,在程序啟動時加載到SCP即可。對于不同的模塊隊列,分別啟動一個或多個消費線程,消費線程調(diào)用解析模塊,有針對性地將來自不同外場感知設備的數(shù)據(jù),解析為同一種統(tǒng)一的格式放入目標隊列中,或者單獨投遞到指定的目的地(文件、數(shù)據(jù)庫、MQ等)。
3 基于Esper的多協(xié)議流數(shù)據(jù)處理平臺的設計及實現(xiàn)
在文中關鍵問題分析的基礎上,筆者基于Esper復雜事件處理引擎設計并實現(xiàn)了涵蓋異構設備、實時外場感知數(shù)據(jù)匯聚、大規(guī)模并發(fā)傳輸?shù)牧鲾?shù)據(jù)處理平臺SCP。其系統(tǒng)框架如圖2所示。主要模塊包括:前置機、Esper總線、感知隊列、消費解碼線程、目標隊列、存儲系統(tǒng)、配置庫、配置文件以及守護進程等。
圖2中各個功能模塊的說明:
(1)前置機:前置機通過讀取配置庫中與本前置機相關的配置,從而確定與哪些通信端通信,以及通信的具體方式等。
(2)Esper總線:負責接收以事件形式包裝的、來自各個前置機的外場原始數(shù)據(jù),并根據(jù)事件的類型分發(fā)到不同的感知隊列中。
(3)感知隊列:盛放未經(jīng)解碼的異構數(shù)據(jù),每個感知隊列盛放一種類型的感知數(shù)據(jù)。
(4)消費解碼線程:消費解碼線程使用以插件的形式加載到系統(tǒng)中的解碼模塊,一種消費線程負責從感知隊列中取出數(shù)據(jù),調(diào)用解碼模塊進行解碼,將統(tǒng)一格式的數(shù)據(jù)放入目標隊列中。
(5)目標隊列:對于異構數(shù)據(jù),系統(tǒng)將最終提供一個統(tǒng)一的數(shù)據(jù)格式來存儲異構數(shù)據(jù),異構數(shù)據(jù)可能只是目標隊列中數(shù)據(jù)對象的子屬性。這樣目標隊列就可以盛放各種外場感知數(shù)據(jù)。如果感知數(shù)據(jù)是完全不同格式的數(shù)據(jù),比如有些外場感知數(shù)據(jù)是文件,有些是圖片。感知數(shù)據(jù)經(jīng)過消費線程解碼后,可以直接跳過目標隊列,直接進入存儲系統(tǒng)。
(6)存儲系統(tǒng):系統(tǒng)最終存放數(shù)據(jù)的地方。其可以是文件、數(shù)據(jù)庫、外部消息隊列服務等。
(7)配置庫:提供系統(tǒng)啟動需要的各種配置信息。
(8)配置文件:提供一些適合存放在文件中的配置信息,比如本機IP、端口等用于定位前置機本身的信息。
(9)守護進程:用于在系統(tǒng)出現(xiàn)異常退出等不在正常運行狀態(tài)時重啟SCP。
4 結 語
在能源和交通等領域,企業(yè)信息化日益發(fā)展,企業(yè)常常面對大量分布分散的終端設備數(shù)據(jù),這些數(shù)據(jù)在傳輸?shù)綌?shù)據(jù)處理服務器的過程中,以流數(shù)據(jù)的方式向上匯聚?;诹鲾?shù)據(jù)的特點,本文為了能夠快速處理流數(shù)據(jù),設計了基于Esper的插件化流數(shù)據(jù)處理框架。該框架可以適應不同領域數(shù)據(jù)格式異構的問題,可以處理多數(shù)據(jù)源,同時可以向數(shù)據(jù)處理服務器匯聚數(shù)據(jù)。
主要參考文獻
[1]亓開元,趙卓峰,房俊,等.針對高速數(shù)據(jù)流的大規(guī)模數(shù)據(jù)實時處理方法[J].計算機學報,2012(3).
[2]孫大為,張廣艷,鄭緯民.大數(shù)據(jù)流式計算:關鍵技術及系統(tǒng)實例[J].軟件學報,2014(4).