姜遠(yuǎn)凱
(北京郵電大學(xué)計(jì)算機(jī)學(xué)院,北京 100876)
一種多樣式實(shí)時(shí)數(shù)據(jù)分析系統(tǒng)的設(shè)計(jì)
姜遠(yuǎn)凱
(北京郵電大學(xué)計(jì)算機(jī)學(xué)院,北京 100876)
本文從工程角度介紹了實(shí)時(shí)數(shù)據(jù)的采集和分析的一般過程,在此基礎(chǔ)上利用設(shè)計(jì)模式中的簡單工廠模式和適配器模式給出一種針對多樣式實(shí)時(shí)數(shù)據(jù)分析的設(shè)計(jì)架構(gòu),該架構(gòu)具有較好的兼容性和擴(kuò)展性,并在 visual studio 2003 平臺下進(jìn)行驗(yàn)證,試驗(yàn)結(jié)果表明可以達(dá)到預(yù)期的效果,滿足實(shí)時(shí)數(shù)據(jù)傳輸和分析的要求,該模式具有通用性。
實(shí)時(shí)數(shù)據(jù);分析;框架;VC++
TP391
隨著現(xiàn)代通信技術(shù)的飛速發(fā)展,實(shí)時(shí)數(shù)據(jù)的應(yīng)用也愈加廣泛,像火車售票系統(tǒng),股票交易系統(tǒng),雷達(dá)情報(bào)傳輸系統(tǒng)等都屬于實(shí)時(shí)數(shù)據(jù)應(yīng)用的范疇。實(shí)時(shí)數(shù)據(jù)不僅要求及時(shí)傳輸,而且要求及時(shí)分析,顯示,以便及時(shí)給用戶提供可靠的信息。
但是系統(tǒng)中常常遇到由于歷史原因,各個(gè)數(shù)據(jù)采集終端接受到數(shù)據(jù)后,打包的格式不盡相同,雖然數(shù)據(jù)發(fā)到各自的數(shù)據(jù)處理系統(tǒng)之后可以正確的解釋,但是系統(tǒng)之間的兼容性往往不理想。以某金融衍生物交易系統(tǒng)為例,從交易所A獲得的數(shù)據(jù)包格式與交易所B獲得的數(shù)據(jù)包格式可能不同,但是如果強(qiáng)行進(jìn)行統(tǒng)一,可能需要更改大量的軟硬件設(shè)備,所以對有差異數(shù)據(jù)包的集中處理,可以很好的解決這一問題,同時(shí)可以使系統(tǒng)有更好的維護(hù)性和可擴(kuò)充性。
本文提出一種設(shè)計(jì)方案,可以實(shí)現(xiàn)對差異數(shù)據(jù)包的集中處理,同時(shí)使系統(tǒng)的擴(kuò)展性更好,比如如果要新加入對交易所C的數(shù)據(jù)處理,也可以比較好的實(shí)現(xiàn),而不必改動大量的原始代碼。
在很多應(yīng)用場景中對數(shù)據(jù)的可靠性要求比較高,所以我們采用兩路傳輸來解決此問題,正常情況下從主線路中獲得實(shí)時(shí)數(shù)據(jù),當(dāng)主線路發(fā)生故障時(shí)則從從線路獲得數(shù)據(jù)。這樣可以在一定情況下保證數(shù)據(jù)傳輸?shù)倪B續(xù)性。在實(shí)際應(yīng)用中主從線路應(yīng)該經(jīng)過不同的地理位置到達(dá)數(shù)據(jù)的處理端。為了保證傳輸?shù)目煽啃?,光纖實(shí)時(shí)網(wǎng)絡(luò)是一個(gè)不錯(cuò)的選擇[1]。模型如圖-1所示。針對系統(tǒng)復(fù)雜程度的不同,在數(shù)據(jù)處理端可以選擇是否配接數(shù)據(jù)庫模塊。
數(shù)據(jù)采集器從數(shù)據(jù)源獲得數(shù)據(jù)后,按照指定的格式將數(shù)據(jù)進(jìn)行打包,數(shù)據(jù)包的包頭應(yīng)該遵循統(tǒng)一的格式。為了便于管理,打包后形成的文件可以有一個(gè)文件頭,用于保存數(shù)據(jù)包的額外信息,比如版本號,生成時(shí)間,需要的緩沖區(qū)空間大小,位置編號等等。
數(shù)據(jù)在打包時(shí),數(shù)字?jǐn)?shù)據(jù)可以根據(jù)系統(tǒng)需求選擇使用二進(jìn)制形式傳輸或者ASCII碼形式傳輸。數(shù)字采用二進(jìn)制形式存儲比用ASCII形式存儲節(jié)省空間。字符數(shù)據(jù)采用何種形式傳輸則影響不大。
圖1 數(shù)據(jù)采集和分析結(jié)構(gòu)圖
按面向?qū)ο蟮奶幚矸绞娇梢远x文件頭如下,
在數(shù)據(jù)采集器端構(gòu)造要傳輸?shù)奈募r(shí),一頁大小寫入一個(gè)文件,頁的大小可以指定。按如上定義可以很容易獲得文件中的包含的消息包。PktHead 是文件中消息包的包頭,其中可以包含系統(tǒng)時(shí)間,壓縮標(biāo)識等信息??梢园慈缦路绞蕉x消息包頭:
數(shù)據(jù)分析的一般過程如圖-2所示,如果僅僅對滿足條件的實(shí)時(shí)數(shù)據(jù)感興趣,可以在數(shù)據(jù)解析時(shí)指定篩選條件,將滿足條件的數(shù)據(jù)包發(fā)送到結(jié)果文件中并調(diào)用相應(yīng)的消息解析函數(shù),對消息包進(jìn)行處理并將結(jié)果進(jìn)行反饋。
針對具體的消息進(jìn)行處理時(shí)有兩種方式可供選擇:每一種消息類型均對應(yīng)一個(gè)消息處理函數(shù)。
所有的消息類型均由同一個(gè)消息處理函數(shù)來處理,所有的消息格式,字段的定義,域長度由一個(gè)XML文件來定義,并用專門的類來解析XML文件。消息處理函數(shù)根據(jù)XML文件的解析結(jié)果來具體進(jìn)行相應(yīng)的處理。C++標(biāo)準(zhǔn)中雖然沒有直接的接口來解析XML文件,但是有好多已實(shí)現(xiàn)的XML解析器可供選擇,比如Xerces-C++[2]是一個(gè)非常健壯的XML解析器,它提供了驗(yàn)證,以及SAX和DOMAPI,TinyXML是一個(gè)開源的解析XML的解析庫,能夠用于C++,能夠在Windows或Linux中編譯[3]。
當(dāng)消息類型相對較少時(shí),可以用方式一來處理,當(dāng)消息類型較多時(shí),第二種方式處理起來較方便。
為保證數(shù)據(jù)完整性,在數(shù)據(jù)收集端需要有對數(shù)據(jù)進(jìn)行處理。用散列函數(shù)計(jì)算速度比數(shù)字簽名要快,考慮到數(shù)據(jù)的實(shí)時(shí)性要求,應(yīng)該避免使用數(shù)字簽名技術(shù)。但是要驗(yàn)證數(shù)據(jù)的包的完整性就需要計(jì)算其hash散列值,由于散列函數(shù)的計(jì)算速度很快,所以可以將其作為數(shù)據(jù)包的一部分發(fā)送,并在接收端根據(jù)散列值來驗(yàn)證數(shù)據(jù)包的完整性[4]。如果対實(shí)時(shí)數(shù)據(jù)的保密性有要求,在數(shù)據(jù)的收集端和接受端還要有相應(yīng)的加密解密處理模塊。
圖2 數(shù)據(jù)分析過程
系統(tǒng)綜合是實(shí)際應(yīng)用中比較常見的問題,這里主要是指軟件方面的綜合。系統(tǒng)綜合一般來說主要涉及兩個(gè)方面,一種是對已有的系統(tǒng)的重復(fù)利用,另一種是對添加新的系統(tǒng)保持開放性。針對這兩種問題可以用設(shè)計(jì)模式中的簡單工廠模式(圖-3)和適配器模式(圖-4)綜合起來加以解決[5]。適配器模式實(shí)現(xiàn)對已有系統(tǒng)的重復(fù)利用,簡單工廠模式適用于系統(tǒng)的簡單擴(kuò)充[6]。
可以定義工廠類偽代碼如下:
當(dāng)引入新的處理單元時(shí),只需要使繼承FeedParser 基類,并實(shí)現(xiàn)相應(yīng)的處理函數(shù)接口, 并在FeedFactory 工廠類中加入相應(yīng)的生成語句即可。由程序在運(yùn)行時(shí)根據(jù)要處理的文件類型動態(tài)生成相應(yīng)的處理對象來對文件進(jìn)行處理。這樣就對程序進(jìn)行了較好的封裝,有利于系統(tǒng)的維護(hù)。
圖3 簡單工廠模式
圖4 適配器模式
按此設(shè)計(jì)模式來處理采集自某數(shù)據(jù)采集器所生成的數(shù)據(jù)如圖-5 所示??梢灾伙@示用戶關(guān)心的數(shù)據(jù),也可以顯示全部數(shù)據(jù)。
圖5 數(shù)據(jù)分析結(jié)果
本文給出了實(shí)時(shí)數(shù)據(jù)采集和處理的一般過程,并介紹了一種應(yīng)用架構(gòu),實(shí)現(xiàn)了對差異數(shù)據(jù)包的集中處理。此模式也可以較好的解析從數(shù)據(jù)采集端接收的信息,并對數(shù)據(jù)進(jìn)行相應(yīng)的篩選,使用簡單工廠模式和適配器模式對程序進(jìn)行改造后,使其有了更好的擴(kuò)展性和兼容性,能夠滿足系統(tǒng)的需求。
[1]徐維江.實(shí)時(shí)監(jiān)控軟件及數(shù)據(jù)采集系統(tǒng)綜合研究[D].西安:西北工業(yè)大學(xué),2007,03.Xu Wei-jiang.Research on Real Time Monitor Software and Data Collecting System[D].Xian:Northwestern Polytechnical University,2007-03.
[2]Rick Parrish.充分利用 Xerces-C++[EB/OL].http://www.ibm.com/developerworks/cn/xml/x-xercc/,2003,09,01.Rick Parrish.Take advantage ofXerces-C++[EB/OL]http://www.ibm.com/developerworks/cn/xml/x-xercc/,2003,09,01.
[3]David.TinyXML:一個(gè)優(yōu)秀的C++ XML解析器[EB/OL].http://blog.chinaunix.net/u1/55091/showart_1914805.html,2009,4-30.David.TinyXML: An Excellent C ++ XML Parser[EB/OL]http://blog.chinaunix.net/u1/55091/showart_1914805.html,2009,4-30.
[4]王燊燊,殷肖川,王方年.一種實(shí)時(shí)數(shù)據(jù)流認(rèn)證方案[J]通信技術(shù),2009,42(2):238-240.Wang Shen-shen,Yin Xiao-chuan,Wang Fang-nian.A Real Time Data Flow Authentication Scheme[J].Communications Technology,2009,Vol 42 No2:238-240.
[5]Erich Gamma,Richard Helm,Ralph Johnson,et al.Design Pattens –Elements of Reusable Object-Oriented Software [M].China Machine Press,1997.
[6]程杰.大話設(shè)計(jì)模式[M].清華大學(xué)出版社,2007.Cheng Jie.Design Pattern[M].Tsinghua University Press,2007.
A Design of Multi-kind Real-time Data Analysis System
JIANG Yuan-kai
(School of computer science, Beijing University of Posts and Telecommunications, Beijing 100876)
The article introduces a common procedure of real-time data collect and analysis to you, offers a kind of framework that could be used to analysis real-time date of di ff erent styles on the base of design patterns, especially Simple factory pattern and adapter pattern.This could be identi fi ed under the platform of visual studio 2003 and result shows us that it could work well.It stands for a model that could be used in many places.
Real-time; Data; Analysis; Framework; VC++
本文引用格式:姜遠(yuǎn)凱.一種多樣式實(shí)時(shí)數(shù)據(jù)分析系統(tǒng)的設(shè)計(jì).電子元器件與信息技術(shù)[J],2017,1(1):45-49.
姜遠(yuǎn)凱,男,工程師,碩士研究生,研究方向IP網(wǎng)絡(luò),網(wǎng)絡(luò)安全。
:JIANG Yuan-kai.A Design of Multi-kind Real-time Data Analysis System.Journal of electronic components and information technology[J],2017,1(1):45-49.