摘? 要:本文設(shè)計(jì)了一種可以應(yīng)用在煤礦安全監(jiān)控系統(tǒng)中的,支持多客戶端多業(yè)務(wù)的文件同步組件,該組件可以同步煤礦安全監(jiān)控系統(tǒng)中主熱備計(jì)算機(jī)上的配置文件和其他相關(guān)業(yè)務(wù)文件,為煤礦安全監(jiān)控系統(tǒng)提供了相應(yīng)的技術(shù)支持。
關(guān)鍵詞:煤礦安全監(jiān)控系統(tǒng);文件同步;文件監(jiān)視
中圖分類號(hào):TD76;TP277? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2019)07-0014-04
Abstract:This paper designs a file synchronization component which can be used in coal mine safety monitoring system and support multi-client and multi-service. The component can synchronize configuration files and other related business files on the main hot standby machine in coal mine safety monitoring system,and provide corresponding technical support for coal mine safety monitoring system.
Keywords:coal mine safety monitoring system;document synchronization;document monitoring
1? 背景
煤炭是一種重要的資源,但煤炭開采受煤層和地質(zhì)情況的影響越來越大,很多礦井環(huán)境惡劣,還要受水災(zāi)、火災(zāi)、瓦斯爆炸、粉塵污染等自然災(zāi)害的影響,因此國(guó)家要求煤礦必須安裝煤礦安全生產(chǎn)監(jiān)控系統(tǒng),通過一系列技術(shù)手段來保障煤礦生產(chǎn)的安全性和可靠性。
煤礦安全生產(chǎn)監(jiān)控系統(tǒng)一般通過采用雙機(jī)熱備的方式來保障系統(tǒng)的穩(wěn)定可靠,而雙機(jī)熱備技術(shù)又涉及主機(jī)和備機(jī)之間的數(shù)據(jù)交互,目前主要通過數(shù)據(jù)庫(kù)和網(wǎng)絡(luò)來傳輸相關(guān)信息,但監(jiān)控系統(tǒng)還可能存在大量的配置文件,這些配置以文件形式存放于相關(guān)目錄中,因此設(shè)計(jì)一款基于煤礦安全生產(chǎn)監(jiān)控系統(tǒng)的文件同步組件具有重要意義。
目前市面上流行著一些文件同步產(chǎn)品,但存在各種問題,比如配置安裝復(fù)雜、對(duì)外接口不通用、與監(jiān)控系統(tǒng)軟件不兼容,出現(xiàn)問題不能及時(shí)發(fā)現(xiàn)和解決等等,并不適合煤礦的使用環(huán)境,作者通過調(diào)研多個(gè)煤礦安全生產(chǎn)監(jiān)控系統(tǒng)軟件廠商,收集到了適合監(jiān)控系統(tǒng)環(huán)境下的文件同步需求,整理如下:
(1)文件同步組件需要能夠獨(dú)立運(yùn)行,不依賴其他第三方的軟件,同時(shí)能夠?qū)ΡO(jiān)控系統(tǒng)提供相關(guān)參數(shù)設(shè)計(jì)的接口,以確定文件同步方向、同步的文件類型等等。
(2)文件同步組件需要能夠同步2臺(tái)或2臺(tái)以上的計(jì)算機(jī)之間的文件數(shù)據(jù)同步,并且支持雙向同步功能。
(3)由于煤礦生產(chǎn)的特殊性,相關(guān)使用人員的軟件知識(shí)不高,文件同步組件需要盡量簡(jiǎn)化參數(shù)配置,同時(shí)能支持實(shí)時(shí)修改設(shè)置功能。
針對(duì)以上需求,有了本文的這款文件同步組件的設(shè)計(jì)方案。
2? 方案設(shè)計(jì)
2.1? 業(yè)務(wù)流程
整個(gè)系統(tǒng)業(yè)務(wù)流程如圖1所示。
組件業(yè)務(wù)流程如下:
(1)文件同步組件以Windows服務(wù)的方式統(tǒng)一對(duì)外提供服務(wù)接口,在不同計(jì)算機(jī)上運(yùn)行的業(yè)務(wù)軟件各自啟動(dòng)安裝好的文件同步組件服務(wù)。
(2)業(yè)務(wù)軟件向文件同步組件注冊(cè)當(dāng)前需要同步的業(yè)務(wù)信息。
(3)文件同步組件根據(jù)當(dāng)前注冊(cè)的業(yè)務(wù)向網(wǎng)絡(luò)中廣播,并根據(jù)其他文件同步組件廣播的信息組織整理一張完整的業(yè)務(wù)同步拓?fù)鋱D,包含當(dāng)前業(yè)務(wù)所包含的所有文件同步組件所在計(jì)算機(jī)的IP、業(yè)務(wù)信息,以及同步身份等。
(4)業(yè)務(wù)軟件設(shè)置當(dāng)前文件同步組件的身份:源機(jī)、目標(biāo)機(jī)。
(5)文件同步組件根據(jù)身份和業(yè)務(wù)自動(dòng)同步網(wǎng)絡(luò)中其他的文件同步組件,保證各個(gè)計(jì)算機(jī)上的文件同源機(jī)上的一致。
文件同步組件沒有UI界面,所有交互都統(tǒng)一通過對(duì)外開放的WCF接口。
2.2? 系統(tǒng)總體結(jié)構(gòu)
系統(tǒng)的總體結(jié)構(gòu)如圖2所示。
文件同步組件支持多個(gè)客戶端,支持每個(gè)客戶端的不同業(yè)務(wù)文件的分類同步,各個(gè)子業(yè)務(wù)之間互不干擾。
組件的主要功能包括:用戶參數(shù)設(shè)置、文件同步兩大功能模塊,其中用戶參數(shù)設(shè)置主要是用來調(diào)整組件同步的相關(guān)設(shè)置,比如業(yè)務(wù)注冊(cè)、業(yè)務(wù)注銷、同步參數(shù)等等,用戶通過這些外部接口,來調(diào)整組件的運(yùn)行狀態(tài)。文件同步模塊主要包括文件監(jiān)視、文件讀寫、節(jié)點(diǎn)維護(hù)等,文件監(jiān)視主要是監(jiān)視本地注冊(cè)的業(yè)務(wù)內(nèi)的所有文件,如果發(fā)生變動(dòng),則生成最新的文件hash并廣播通知,文件讀寫主要是要根據(jù)多線程的讀寫文件狀態(tài)來設(shè)置相應(yīng)的鎖,防止出現(xiàn)文件被占用的情況,節(jié)點(diǎn)維護(hù)主要是收集整個(gè)網(wǎng)絡(luò)中的其他文件同步組件,并在本地內(nèi)存中形成一個(gè)同步的拓?fù)浣Y(jié)構(gòu)。
2.3? 關(guān)鍵技術(shù)
2.3.1? 心跳模塊設(shè)計(jì)
心跳模塊主要是用來按照一定的業(yè)務(wù)邏輯通過通信接口模塊向網(wǎng)絡(luò)中其他的文件同步組件發(fā)送心跳包,并解析自身接收到的心跳包。
其監(jiān)聽算法流程如圖3所示。
心跳模塊監(jiān)聽過程中,主要收到兩種信息包:常規(guī)身份信息包和文件變動(dòng)廣播包。常規(guī)身份信息包主要包含自身文件同步組件所使用的網(wǎng)卡IP地址、組件當(dāng)前的身份、組件的升成源機(jī)身份的時(shí)間等等,常規(guī)身份信息包可以幫助組件了解整個(gè)同步網(wǎng)絡(luò)的情況,并結(jié)合自身狀態(tài)進(jìn)行身份的切換。文件變動(dòng)廣播包主要是在當(dāng)本地監(jiān)控的文件發(fā)生了變動(dòng)后,向整個(gè)網(wǎng)絡(luò)廣播變動(dòng)信息,使其他組件能夠及時(shí)獲取變動(dòng)文件并更新自身的狀態(tài)。
為了防止網(wǎng)絡(luò)上的其他無效數(shù)據(jù)的干擾,心跳包需要做一些特殊的處理,比如所有字節(jié)的異或校驗(yàn)、長(zhǎng)度校驗(yàn)等等,只有通過校驗(yàn)的數(shù)據(jù)包才是組件能正常解析的心跳包,其他不符合的都將被丟棄。心跳包的設(shè)計(jì)方案如圖4所示。
2.3.2? 文件信息維護(hù)模塊設(shè)計(jì)
該模塊主要是用來定時(shí)監(jiān)視相關(guān)業(yè)務(wù)的文件系統(tǒng),當(dāng)業(yè)務(wù)或業(yè)務(wù)對(duì)應(yīng)的文件發(fā)生變動(dòng)時(shí),自動(dòng)維護(hù)文件信息。
文件信息維護(hù)模塊算法流程如圖5所示。
組件為每一個(gè)業(yè)務(wù)創(chuàng)建一個(gè)文件監(jiān)視對(duì)象,該對(duì)象可以實(shí)時(shí)監(jiān)視該業(yè)務(wù)所包含的文件系統(tǒng),并將所有的文件的變動(dòng)情況存儲(chǔ)于對(duì)象的隊(duì)列中。文件信息維護(hù)模塊遍歷所有業(yè)務(wù),并循環(huán)遍歷該業(yè)務(wù)中的變動(dòng)隊(duì)列,遍歷的同時(shí)檢查該文件是否處于正常狀態(tài),如果處于非正常狀態(tài)則將該變動(dòng)信息置于隊(duì)列末尾,若處于正常狀態(tài)則處理該變動(dòng)信息,檢查當(dāng)前組件身份是否為源機(jī),如果是目標(biāo)機(jī),則不需要處理,如果是源機(jī),則生成UDP變動(dòng)包并廣播通知其他目標(biāo)機(jī),其他目標(biāo)機(jī)回歸根據(jù)變動(dòng)包來主動(dòng)獲取一次文件信息,其余時(shí)候則是定時(shí)獲取。
2.3.3? 文件同步模塊設(shè)計(jì)
該模塊主要是用來定時(shí)向源機(jī)獲取文件信息,并與本地文件信息列表進(jìn)行比較,并根據(jù)相關(guān)規(guī)則決定是否同步該文件。
具體算法流程如圖6所示。
組件定時(shí)判斷自身的身份狀態(tài),如果是源機(jī)狀態(tài),則不需要進(jìn)行處理,如果是目標(biāo)機(jī),則向目前網(wǎng)絡(luò)環(huán)境中的當(dāng)前業(yè)務(wù)系統(tǒng)的源機(jī)發(fā)送文件信息請(qǐng)求,文件信息包括文件路徑、文件hash碼、文件當(dāng)前狀態(tài)等一系列的內(nèi)容,目標(biāo)機(jī)收到源機(jī)的回復(fù)后,和本地的文件進(jìn)行比較,如果發(fā)現(xiàn)本地文件不存在或是和源機(jī)的hash碼不一致,則說明源機(jī)的文件發(fā)生了變動(dòng),需要下載對(duì)應(yīng)的文件并覆蓋本地文件,這里需要注意的是,當(dāng)源機(jī)被目標(biāo)機(jī)下載文件時(shí),防止多個(gè)目標(biāo)機(jī)同時(shí)下載相同文件時(shí)發(fā)生讀寫失敗的問題,需要約定在同一業(yè)務(wù)中,同一時(shí)間只允許最多有一個(gè)文件在被下載,在文件被允許下載的時(shí)候,需要將該文件狀態(tài)設(shè)置為正在同步狀態(tài)。
3? 系統(tǒng)應(yīng)用成果
系統(tǒng)開發(fā)完成后,筆者將該系統(tǒng)應(yīng)用于實(shí)際的監(jiān)控系統(tǒng)中,軟件能夠正常同步兩臺(tái)監(jiān)控主機(jī)和備機(jī)之間的配置文件,并且同步的實(shí)時(shí)性較高。同步的文件可以指定特定的后綴,文件的變動(dòng)類型包括新建、修改、刪除、改名,同時(shí)也支持子文件夾的目錄結(jié)構(gòu)。在業(yè)務(wù)系統(tǒng)沒有特殊的通信接口的環(huán)境下,文件同步組件很好地彌補(bǔ)了不同系統(tǒng)間的文件保持同步的功能,試驗(yàn)測(cè)試結(jié)果驗(yàn)證了該系統(tǒng)的優(yōu)勢(shì)和實(shí)用性。
4? 結(jié)? 論
基于煤礦安全監(jiān)控系統(tǒng)的文件同步組件的設(shè)計(jì)與實(shí)現(xiàn),彌補(bǔ)了煤礦安全監(jiān)控系統(tǒng)的安全盲點(diǎn),使得安全監(jiān)控系統(tǒng)的使用更符合安全規(guī)程,進(jìn)而確保煤礦生產(chǎn)的安全性。該方案的設(shè)計(jì)不僅具有實(shí)踐意義,而且也能為將來的監(jiān)控系統(tǒng)的發(fā)展提供一定的參考意義。
參考文獻(xiàn):
[1] 丁賢林.基于SVN的項(xiàng)目文檔管理系統(tǒng)實(shí)現(xiàn) [D].成都:電子科技大學(xué),2012.
[2] 薛一波,易成岐.云存儲(chǔ) [J].中興通訊技術(shù),2012,18(1):57-60.
作者簡(jiǎn)介:丁瑞琦(1981-),男,漢族,江蘇常州人,碩士研究生,研究方向:煤礦監(jiān)控類軟件設(shè)計(jì)與研發(fā)。