国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

東進(jìn)語音記錄儀MDR3000E系列實現(xiàn)原理分析

2017-09-13 00:50陳堃
中國科技縱橫 2017年16期

陳堃

摘 要:目的:分析東進(jìn)記錄儀MDR3000E實現(xiàn)原理。方法:通過實際運維經(jīng)驗對系統(tǒng)硬件實現(xiàn)進(jìn)行分析,通過.net Reflector反編譯器、SQL Server Management Studio集成環(huán)境對系統(tǒng)軟件實現(xiàn)進(jìn)行分析。結(jié)果:分析得出硬件實現(xiàn)部分系統(tǒng)采用典型的客戶機(jī)/服務(wù)器架構(gòu).服務(wù)器端軟件實現(xiàn)部分分為前/后端兩部分,前端基于WCF框架實現(xiàn)服務(wù)器端與客戶機(jī)端的交互,后端基于典型關(guān)系型數(shù)據(jù)庫實現(xiàn)[1]。結(jié)論:系統(tǒng)實現(xiàn)均采用業(yè)內(nèi)標(biāo)準(zhǔn)框架,設(shè)計符合規(guī)范,存在由于具體現(xiàn)場情況造成傳統(tǒng)設(shè)計缺陷的問題(長時間運行后系統(tǒng)最后錄音功能失效),通過限制被操作數(shù)據(jù)實體的數(shù)據(jù)量解決。

關(guān)鍵詞:.net framework;SQL Server;WCF;ADO.NET組件

中圖分類號:TN912.2 文獻(xiàn)標(biāo)識碼:A 文章編號:1671-2064(2017)16-0030-03

空管語音記錄系統(tǒng)實現(xiàn)了對空管運行中涉及的各類型語音的錄音、監(jiān)聽、數(shù)據(jù)查詢及備份等功能,同時除本機(jī)操作要求外提供網(wǎng)絡(luò)操作數(shù)據(jù)的功能。為民航空管提供查找事故責(zé)任、監(jiān)督工作質(zhì)量的重要手段和依據(jù)。從而有效地保證飛行的安全可靠。本文集中針對東進(jìn)MDR3000E語音記錄儀系統(tǒng)服務(wù)器端軟件功能的實現(xiàn)原理進(jìn)行分析,進(jìn)而結(jié)合其在浦東七年來的運行情況,匯總了系統(tǒng)相關(guān)問題。包括長時間運行后系統(tǒng)最后錄音功能失效的問題,并提出了相應(yīng)的解決方案,通過實踐操作對方案進(jìn)行了驗證。

1 東進(jìn)MDR3000E語音記錄儀實現(xiàn)原理分析

1.1 硬件部分

東進(jìn)公司的MDR3000E系列產(chǎn)品解決方案的硬件組成包括服務(wù)器,局域網(wǎng)、客戶端以及時鐘、錄音數(shù)據(jù)源。屬于典型的C/S結(jié)構(gòu)系統(tǒng)。服務(wù)器匯總處理不同信號源提供的信號,客戶端通過網(wǎng)絡(luò)對服務(wù)器處理過的數(shù)據(jù)進(jìn)行訪問。系統(tǒng)核心服務(wù)器硬件簡而言之其就是一臺基于PC總線的工業(yè)電腦。語音記錄的關(guān)鍵功能實現(xiàn)即通過在工控機(jī)上加裝語音記錄卡(D080D記錄單元)。

1.2 軟件部分

軟件基于windows操作系統(tǒng)開發(fā),典型采用MVC設(shè)計模式進(jìn)行程序設(shè)計,服務(wù)器前端基于.net framework開發(fā),后臺數(shù)據(jù)庫基于Sql Server數(shù)據(jù)庫系統(tǒng)開發(fā)。

1.2.1 服務(wù)器前端實現(xiàn)分析

為了深入分析前端代碼,我們使用.net Reflector軟件對程序進(jìn)行反編譯。它是一個類瀏覽器和反編譯器,可以瀏覽程序集的類和方法,可以分析由這些類和方法生成的 Microsoft中間語言(MSIL),并且可以反編譯這些類和方法并查看C#或Visual Basic.NET中的等價類和方法。通過分析,我們發(fā)現(xiàn)前端代碼主要包括以下幾個程序集:

(1)D80d32。顧名思義,實現(xiàn)記錄儀系統(tǒng)D80D記錄單元的功能代碼,涉及較多非.net托管代碼,本文不作解析,通過d080d32.cpp文件將相關(guān)接口暴露在業(yè)務(wù)邏輯處理部分,不影響對系統(tǒng)實現(xiàn)原理的分析。

(2)GPSRCI。顧名思義,實現(xiàn)系統(tǒng)時鐘處理功能,包括串口時鐘信號處理的類文件(GPSMonitor.cs)、Windows系統(tǒng)時鐘處理的類文件(Win32.cs)。

(3)Log4net。包含了代表各類型日志的實體類,優(yōu)秀的第三方日志框架,引用log4net程序集,通過文件Log.config加載至開發(fā)項目,幫助程序員把日志信息輸出到各種不同的目標(biāo)。

(4)MDRCommon。實現(xiàn)服務(wù)器端關(guān)于初始化服務(wù)的通用方法,包括備份記錄儀數(shù)據(jù)庫相關(guān)方法的類文件(Back UpManager.cs)、讀取/寫入程序接口 ini文件的通用類文件(IniFile.cs)。

(5)MDRContract。程序集的名稱即反映了MDR系統(tǒng)整個C/S架構(gòu)下程序間的通訊基于WCF框架,通過數(shù)據(jù)契約的序列化實現(xiàn)。程序集包括以下數(shù)據(jù)契約:

1)記錄信號相關(guān)的數(shù)據(jù)契約:表示語音通道配置的數(shù)據(jù)契約(ChnlSoundCfg.cs)、表示語音通道狀態(tài)的數(shù)據(jù)契約(ChnlSoundState.cs)、表示語音通道數(shù)據(jù)格式的契約(RecordSound.cs);2)服務(wù)器管理相關(guān)的數(shù)據(jù)契約:表示記錄儀系統(tǒng)服務(wù)器端當(dāng)前配置信息的數(shù)據(jù)契約(SystemCfg.cs)、表示記錄儀系統(tǒng)服務(wù)器端當(dāng)前狀態(tài)信息的數(shù)據(jù)契約(SystemState.cs),包含大量GPS狀態(tài)信息、表示記錄儀系統(tǒng)服務(wù)器網(wǎng)絡(luò)接口信息的數(shù)據(jù)契約(HostInfo.cs)、表示記錄儀系統(tǒng)服務(wù)器硬盤使用情況信息的數(shù)據(jù)契約(DiskInfo.cs)、表示用戶信息及權(quán)限的數(shù)據(jù)契約(UserInfo.cs)、表示系統(tǒng)運行日志的數(shù)據(jù)契約(LogInfo.cs);3)服務(wù)器管理相關(guān)的服務(wù)契約:實現(xiàn)系統(tǒng)配置及硬盤管理的服務(wù)契約接口(ISystem Manager.cs)、實現(xiàn)用戶管理、日志管理、數(shù)據(jù)庫操作的服務(wù)契約接口(IDataManager.cs)、實現(xiàn)各類型通道操作的服務(wù)契約接口(IChnlController.cs)、通過雙程操作實現(xiàn)服務(wù)器與客戶端關(guān)于通道狀態(tài)及系統(tǒng)配置信息交互的服務(wù)契約接口(IRegisterManager.cs)。

(6)MDRServerImpl。該程序集為記錄儀系統(tǒng)業(yè)務(wù)邏輯處理的核心,通過對前述及本程序集包含的各個實體類以及核心處理方法的調(diào)用,封裝成服務(wù)行為(MDR ServiceImpl.cs),從而實現(xiàn)系統(tǒng)業(yè)務(wù)邏輯,主要包括以下實體類:

1)D08D32程序集:該程序集引用了所有D80D記錄單元對外的程序方法接口(D80d32程序集),因為相關(guān)硬件代碼通過C++程序段暴露接口,所以該項目大量使用MarshalAs方法,使.net framework在托管代碼和非托管代碼之間封送數(shù)據(jù)(nativeMethod.cs);2)基于數(shù)據(jù)訪問層的系統(tǒng)數(shù)據(jù)庫操作通用方法(MDRDB.cs):功能針對語音通道數(shù)據(jù)格式的契約實體提供了增、改的基礎(chǔ)操作。針對語音通道配置的數(shù)據(jù)契約實體、語音通道數(shù)據(jù)格式的契約實體分別提供了查詢基礎(chǔ)操作。查詢基礎(chǔ)操作中大量調(diào)用了序列化方法(FuncHelper.cs)將數(shù)據(jù)庫記錄映射為實體對象;3)實現(xiàn)系統(tǒng)配置及硬盤管理的實體類(SystemManager.cs):實現(xiàn)了系統(tǒng)配置參數(shù)的讀取與設(shè)置、通道電壓狀態(tài)的讀取方法;4)基于數(shù)據(jù)訪問層實現(xiàn)用戶管理、日志管理、語音通道數(shù)據(jù)格式的契約實體查詢及統(tǒng)計操作的實體類(DataManager.cs);5)實現(xiàn)服務(wù)器與客戶端關(guān)于通道狀態(tài)及系統(tǒng)配置信息交互的實體類(RegisterManager.cs);6)實現(xiàn)監(jiān)聽和雷達(dá)、語音綜合回放功能的業(yè)務(wù)邏輯實體類(ChnlController.cs);7)調(diào)用D80D32程序集實現(xiàn)監(jiān)聽和雷達(dá)、語音綜合回放功能的實體類(ChnlWorker.cs);8)實現(xiàn)語音記錄功能的業(yè)務(wù)邏輯實體類(ChnlSound.cs):包括通道采用語音激活方式的業(yè)務(wù)邏輯處理、采用壓控方式的業(yè)務(wù)邏輯處理。處理中調(diào)用了錄音文件生成和相關(guān)數(shù)據(jù)庫操作(MDRDB.cs)通用方法;9)實現(xiàn)語音記錄存儲區(qū)域自動清理功能的實體類(DiskClearManager.cs):過程中引用MDRCommon程序集中的IniFile實體類方法,讀取鍵值(RemoveInfo)中語音記錄存儲區(qū)域剩余空間要求(DiskLimit)和自動清理功能運行時間間隔(DiskClearCheckInterval),如果自動清理功能運行檢查發(fā)現(xiàn)語音記錄存儲區(qū)域剩余空間小于要求,則執(zhí)行最早語音記錄刪除程序,刪除語音記錄存儲區(qū)域?qū)?yīng)最早一日的原始語音記錄文件夾及相應(yīng)數(shù)據(jù)庫記錄;10)實現(xiàn)封裝系統(tǒng)服務(wù)器端服務(wù)行為的實體類(MDR ServiceImpl.cs):該服務(wù)行為支持并發(fā)、且采用全局所有會話單服務(wù)實例的single模式。通過調(diào)用程序集中相關(guān)實體類(ChnlController、Data Manager、SystemManager、RegisterManager)實現(xiàn)MDRContract程序集中相關(guān)接口(IChnlController、IDataManager、ISystemManager、IRegisterManager)。endprint

(7)MDRHost?;赪CF框架的服務(wù)本身不能夠單獨運行,因此該程序集即為封裝的服務(wù)行為(MDR ServiceImpl.cs)寄宿的宿主程序。主要包括以下實體類:

封裝的服務(wù)行為(MDR ServiceImpl.cs)寄宿的宿主程序的實體類(MDRHost.cs):由內(nèi)部類中的線程類Thread Work實現(xiàn),通過讀取Server.ini文件相關(guān)數(shù)據(jù)庫連接內(nèi)容初始化后端數(shù)據(jù)庫連接、讀取相關(guān)記錄卡類型信息初始化相關(guān)板卡驅(qū)動,宿主程序啟動后,監(jiān)聽相關(guān)停止、暫??刂浦噶畈?zhí)行。

1.2.2 服務(wù)器后端實現(xiàn)分析

數(shù)據(jù)庫的邏輯設(shè)計符合3NF,雖然關(guān)系模式未能規(guī)范至更高的等級,卻是最合適的[2]。記錄儀系統(tǒng)大量業(yè)務(wù)集中于語音通道數(shù)據(jù)(RecordSound)的查詢,假使數(shù)據(jù)庫的邏輯設(shè)計規(guī)范化至4NF,則大量的語音通道數(shù)據(jù)查詢使系統(tǒng)必須進(jìn)行連接運算,而連接運算的代價是相當(dāng)高的,可以說關(guān)系模型低效的主要原因即做連接運算引起的。

數(shù)據(jù)庫的物理結(jié)構(gòu)設(shè)計中僅對極少屬性設(shè)計了索引。以語音通道數(shù)據(jù)表(RecordSound)為例,僅針對列(RTime)設(shè)計了非聚集索引(IX_RecordSound)。因為該列的值存在大數(shù)目的不同值以及頻繁被更新的情況,因此不適合建立聚集索引。雖然后端的邏輯設(shè)計和物理設(shè)計并無缺陷,但前后端結(jié)合后的程序設(shè)計通過實際運行后確實存在問題。2014年-2015年期間浦東地區(qū)東進(jìn)記錄儀系統(tǒng)在使用4年后發(fā)生“最后錄音”功能失效及語音記錄查詢響應(yīng)緩慢的情況。我們分析系統(tǒng)故障日志,發(fā)現(xiàn)以下故障記錄:

(1)MDRServerImpl.DiskClearManager.GetSubDirMinDate(DirectoryInfo dirRoot) 位置 J:\MDR源程序\2011_2_18 V2.1正式版\MDR NET RADAR 2010 0805\MDRServerImpl\DiskClearManager.cs:行號 143

(2)[2015-03-28 10:29:41,345][MDRServerImpl.DataManager.DeleteRecord(J:\MDR源程序\2011_2_18 V2.1正式版\MDR NET RADAR 2010 0805\MDR ServerImpl\DataManager.cs:147)][ERROR]數(shù)據(jù)庫刪除記錄信息失敗

(3)[2015-03-28 10:29:41,345][MDRServerImpl.DataManager.DeleteRecord(J:\MDR源程序\2011_2_18 V2.1正式版\MDR NET RADAR 2010 0805\MDR ServerImpl\DataManager.cs:148)][ERROR]超時時間已到。在操作完成之前超時時間已過或服務(wù)器未響應(yīng)。

基于服務(wù)器的前端實現(xiàn)分析,相關(guān)故障情況的直接原因為:記錄儀語音通道數(shù)據(jù)量較大,平均每日為60,000條左右,在長時間運行后系統(tǒng)記錄存儲區(qū)域剩余空間已達(dá)上限,須執(zhí)行語音記錄存儲區(qū)域自動清理功能,即程序集(MDRServerImpl)中的實體類(DiskClearManager.cs)所實現(xiàn)的功能,功能中相關(guān)語音通道數(shù)據(jù)的刪除操作由程序集(MDRServerImpl)中的實體類(DataManager.cs)實現(xiàn),采用了ADO.NET組件庫提供的方法。默認(rèn)超時時間為30s,如果在CommandTimeout屬性中設(shè)置的時間間隔內(nèi)沒有完成命令執(zhí)行,將產(chǎn)生錯誤,ADO將取消該命令。顯然長時間運行已造成系統(tǒng)數(shù)據(jù)庫及語音數(shù)據(jù)存儲負(fù)荷過大,即記錄查找時間過長,進(jìn)而造成刪除操作的超時情況。為避免這類情況的發(fā)生,有以下方案供選擇:

(1)取消相關(guān)實體類數(shù)據(jù)庫操作的超時設(shè)置,將屬性CommandTimeout設(shè)置為零,ADO 組件將無限期等待直到命令執(zhí)行完畢。以Command對象為例,調(diào)整Command.CommandTimeout屬性為0即可,但數(shù)據(jù)庫的刪除操作(Delete)除刪除操作本身外,包含大量事務(wù)日志的生成?;跀?shù)據(jù)庫性能,系統(tǒng)目前事務(wù)日志文件大小上限為1G。經(jīng)實際環(huán)境測算,當(dāng)刪除的數(shù)據(jù)庫記錄超過1,300,000條后,事務(wù)日志文件容量將達(dá)到上限。如果出現(xiàn)系統(tǒng)記錄存儲區(qū)域剩余空間達(dá)到上限的情況后,系統(tǒng)會不斷執(zhí)行語音記錄存儲區(qū)域自動清理操作,反復(fù)執(zhí)行勢必造成大量事務(wù)日志的生成,即使數(shù)據(jù)庫刪除操作無超時限制,數(shù)據(jù)庫最終仍會產(chǎn)生“數(shù)據(jù)庫MDR的事務(wù)日志已滿”的異常,造成自動清理功能的失效,因此該方案不可取。

(2)限制被操作數(shù)據(jù)實體的數(shù)據(jù)量以達(dá)到縮短SQL SERVER操作執(zhí)行時間的目的,這不僅滿足上位法的要求(保留1個月的語音通道數(shù)據(jù)),同時節(jié)省系統(tǒng)存儲空間、提高系統(tǒng)運行效率,因此我們選擇通過該方式解決。解決的方式有以下兩個原則:在不影響數(shù)據(jù)庫記錄查詢時間的條件下,存儲語音通道數(shù)據(jù)量盡可能最大(充分利用存儲空間);達(dá)到系統(tǒng)記錄存儲區(qū)域剩余空間的上限后,自動清理功能刪除的記錄盡量少(減少事務(wù)日志記錄生成,提高數(shù)據(jù)庫效率)。通過實際環(huán)境測試,我們得出結(jié)果:限制被操作數(shù)據(jù)實體的數(shù)據(jù)量為5個月內(nèi)的數(shù)據(jù)生成量的條件下,能使系統(tǒng)運行達(dá)到最優(yōu)效果。使用腳本刪除系統(tǒng)多余語音通道數(shù)據(jù)后,“最后錄音”功能失效及語音記錄查詢響應(yīng)緩慢的故障恢復(fù)。在系統(tǒng)記錄存儲區(qū)域剩余空間達(dá)到上限條件下,系統(tǒng)每隔10分鐘執(zhí)行清理功能。

2 結(jié)語

本文從硬件及軟件兩個方面分析了東進(jìn)MDR3000E系列記錄儀系統(tǒng)服務(wù)器端功能的實現(xiàn)原理。硬件部分集中說明了系統(tǒng)拓?fù)浼胺?wù)器硬件配置。軟件部分分為前后端分別說明。前端包含程序設(shè)計框架、設(shè)計思路及具體代碼設(shè)計邏輯。后端包含系統(tǒng)數(shù)據(jù)庫的邏輯設(shè)計及物理設(shè)計分析。通過分析提出了導(dǎo)致2014年-2015年期間浦東地區(qū)東進(jìn)記錄儀系統(tǒng)相關(guān)故障的設(shè)計缺陷,最終確定一種最優(yōu)的方案,實現(xiàn)限制被操作數(shù)據(jù)實體的數(shù)據(jù)量從而解決相關(guān)缺陷。

參考文獻(xiàn)

[1]Juual Lowy.Programming WCF Services[M].武漢:華中科技大學(xué)出版社,2011.

[2]孟祥瑞.數(shù)據(jù)庫原理及應(yīng)用[M].上海:華東理工大學(xué)出版社,2005.endprint