美章網(wǎng) 資料文庫(kù) 實(shí)時(shí)數(shù)據(jù)采集模型設(shè)計(jì)與開(kāi)發(fā)范文

實(shí)時(shí)數(shù)據(jù)采集模型設(shè)計(jì)與開(kāi)發(fā)范文

本站小編為你精心準(zhǔn)備了實(shí)時(shí)數(shù)據(jù)采集模型設(shè)計(jì)與開(kāi)發(fā)參考范文,愿這些范文能點(diǎn)燃您思維的火花,激發(fā)您的寫(xiě)作靈感。歡迎深入閱讀并收藏。

實(shí)時(shí)數(shù)據(jù)采集模型設(shè)計(jì)與開(kāi)發(fā)

摘要:

數(shù)據(jù)采集是構(gòu)建集團(tuán)/區(qū)域公司級(jí)實(shí)時(shí)監(jiān)管系統(tǒng)的重要基礎(chǔ)。文章針對(duì)已有數(shù)據(jù)采集軟件開(kāi)發(fā)中功能模塊重復(fù)開(kāi)發(fā),應(yīng)用中測(cè)點(diǎn)配置不統(tǒng)一,不支持冗余部署,故障恢復(fù)能力不足等問(wèn)題,采用C/S架構(gòu),設(shè)計(jì)了可靠實(shí)時(shí)數(shù)據(jù)采集模型,該模型包括數(shù)據(jù)采集、數(shù)據(jù)緩存、數(shù)據(jù)傳輸和數(shù)據(jù)持久性4個(gè)模塊。實(shí)際應(yīng)用表明,基于該模型開(kāi)發(fā)的實(shí)時(shí)數(shù)據(jù)采集軟件易于配置,數(shù)據(jù)傳輸可靠,故障恢復(fù)能力強(qiáng),能滿足實(shí)時(shí)系統(tǒng)的數(shù)據(jù)采集要求。

關(guān)鍵詞:

實(shí)時(shí)數(shù)據(jù);統(tǒng)一配置;數(shù)據(jù)采集;數(shù)據(jù)緩存;冗余傳輸

生產(chǎn)數(shù)據(jù)是各類電力信息系統(tǒng)的應(yīng)用基礎(chǔ),從廠級(jí)監(jiān)控信息系統(tǒng)(SupervisorInformationSystem,SIS)到集團(tuán)/區(qū)域(省級(jí))公司級(jí)實(shí)時(shí)監(jiān)管系統(tǒng),實(shí)時(shí)數(shù)據(jù)采集始終是實(shí)時(shí)系統(tǒng)不可或缺的部分[1-2]。在以往的數(shù)據(jù)采集軟件開(kāi)發(fā)中,功能模塊重復(fù)開(kāi)發(fā)較為嚴(yán)重,開(kāi)發(fā)效率不高,軟件質(zhì)量管控工作量大;在工程應(yīng)用中,數(shù)據(jù)采集軟件測(cè)點(diǎn)配置多采用本地方式,無(wú)法進(jìn)行統(tǒng)一管理,不便于配置、查詢,不支持冗余配置,故障恢復(fù)能力不足。本文以實(shí)時(shí)監(jiān)管系統(tǒng)中的數(shù)據(jù)采集為基礎(chǔ),結(jié)合實(shí)時(shí)數(shù)據(jù)采集的特性,針對(duì)數(shù)據(jù)抽取、轉(zhuǎn)換、傳輸、數(shù)據(jù)緩存及冗余傳輸?shù)认嚓P(guān)環(huán)節(jié)進(jìn)行分析,給出了較為通用的設(shè)計(jì)模型。

1數(shù)據(jù)采集軟件的功能需求

在集團(tuán)/區(qū)域(省級(jí))公司實(shí)時(shí)監(jiān)管系統(tǒng)中,絕大多數(shù)的基礎(chǔ)數(shù)據(jù)來(lái)自于下轄電廠實(shí)時(shí)生產(chǎn)系統(tǒng)。實(shí)時(shí)監(jiān)管系統(tǒng)中的數(shù)據(jù)監(jiān)測(cè)、數(shù)據(jù)報(bào)警、性能指標(biāo)計(jì)算,污染物排放定量分析及經(jīng)濟(jì)運(yùn)行等相關(guān)功能都圍繞一次生產(chǎn)數(shù)據(jù)展開(kāi)[1-3]。數(shù)據(jù)采集軟件需要完成對(duì)監(jiān)管電廠海量實(shí)時(shí)生產(chǎn)數(shù)據(jù)的篩選,完成篩選后數(shù)據(jù)的網(wǎng)絡(luò)傳輸,最終匯總到公司側(cè)的數(shù)據(jù)庫(kù),實(shí)現(xiàn)生產(chǎn)數(shù)據(jù)的持久化。實(shí)時(shí)監(jiān)管系統(tǒng)中,因監(jiān)管電廠數(shù)量眾多,各個(gè)電廠信息化程度差異大,接入的數(shù)據(jù)源差異很大。對(duì)于已有廠級(jí)監(jiān)控信息系統(tǒng)(SupervisoryInformationSystem,SIS)、管理信息系統(tǒng)(ManagementInforma-tionSystem,MIS)的電廠,數(shù)據(jù)源主要包括實(shí)時(shí)數(shù)據(jù)庫(kù)和關(guān)系數(shù)據(jù)庫(kù)。實(shí)時(shí)數(shù)據(jù)庫(kù)應(yīng)用較為廣泛的包括PI、eDNA、openPlant、Rython[4]等;關(guān)系數(shù)據(jù)庫(kù)主要包括MSSqlserver、Oracle等。部分廠站側(cè)沒(méi)有集成后的信息系統(tǒng),需要從生產(chǎn)系統(tǒng)中直接采集,通信協(xié)議包括用于過(guò)程控制的OLE(OLEforProcessControl,OPC)協(xié)議,IEC101、IEC104、CDT、ModBus等規(guī)約,少數(shù)系統(tǒng)需要采用自定義用戶數(shù)據(jù)報(bào)協(xié)議(UserDatagramProtocol,UDP)。基于這種現(xiàn)狀,數(shù)據(jù)采集軟件必須要解決多種數(shù)據(jù)源的數(shù)據(jù)抽取。

實(shí)時(shí)監(jiān)管系統(tǒng)在構(gòu)建中需要兼顧數(shù)據(jù)完整性和數(shù)據(jù)規(guī)模2方面,既要保證采集數(shù)據(jù)能滿足性能計(jì)算、分析的需要,又要避免采集數(shù)據(jù)規(guī)模過(guò)大,給主站側(cè)系統(tǒng)帶來(lái)不必要的壓力。數(shù)據(jù)在采集中還需要完成篩選,及源測(cè)點(diǎn)和目標(biāo)測(cè)點(diǎn)的映射;在傳輸中完成實(shí)時(shí)數(shù)據(jù)及時(shí)戳轉(zhuǎn)換,同時(shí)要為工程實(shí)施提供易用的測(cè)點(diǎn)檢索、維護(hù)功能等。在大多數(shù)實(shí)時(shí)監(jiān)管系統(tǒng)中,從電廠的數(shù)據(jù)源到主站側(cè)服務(wù)器,地域跨度較大,中間網(wǎng)絡(luò)狀況較為復(fù)雜。這種情況要求在出現(xiàn)網(wǎng)絡(luò)異常時(shí),軟件能及時(shí)緩存數(shù)據(jù),待通信恢復(fù)后,按照數(shù)據(jù)回補(bǔ)策略重新發(fā)送,保證實(shí)時(shí)數(shù)據(jù)的完整性。因此,數(shù)據(jù)采集軟件必須能保證數(shù)據(jù)的可靠、高效傳輸,要能滿足實(shí)時(shí)系統(tǒng)的相關(guān)功能指標(biāo)要求。綜上所述,實(shí)時(shí)數(shù)據(jù)采集軟件必須涵蓋的功能包括:支持多種類型數(shù)據(jù)源的采集;支持?jǐn)?shù)據(jù)抽取篩選,自動(dòng)完成測(cè)點(diǎn)的映射,支持測(cè)點(diǎn)和數(shù)據(jù)的標(biāo)準(zhǔn)化轉(zhuǎn)換;完成實(shí)時(shí)數(shù)據(jù)的可靠、高效傳輸,具備一定的故障恢復(fù)能力,支持?jǐn)?shù)據(jù)緩存,支持通信的冗余配置。

2數(shù)據(jù)采集模型的設(shè)計(jì)

2.1總體架構(gòu)數(shù)據(jù)采集模型采用C/S模式,基于TCP/IP協(xié)議開(kāi)發(fā)[5]。按照模塊功能劃分,模型架構(gòu)如圖1所示。

2.1.1服務(wù)器端的主要功能1)測(cè)點(diǎn)管理。基本測(cè)點(diǎn)屬性見(jiàn)表1所列。通過(guò)測(cè)點(diǎn)的基本屬性配置,完成了源測(cè)點(diǎn)與目標(biāo)測(cè)點(diǎn)的映射,為客戶端進(jìn)行數(shù)據(jù)抽取、數(shù)據(jù)校驗(yàn)、轉(zhuǎn)換提供了所需的配置信息。為了便于管理、查詢,測(cè)點(diǎn)屬性通常保存在服務(wù)器側(cè)實(shí)時(shí)數(shù)據(jù)庫(kù)或本地配置文件中,客戶端僅保留一份配置副本,不需進(jìn)行手動(dòng)修改。當(dāng)測(cè)點(diǎn)配置更改時(shí),服務(wù)器會(huì)主動(dòng)推送信息到客戶端或由客戶端在下一次連接時(shí)發(fā)起請(qǐng)求,主動(dòng)獲取更新本地副本。2)客戶端管理。客戶端管理包括客戶端配置管理和狀態(tài)管理,配置管理包括對(duì)每個(gè)客戶端的基本信息配置,對(duì)互為冗余的客戶端進(jìn)行成組配置;狀態(tài)管理主要檢測(cè)當(dāng)前客戶端綁定的socket信息,完成當(dāng)前數(shù)據(jù)鏈路的流量統(tǒng)計(jì),完成客戶端工作狀態(tài)判定,通過(guò)對(duì)網(wǎng)絡(luò)通信狀態(tài)及工作超時(shí)檢測(cè),實(shí)現(xiàn)對(duì)冗余客戶端的自動(dòng)管理。在數(shù)據(jù)采集預(yù)處理時(shí),服務(wù)器端通過(guò)測(cè)點(diǎn)配置項(xiàng)中的標(biāo)識(shí)字符串或客戶端標(biāo)識(shí),自動(dòng)完成測(cè)點(diǎn)與客戶端的邏輯關(guān)聯(lián),生成每個(gè)客戶端的工作點(diǎn)集。3)網(wǎng)絡(luò)通信管理。完成指定端口偵聽(tīng),處理網(wǎng)絡(luò)連接請(qǐng)求,完成數(shù)據(jù)接收、數(shù)據(jù)拼包,實(shí)現(xiàn)對(duì)基本數(shù)據(jù)指令的解析處理、處理網(wǎng)絡(luò)異常檢測(cè)等。4)數(shù)據(jù)存儲(chǔ)管理。完成實(shí)時(shí)數(shù)據(jù)解析、處理,完成目標(biāo)數(shù)據(jù)庫(kù)配置、目標(biāo)數(shù)據(jù)庫(kù)自動(dòng)連接,實(shí)現(xiàn)實(shí)時(shí)、歷史數(shù)據(jù)入庫(kù)速率控制等。5)數(shù)據(jù)緩存管理。在數(shù)據(jù)存儲(chǔ)異常時(shí)自動(dòng)完成數(shù)據(jù)緩存,同時(shí)通過(guò)緩存讀取管理實(shí)現(xiàn)對(duì)歷史數(shù)據(jù)回補(bǔ)的限速處理。

2.1.2客戶端的主要功能1)數(shù)據(jù)源管理:完成數(shù)據(jù)源基本配置,實(shí)現(xiàn)數(shù)據(jù)源自動(dòng)連接等。2)數(shù)據(jù)采集管理:維護(hù)采集測(cè)點(diǎn)副本,完成配置項(xiàng)驗(yàn)證,實(shí)現(xiàn)數(shù)據(jù)測(cè)點(diǎn)映射,實(shí)現(xiàn)數(shù)據(jù)及時(shí)戳轉(zhuǎn)換等。3)網(wǎng)絡(luò)通信管理:完成配置信息接收,實(shí)現(xiàn)傳輸數(shù)據(jù)組包,維持通信鏈路,處理網(wǎng)絡(luò)異常等。4)數(shù)據(jù)緩存管理:處理在網(wǎng)絡(luò)通信異常時(shí)的數(shù)據(jù)緩存以及實(shí)時(shí)數(shù)據(jù)流量控制等。以較為典型的數(shù)據(jù)抽取流程為例,數(shù)據(jù)處理流程如圖2所示。

2.2數(shù)據(jù)采集

2.2.1配置預(yù)處理配置預(yù)處理是數(shù)據(jù)采集的基礎(chǔ),客戶端在獲取到配置信息后,要完成2部分的預(yù)處理。1)核對(duì)下發(fā)測(cè)點(diǎn)配置信息,主要包括測(cè)點(diǎn)名稱和測(cè)點(diǎn)類型驗(yàn)證。通過(guò)測(cè)點(diǎn)名稱驗(yàn)證,剔除數(shù)據(jù)源中不存在的點(diǎn);完成測(cè)點(diǎn)數(shù)據(jù)類型驗(yàn)證,避免由于服務(wù)器端與數(shù)據(jù)源測(cè)點(diǎn)類型不一致導(dǎo)致的類型轉(zhuǎn)換異常,特別是Float、Double等高精度類型被錯(cuò)誤配置為Byte、Short等存儲(chǔ)字節(jié)較小的類型時(shí),類型驗(yàn)證尤為重要。2)重構(gòu)源測(cè)點(diǎn)與目標(biāo)測(cè)點(diǎn)映射表。在測(cè)點(diǎn)信息配置時(shí),數(shù)據(jù)索引常采用字符串類型(如測(cè)點(diǎn)名稱)的屬性作為鍵值,在進(jìn)行數(shù)據(jù)檢索、處理時(shí),效率較低,在測(cè)點(diǎn)數(shù)量較大時(shí),對(duì)性能影響明顯。在預(yù)處理時(shí),選擇整型(如測(cè)點(diǎn)ID)等基本屬性進(jìn)行映射表重構(gòu),可以顯著提供檢索效率,縮小數(shù)據(jù)包長(zhǎng)度,提高傳輸效率。

2.2.2數(shù)據(jù)轉(zhuǎn)換從源數(shù)據(jù)庫(kù)讀取實(shí)時(shí)數(shù)據(jù)后,通常需要根據(jù)測(cè)點(diǎn)配置完成3類轉(zhuǎn)換:數(shù)值二次計(jì)算、一對(duì)多標(biāo)簽轉(zhuǎn)換及數(shù)據(jù)時(shí)戳處理。1)數(shù)值的二次計(jì)算主要是為了解決源數(shù)據(jù)采用非標(biāo)準(zhǔn)工業(yè)單位、數(shù)據(jù)基準(zhǔn)值需要補(bǔ)償?shù)葐?wèn)題,基本數(shù)據(jù)轉(zhuǎn)換見(jiàn)表2所列。2)數(shù)值的一對(duì)多轉(zhuǎn)換是為了處理單一源測(cè)點(diǎn)對(duì)應(yīng)多個(gè)目標(biāo)測(cè)點(diǎn)的情況,通過(guò)轉(zhuǎn)換,保證了數(shù)據(jù)采集的完整性。3)數(shù)據(jù)時(shí)戳直接影響到數(shù)據(jù)過(guò)濾、壓縮和存儲(chǔ)。時(shí)戳轉(zhuǎn)換主要包括:對(duì)時(shí)戳大幅超前的數(shù)據(jù)進(jìn)行修正,大多數(shù)實(shí)時(shí)數(shù)據(jù)庫(kù)對(duì)此類數(shù)據(jù)均采用拋棄策略,如果數(shù)據(jù)源無(wú)法修正,則會(huì)導(dǎo)致數(shù)據(jù)丟失;針對(duì)時(shí)區(qū)進(jìn)行處理,部分控制系統(tǒng)采用格林尼治時(shí)間,在采集時(shí)需要根據(jù)時(shí)區(qū)進(jìn)行調(diào)整,少量數(shù)據(jù)源所在地與服務(wù)器所在地跨時(shí)區(qū),需要對(duì)時(shí)間進(jìn)行修正;增加時(shí)戳,少數(shù)數(shù)據(jù)源提供的數(shù)據(jù)不攜帶時(shí)戳,需要增加。

2.2.3數(shù)據(jù)過(guò)濾和壓縮實(shí)時(shí)監(jiān)管系統(tǒng)中涉及的網(wǎng)絡(luò)傳輸往往需要跨網(wǎng)段,由于多種網(wǎng)絡(luò)設(shè)備的引入,導(dǎo)致數(shù)據(jù)鏈路質(zhì)量無(wú)法優(yōu)化;同時(shí),大多數(shù)情況下,數(shù)據(jù)鏈路被多種業(yè)務(wù)共享,實(shí)時(shí)監(jiān)管系統(tǒng)的數(shù)據(jù)采集是持續(xù)、穩(wěn)定的網(wǎng)絡(luò)業(yè)務(wù)。因此,必須在保證數(shù)據(jù)傳輸效率的基礎(chǔ)上,盡可能降低網(wǎng)絡(luò)帶寬占用,減少對(duì)其他業(yè)務(wù)的影響。為提高網(wǎng)絡(luò)傳輸效率,客戶端采集數(shù)據(jù)在傳輸前,對(duì)數(shù)據(jù)采取了過(guò)濾和壓縮策略。數(shù)據(jù)過(guò)濾是指基于數(shù)據(jù)值和時(shí)戳對(duì)實(shí)時(shí)數(shù)據(jù)進(jìn)行過(guò)濾,采用“變則發(fā),不變不發(fā)”的原則;數(shù)據(jù)壓縮是指采用Deflate、GZip等無(wú)損壓縮算法對(duì)過(guò)濾后的數(shù)據(jù)進(jìn)行二次處理。通過(guò)過(guò)濾和壓縮,顯著節(jié)約了網(wǎng)絡(luò)帶寬,降低或減少了實(shí)時(shí)數(shù)據(jù)采集對(duì)其他業(yè)務(wù)的影響。

2.3數(shù)據(jù)傳輸數(shù)據(jù)采集模型的核心功能是數(shù)據(jù)傳輸,為提高數(shù)據(jù)傳輸效率,保證數(shù)據(jù)可靠性,從以下幾方面進(jìn)行處理。

2.3.1網(wǎng)絡(luò)鏈路采用長(zhǎng)連接在實(shí)時(shí)監(jiān)管系統(tǒng)中,數(shù)據(jù)源與目標(biāo)服務(wù)器大多跨網(wǎng)段,傳輸距離較遠(yuǎn)。為了提高傳輸效率,數(shù)據(jù)傳輸采用長(zhǎng)連接模式。當(dāng)發(fā)送數(shù)據(jù)量較少時(shí),采用周期性發(fā)送心跳包的方式維持鏈路,減少由于路由器、防火墻等網(wǎng)絡(luò)設(shè)備的超時(shí)策略導(dǎo)致數(shù)據(jù)連接頻繁中斷。客戶端在數(shù)據(jù)傳輸中的狀態(tài)轉(zhuǎn)換如圖3所示。客戶端為保證數(shù)據(jù)通信的可靠性,重點(diǎn)處理網(wǎng)絡(luò)連接超時(shí)、數(shù)據(jù)發(fā)送超時(shí)、數(shù)據(jù)應(yīng)答超時(shí)等異常情況。當(dāng)鏈路狀態(tài)轉(zhuǎn)入網(wǎng)絡(luò)重連后,立即啟用數(shù)據(jù)緩存,保證發(fā)送數(shù)據(jù)被及時(shí)保存;對(duì)于發(fā)送超時(shí)、應(yīng)答超時(shí)發(fā)送時(shí),主動(dòng)關(guān)閉現(xiàn)有連接,切換到網(wǎng)絡(luò)重連狀態(tài)。

2.3.2使用變長(zhǎng)數(shù)據(jù)包根據(jù)數(shù)據(jù)包頭信息,易于完成數(shù)據(jù)完整性校驗(yàn),實(shí)現(xiàn)數(shù)據(jù)拼包、分包及解析。數(shù)據(jù)包格式如圖4所示。

2.3.3傳輸模塊內(nèi)嵌數(shù)據(jù)緩存根據(jù)數(shù)據(jù)實(shí)時(shí)采集的特性,在傳輸模塊中內(nèi)嵌數(shù)據(jù)緩存。數(shù)據(jù)緩存分為為內(nèi)存隊(duì)列和緩存文件兩級(jí)。短時(shí)間的網(wǎng)絡(luò)故障,數(shù)據(jù)被緩存到隊(duì)列中,系統(tǒng)處理無(wú)I/O操作開(kāi)銷,效率較高;如果故障時(shí)間較長(zhǎng),為保證可靠性,自動(dòng)將數(shù)據(jù)轉(zhuǎn)存到本地文件。數(shù)據(jù)緩存結(jié)構(gòu)如圖5所示。當(dāng)數(shù)據(jù)獲取線程從數(shù)據(jù)源抽取數(shù)據(jù)后,在異步發(fā)送數(shù)據(jù)中,如果發(fā)送速率低于數(shù)據(jù)獲取速率,導(dǎo)致實(shí)時(shí)數(shù)據(jù)隊(duì)列超長(zhǎng),數(shù)據(jù)自動(dòng)轉(zhuǎn)入緩存隊(duì)列;如果網(wǎng)絡(luò)異常或其他原因?qū)е掳l(fā)送失敗,則數(shù)據(jù)從發(fā)送隊(duì)列轉(zhuǎn)存至本地緩存。當(dāng)異常時(shí)間過(guò)長(zhǎng),數(shù)據(jù)隊(duì)列超過(guò)上限,則被持久化到本地文件。本地文件以保存到文件中的首筆數(shù)據(jù)時(shí)戳命名,當(dāng)文件大小超過(guò)配置設(shè)定上限時(shí),自動(dòng)切換,生成新的文件。在實(shí)時(shí)系統(tǒng)中,實(shí)時(shí)數(shù)據(jù)優(yōu)先級(jí)最高,在網(wǎng)絡(luò)鏈路恢復(fù)后,優(yōu)先發(fā)送實(shí)時(shí)數(shù)據(jù),對(duì)于歷史數(shù)據(jù)采取限速發(fā)送的策略。

2.3.4通信鏈路冗余配置為了提高數(shù)據(jù)傳輸?shù)目煽啃裕诓杉P驮O(shè)計(jì)中,采用2路并行通信的冗余策略。2個(gè)客戶端部署在獨(dú)立的接口機(jī)上,從同一數(shù)據(jù)源采集數(shù)據(jù),共同組成一個(gè)冗余數(shù)據(jù)組,當(dāng)某一個(gè)客戶端出現(xiàn)硬件故障或網(wǎng)絡(luò)異常時(shí),自動(dòng)切換到冗余客戶端。服務(wù)器側(cè)對(duì)客戶端的管理采用客戶端Session和Socket動(dòng)態(tài)綁定的方法,每路客戶端首先創(chuàng)建客戶端Session,在客戶端連接成功后,通過(guò)客戶端標(biāo)識(shí)將Session與底層的SocketID映射綁定。通過(guò)對(duì)Session類的操作,完成冗余狀態(tài)判定、工作狀態(tài)判定、數(shù)據(jù)流量統(tǒng)計(jì)及鏈路超時(shí)判定等。客戶端Session基本信息見(jiàn)表3所列。其中,鏈路狀態(tài)分為中斷和工作2種,為區(qū)分冗余組中2個(gè)客戶端的狀態(tài),發(fā)送數(shù)據(jù)的客戶端(主客戶端)標(biāo)識(shí)為工作,發(fā)送心跳數(shù)據(jù)的客戶端(從客戶端)標(biāo)識(shí)為連接。冗余組中的客戶端,在連接服務(wù)器成功后,首先向服務(wù)器發(fā)送冗余組標(biāo)識(shí),該標(biāo)識(shí)為每個(gè)冗余組的唯一標(biāo)識(shí)。服務(wù)器根據(jù)冗余組標(biāo)識(shí)動(dòng)態(tài)管理多路客戶端,同時(shí)根據(jù)客戶端接入的先后順序來(lái)動(dòng)態(tài)確定主從:先連接的客戶端為主,后連接的為從。被判定為主的客戶端,接收狀態(tài)信息后,循環(huán)向服務(wù)器發(fā)送實(shí)時(shí)數(shù)據(jù),判定為從的客戶端連接成功后僅發(fā)送心跳包以維持鏈路。服務(wù)器端啟用專門的檢測(cè)線程管理客戶端。當(dāng)主客戶端連接超時(shí)(即未發(fā)送數(shù)據(jù)的時(shí)間間隔超過(guò)了設(shè)定時(shí)限)或異常中斷時(shí),如果從客戶端處于連接在線狀態(tài),則服務(wù)器向從客戶端推送冗余切換指令,實(shí)現(xiàn)主從客戶端的切換。

2.4數(shù)據(jù)存儲(chǔ)1)數(shù)據(jù)分包。服務(wù)器側(cè)接收到數(shù)據(jù)后,通信功能模塊完成數(shù)據(jù)包頭解析。在完成數(shù)據(jù)校驗(yàn)后,根據(jù)包頭定義的數(shù)據(jù)長(zhǎng)度,判定當(dāng)前接收數(shù)據(jù)是否完整。數(shù)據(jù)包根據(jù)長(zhǎng)度不同,分為3種情況:接收的數(shù)據(jù)包完整,包長(zhǎng)度和數(shù)據(jù)定義長(zhǎng)度一致;接收數(shù)據(jù)包長(zhǎng)度小于定義長(zhǎng)度;接收數(shù)據(jù)包長(zhǎng)度大于定義長(zhǎng)度。針對(duì)后2種情況,使用數(shù)據(jù)緩存暫存數(shù)據(jù),后續(xù)接收到數(shù)據(jù)后完成數(shù)據(jù)分包。在獲取到完整的數(shù)據(jù)包后,將數(shù)據(jù)包轉(zhuǎn)至線程池進(jìn)行解析。通過(guò)將數(shù)據(jù)通信與數(shù)據(jù)解析異步化,保證了服務(wù)器的處理效率和并發(fā)能力。2)數(shù)據(jù)解析與存儲(chǔ)速率控制。對(duì)于接收到的完整數(shù)據(jù)包,按照通信協(xié)議,依次進(jìn)行數(shù)據(jù)解壓、數(shù)據(jù)解密及數(shù)據(jù)存儲(chǔ)。在實(shí)時(shí)傳輸系統(tǒng)中,優(yōu)先保證實(shí)時(shí)數(shù)據(jù)存儲(chǔ),歷史數(shù)據(jù)被首先寫(xiě)入本地緩存,根據(jù)配置調(diào)整寫(xiě)入線程速率,實(shí)現(xiàn)了數(shù)據(jù)入庫(kù)時(shí)的速率控制。

2.5異常處理及日志系統(tǒng)數(shù)據(jù)采集傳輸涉及多個(gè)環(huán)節(jié),異常情況多樣。在每個(gè)功能模塊,都需要處理異常并給出較為詳細(xì)的日志信息。通過(guò)完備的日志系統(tǒng),幫助工程人員對(duì)數(shù)據(jù)傳輸中的各個(gè)環(huán)節(jié)進(jìn)行檢查,方便準(zhǔn)備定位異常,及時(shí)處理。在日志系統(tǒng)處理時(shí),將信息劃分為信息、警告及調(diào)試3個(gè)等級(jí),每個(gè)等級(jí)輸出的信息量逐次增加,既保證了調(diào)試模式輸出信息完整,又保證在正常運(yùn)行時(shí),日志模塊不會(huì)影響正常的數(shù)據(jù)處理。

3數(shù)據(jù)采集模型開(kāi)發(fā)涉及的主要技術(shù)

3.1插件技術(shù)從不同的數(shù)據(jù)源抽取數(shù)據(jù)的方式差異很大,無(wú)法在開(kāi)發(fā)時(shí)處理完所有的數(shù)據(jù)接口。針對(duì)這種情況,采用組件式插件[6]解決。針對(duì)不同數(shù)據(jù)源,根據(jù)已定義的數(shù)據(jù)訪問(wèn)接口,開(kāi)發(fā)實(shí)時(shí)數(shù)據(jù)抽取插件,通過(guò)簡(jiǎn)單配置完成不同數(shù)據(jù)源的切換。在使用C#進(jìn)行開(kāi)發(fā)時(shí),通過(guò)反射方式加載數(shù)據(jù)抽取DLL[7],實(shí)現(xiàn)了多種數(shù)據(jù)源的統(tǒng)一。

3.2異步網(wǎng)絡(luò)通信數(shù)據(jù)傳輸模塊基于.Net中SocketAsyncEven-tArgs類[8-9]封裝,SocketAsyncEventArgs類為高性能網(wǎng)絡(luò)服務(wù)器應(yīng)用程序設(shè)計(jì),基于高性能異步Socket實(shí)現(xiàn)[9],SocketAsyncEventArgs從設(shè)計(jì)上避免了在異步套接字I/O量非常大時(shí),需要重復(fù)進(jìn)行對(duì)象分配和數(shù)據(jù)同步,避免頻繁進(jìn)行垃圾回收,降低了系統(tǒng)開(kāi)銷。借鑒內(nèi)存池的處理思想,對(duì)高頻使用的數(shù)據(jù)緩沖區(qū)(Buffer)管控進(jìn)行優(yōu)化。在網(wǎng)絡(luò)通信模塊初始化時(shí)完成Buffer數(shù)組創(chuàng)建,按照最大連接數(shù)乘以單個(gè)最大Buffer大小初始化,在使用中以客戶端ID為索引完成快速檢索,同時(shí)將發(fā)送Buffer和接收Buffer分離,保證了數(shù)據(jù)處理的效率。

3.3多線程服務(wù)器端接收、處理數(shù)據(jù),客戶端采集、發(fā)送數(shù)據(jù)等功能均基于多線程實(shí)現(xiàn)。根據(jù)線程的生命周期長(zhǎng)短和工作頻率,把線程分為長(zhǎng)、短兩大類。長(zhǎng)期工作線程的生命周期和應(yīng)用程序幾乎等長(zhǎng),此類線程使用單獨(dú)線程來(lái)處理。對(duì)于短線程,如完成數(shù)據(jù)解析的線程,執(zhí)行需要時(shí)間短,不需要指定線程優(yōu)先級(jí),不需要對(duì)線程進(jìn)行睡眠、掛起等操作,適合采用線程池來(lái)實(shí)現(xiàn)。.Net中ThreadPool類[7]針對(duì)大量運(yùn)行線程設(shè)計(jì),通過(guò)有限的固定線程能為大量并發(fā)操作服務(wù),通過(guò)使用線程池減少了創(chuàng)建、銷毀線程所需的系統(tǒng)開(kāi)銷,提高了系統(tǒng)的整體效率。為了保證數(shù)據(jù)安全,在處理數(shù)據(jù)時(shí),通過(guò)鎖、信號(hào)量等機(jī)制進(jìn)行數(shù)據(jù)同步[7,10]。在多個(gè)功能模塊之間進(jìn)行交互時(shí),使用線程安全隊(duì)列,實(shí)現(xiàn)讀、寫(xiě)線程處理異步化,降低了系統(tǒng)各個(gè)功能模塊間的耦合度,兼顧了處理效率和數(shù)據(jù)安全。

4結(jié)語(yǔ)

本文以實(shí)時(shí)監(jiān)管系統(tǒng)中的實(shí)時(shí)數(shù)據(jù)采集為研究基礎(chǔ),對(duì)可靠數(shù)據(jù)采集中涉及的主要問(wèn)題進(jìn)行了討論,該數(shù)據(jù)采集模型中的主要功能模塊易于復(fù)用。基于該模型開(kāi)發(fā)的實(shí)時(shí)數(shù)據(jù)采集軟件具有配置查詢簡(jiǎn)單、數(shù)據(jù)轉(zhuǎn)換方便、網(wǎng)絡(luò)傳輸可靠等特點(diǎn),已在多個(gè)工程中得到應(yīng)用。

作者:王文慶 劉超飛 單位:西安熱工研究院

主站蜘蛛池模板: 欧美成人免费全部观看天天性色| 香蕉97超级碰碰碰免费公| 少妇人妻偷人精品视蜜桃| 久久精品中文字幕大胸| 欧美精品亚洲精品| 免费污网站在线观看| 色播亚洲视频在线观看| 国产成人高清亚洲一区久久| 91在线你懂的| 天堂草原电视剧在线观看图片高清| 中文字幕乱码中文字幕| 日本精品少妇一区二区三区| 亚洲一区精品视频在线| 欧美最猛黑人xxxx黑人猛交98| 伊人久久精品无码AV一区| 精品国产品香蕉在线观看| 国产一区二区三区视频| 风流老熟女一区二区三区| 国产欧美日本亚洲精品一4区| 2021国产成人午夜精品| 夜夜爱夜夜做夜夜爽| 一个人看的免费视频www在线高清动漫 | pruburb.html官网| 日日摸日日碰人妻无码| 久久精品国产精品国产精品污| 欧美一级高清黄图片| 亚洲欧洲在线播放| 法国性经典xxxxhd| 亚洲视频第一页| 男女啪啪免费体验区| 六月丁香综合网| 精品无码国产污污污免费网站| 国产2021中文天码字幕| 色综合五月婷婷| 国产亚洲福利精品一区二区| 麻豆亚洲av熟女国产一区二| 国产极品视觉盛宴| 亚洲综合色7777情网站777| 国产精品成人99久久久久| 777xxxxx欧美| 国产色视频在线|