文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2016.11.031
中文引用格式: 陳獻(xiàn)慶,郭亞楠,,張玉龍,,等. VLD遠(yuǎn)程編譯系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2016,,42(11):116-118.
英文引用格式: Chen Xianqing,,Guo Yanan,Zhang Yulong,,et al. Design and implementation of the remote compile system for VLD[J].Application of Electronic Technique,,2016,42(11):116-118.
0 引言
可視化邏輯設(shè)計(jì)(Visual Logic Design,,VLD)工具是一種以圖形化、模塊化邏輯功能圖形代替編寫程序源代碼的程序開發(fā)工具[1],,是許繼自主研發(fā)和擁有自主知識(shí)產(chǎn)權(quán)的軟件,。其以避免重復(fù)設(shè)計(jì)、節(jié)省開發(fā)時(shí)間,、程序設(shè)計(jì)標(biāo)準(zhǔn)化,、方便程序修改和維護(hù)等特點(diǎn)廣泛應(yīng)用于公司繼電保護(hù)領(lǐng)域的保護(hù)邏輯設(shè)計(jì)、保護(hù)功能實(shí)現(xiàn)等方面[2-3],。但是由于VLD工具設(shè)計(jì)之初缺乏對(duì)自主知識(shí)產(chǎn)權(quán)的保護(hù)考慮,,導(dǎo)致其無有效認(rèn)證保護(hù)機(jī)制[4],任何電腦都可安裝使用,,且用戶可通過工具獲取公司多年積累的保護(hù)、測控等核心代碼,,給公司機(jī)密外泄和利益流失留下巨大隱患,。因此需要一種能避免核心代碼外泄、對(duì)工具的使用范圍可控的方法解決上述問題,。
本文提出了一種基于企業(yè)內(nèi)網(wǎng)的VLD遠(yuǎn)程編譯系統(tǒng)架構(gòu)[5],,該架構(gòu)采取了模塊化的設(shè)計(jì)思想,分離了VLD工具的操作界面和核心資源代碼,,把在本地的編譯處理工作部署到服務(wù)器端,,本地只保留通用的用戶操作界面,有效提高了VLD工具核心代碼的安全性,。
1 VLD遠(yuǎn)程編譯系統(tǒng)架構(gòu)
1.1 VLD遠(yuǎn)程編譯系統(tǒng)總體架構(gòu)
遠(yuǎn)程編譯系統(tǒng)架構(gòu)采用了模塊化的設(shè)計(jì)思想,,將系統(tǒng)劃分為3個(gè)部分:客戶端、分發(fā)服務(wù)器和構(gòu)建服務(wù)器,。這樣設(shè)計(jì)是為了將解決方案的功能分隔到不同的功能模塊中,,每一功能模塊保持內(nèi)聚性,大致在同一抽象級(jí)別,并且每一模塊都與其他的模塊保持松散耦合,,增強(qiáng)了系統(tǒng)的可擴(kuò)展性,、可維護(hù)性和復(fù)用性[6-7]。系統(tǒng)的總體架構(gòu)如圖1所示,。
圖1中,,客戶端是編譯任務(wù)的發(fā)起者,負(fù)責(zé)編譯請(qǐng)求的發(fā)送,、工程文件的發(fā)送和編譯結(jié)果的接收,;分發(fā)服務(wù)器是連接客戶端和構(gòu)建服務(wù)器的接口,負(fù)責(zé)接收編譯請(qǐng)求后選擇合適的構(gòu)建服務(wù)器,,并實(shí)時(shí)監(jiān)視和更新構(gòu)建服務(wù)器信息,;構(gòu)建服務(wù)器是編譯任務(wù)的執(zhí)行者,主要完成編譯任務(wù)和編譯結(jié)果文件的傳輸,。
1.2 VLD遠(yuǎn)程編譯系統(tǒng)工作流程
系統(tǒng)的工作流程如圖1中序號(hào)所示,,基本流程如下:
(1)客戶端發(fā)起編譯請(qǐng)求,分發(fā)服務(wù)器接收到后對(duì)報(bào)文進(jìn)行解析,,獲取客戶端ID,、VLD版本號(hào)、客戶端IP和端口號(hào)等信息,;
(2)分發(fā)服務(wù)器監(jiān)聽構(gòu)建服務(wù)器相的工況信息,,記錄其工作狀態(tài)、內(nèi)存使用率,、構(gòu)建服務(wù)器的IP和端口號(hào)等,;
(3)分發(fā)服務(wù)器根據(jù)步驟(2)中更新的構(gòu)建服務(wù)器工況信息選擇合適的服務(wù)器,并將分配結(jié)果返回給客戶端,,同時(shí)將編譯請(qǐng)求信息更新后轉(zhuǎn)發(fā)給構(gòu)建服務(wù)器,;
(4)客戶端和構(gòu)建服務(wù)器建立連接,客戶端在收到構(gòu)建服務(wù)器的上傳工程文件請(qǐng)求消息后,,向構(gòu)建服務(wù)器發(fā)送文件,;
(5)構(gòu)建服務(wù)器接收工程文件結(jié)束,進(jìn)行工程編譯,,編譯完成后向發(fā)送編譯請(qǐng)求的客戶端回傳編譯結(jié)果文件,。
經(jīng)過以上5個(gè)主要步驟,編譯系統(tǒng)可進(jìn)行一次完整的VLD遠(yuǎn)程編譯工作,。
2 功能模塊設(shè)計(jì)實(shí)現(xiàn)
基于系統(tǒng)的總體架構(gòu),,并根據(jù)模塊的功能需求,每個(gè)大的模塊又由不同的小功能模塊構(gòu)成,。模塊間的通信使用TCP和UDP協(xié)議實(shí)現(xiàn),,其中狀態(tài)監(jiān)聽和編譯請(qǐng)求信息采用系統(tǒng)開銷較小的UDP協(xié)議進(jìn)行通信,文件傳輸采用傳輸可靠性較高的TCP協(xié)議進(jìn)行通信[8-9]。
2.1 客戶端
為了保證原使用者的使用習(xí)慣,,客戶端界面繼承了原VLD工具的操作界面,,其新加功能以新增按鈕和選項(xiàng)的方式添加。根據(jù)需求,,客戶端分為4個(gè)功能模塊:編譯請(qǐng)求模塊,、ID管理模塊、文件傳輸模塊,、文件壓縮模塊,。
編譯請(qǐng)求模塊實(shí)現(xiàn)了向分發(fā)服務(wù)器發(fā)送編譯請(qǐng)求的功能。ID管理模塊負(fù)責(zé)工程ID的記錄管理工作,,ID是為了系統(tǒng)親和性考慮,,每個(gè)工程分配一個(gè)系統(tǒng)唯一的ID編號(hào),當(dāng)工程第二次請(qǐng)求編譯時(shí),,分發(fā)服務(wù)器會(huì)根據(jù)ID號(hào)分配上次編譯過此工程的構(gòu)建服務(wù)器,,以減少重復(fù)傳輸工程文件時(shí)間,提高系統(tǒng)效率,。文件傳輸模塊和文件壓縮模塊聯(lián)合完成了文件發(fā)送及文件接收的操作,。
2.2 分發(fā)服務(wù)器
分發(fā)服務(wù)器將客戶端和構(gòu)建服務(wù)器聯(lián)系在一起,接收客戶端的編譯請(qǐng)求,,并存儲(chǔ)和更新構(gòu)建服務(wù)器的狀態(tài),,完成構(gòu)建服務(wù)器的選擇工作。其主要功能模塊劃分為:心跳處理模塊,、選擇模塊,、ID生成模塊、隊(duì)列共享模塊,。
分發(fā)服務(wù)器心跳處理模塊接收構(gòu)建服務(wù)器定時(shí)發(fā)送的狀態(tài)信息,,并把其更新到本地存儲(chǔ)的構(gòu)建服務(wù)器列表中。選擇模塊是分發(fā)服務(wù)器的核心模塊,,其實(shí)現(xiàn)了系統(tǒng)的親和性功能和負(fù)載均衡算法,首先根據(jù)工程ID選擇編譯過的構(gòu)建服務(wù)器,,如果是新建工程或原構(gòu)建服務(wù)器不在編譯等待狀態(tài),,則根據(jù)其他構(gòu)建服務(wù)器的工作狀態(tài)以及內(nèi)存使用率等條件選擇合適的構(gòu)建服務(wù)器分配編譯任務(wù)。
ID生成模塊生成系統(tǒng)唯一的工程ID,,此ID在分發(fā)服務(wù)器接收到編譯請(qǐng)求時(shí)返回給客戶端,,由客戶端更新到ID記錄文件中,同時(shí)分配完構(gòu)建服務(wù)器后,,分發(fā)服務(wù)器會(huì)把ID記錄到相應(yīng)構(gòu)建服務(wù)器狀態(tài)列表中,,以供下次分配時(shí)查詢。
隊(duì)列共享模塊避免了網(wǎng)絡(luò)擁塞時(shí)編譯請(qǐng)求的丟失,其會(huì)對(duì)不同時(shí)刻到來的編譯請(qǐng)求進(jìn)行緩存,,當(dāng)先到的編譯請(qǐng)求還未處理完畢,,后面的編譯請(qǐng)求將按時(shí)間進(jìn)行排隊(duì)處理。
2.3 構(gòu)建服務(wù)器
構(gòu)建服務(wù)器主要完成工程編譯,,并將編譯完成的工程文件回傳給客戶端,。按照其功能可劃分為4個(gè)主要模塊:心跳模塊、代碼編譯模塊,、文件傳輸模塊,、文件壓縮模塊。
為了一臺(tái)構(gòu)建服務(wù)器能夠同時(shí)完成多個(gè)編譯任務(wù),,避免資源的浪費(fèi),,構(gòu)建服務(wù)器采取多任務(wù)并發(fā)模式實(shí)現(xiàn)。每個(gè)構(gòu)建服務(wù)器可創(chuàng)建多個(gè)獨(dú)立的構(gòu)建進(jìn)程,,每個(gè)進(jìn)程根據(jù)IP地址和端口號(hào)區(qū)分,,可獨(dú)立完成編譯任務(wù)。構(gòu)建服務(wù)器中心跳模塊功能是向構(gòu)建服務(wù)器提供自身的工況,,包括IP地址,、端口號(hào)、進(jìn)程ID,、工作狀態(tài),,以使構(gòu)建服務(wù)器根據(jù)自身狀態(tài)抉擇是否分配編譯任務(wù)。
代碼編譯模塊處理客戶端發(fā)送的工程文件,,其編譯原理是將VLD原編譯功能以動(dòng)態(tài)庫的方式封裝,,編譯模塊接到編譯任務(wù)后調(diào)用動(dòng)態(tài)庫并實(shí)時(shí)將編譯過程回傳到客戶端,這樣實(shí)現(xiàn)可使系統(tǒng)具有良好的可移植性,。例如當(dāng)更換動(dòng)態(tài)庫以后,,構(gòu)建服務(wù)程序不需要大的更改,只需要添加相應(yīng)的接口函數(shù),,并根據(jù)需要完成配置文件的配置即可,。
文件傳輸模塊和文件壓縮模塊復(fù)用了客戶端的相應(yīng)模塊,完成文件的壓縮傳送和文件接收功能,。
2.4 系統(tǒng)可視化工具和服務(wù)看門狗
由于系統(tǒng)各模塊以后臺(tái)服務(wù)的形式設(shè)計(jì)實(shí)現(xiàn),,運(yùn)行期間數(shù)據(jù)對(duì)用戶和開發(fā)者不可見,為了便于系統(tǒng)的維護(hù)和測試,,開發(fā)了系統(tǒng)可視化工具,,將分發(fā)服務(wù)器存儲(chǔ)的構(gòu)建服務(wù)器數(shù)據(jù)表結(jié)合其分發(fā)結(jié)果以表的形式實(shí)時(shí)展現(xiàn)在工具上。
同時(shí),,系統(tǒng)一旦正式投入使用,,分發(fā)服務(wù)器和構(gòu)建服務(wù)器將部署在企業(yè)機(jī)房,,當(dāng)出現(xiàn)系統(tǒng)死循環(huán)、進(jìn)程關(guān)閉等問題時(shí)無法實(shí)時(shí)維護(hù),。為了提高系統(tǒng)運(yùn)行的穩(wěn)定性和可靠性,,實(shí)現(xiàn)了服務(wù)看門狗工具??撮T狗工具對(duì)每個(gè)構(gòu)建服務(wù)進(jìn)程和分發(fā)服務(wù)進(jìn)程進(jìn)行監(jiān)視,,一旦檢測到某個(gè)進(jìn)程在規(guī)定時(shí)間內(nèi)無喂狗響應(yīng),則判定此進(jìn)程為離線狀態(tài),,將強(qiáng)制結(jié)束并重啟該進(jìn)程,。
3 系統(tǒng)時(shí)效性與可靠性驗(yàn)證
根據(jù)系統(tǒng)設(shè)計(jì),搭建如圖2所示的測試環(huán)境,。
部署4臺(tái)構(gòu)建服務(wù)器電腦,,每臺(tái)電腦運(yùn)行5個(gè)構(gòu)建服務(wù)進(jìn)程,另部署4臺(tái)電腦作為客戶端,,每臺(tái)電腦最少運(yùn)行兩個(gè)VLD客戶端,,分別從時(shí)效性和可靠性兩個(gè)方面對(duì)系統(tǒng)進(jìn)行測試驗(yàn)證。
3.1 可靠性驗(yàn)證
4臺(tái)客戶端電腦隨機(jī)發(fā)送編譯請(qǐng)求,,通過可視化工具監(jiān)視進(jìn)行編譯任務(wù)的構(gòu)建服務(wù)器,,編譯完成后在相應(yīng)構(gòu)建服務(wù)器運(yùn)行原VLD工具編譯相同工程,將編譯結(jié)果分別與本地以及客戶端接收的編譯結(jié)果進(jìn)行對(duì)比,,經(jīng)過多次反復(fù)測試,,編譯結(jié)果相同。測試數(shù)據(jù)如表1所示,。
3.2 時(shí)效性驗(yàn)證
系統(tǒng)在保證功能可靠性的同時(shí),,需要保證其時(shí)效性,以提高用戶體驗(yàn),。測試通過選取502 KB~20 MB不同大小的工程文件進(jìn)行編譯,,從客戶端發(fā)送編譯請(qǐng)求開始計(jì)時(shí),到客戶端提示編譯完成計(jì)時(shí)結(jié)束,。在企業(yè)內(nèi)網(wǎng)的測試中,,最快編譯時(shí)間為55 s,最慢編譯時(shí)間為320 s,。同時(shí)在相同客戶端進(jìn)行本地工程編譯計(jì)時(shí)進(jìn)行對(duì)比,,測試結(jié)果如表2所述,表明平均編譯時(shí)間控制在3 min之內(nèi),,雖然較本地編譯有一定延時(shí),但在可接受范圍之內(nèi),。
4 結(jié)束語
本文設(shè)計(jì)的VLD遠(yuǎn)程編譯系統(tǒng)將VLD工具核心代碼部署到企業(yè)服務(wù)器端,,有效控制了工具使用范圍,,提高了代碼的安全性,防止了核心代碼的外泄,,同時(shí)用戶界面繼承了原工具的界面,,保證了用戶使用習(xí)慣,可靠性和實(shí)時(shí)性測試驗(yàn)證了本系統(tǒng)的有效性,。本編譯系統(tǒng)采取模塊化的設(shè)計(jì)實(shí)現(xiàn)方式,,具有良好的擴(kuò)展性和維護(hù)性,為以后其他工具的遠(yuǎn)程操作移植提供了框架,。
參考文獻(xiàn)
[1] 楊超,,李剛,安永帥.一種基于VLD開發(fā)的智能高壓隔離開關(guān)到位監(jiān)測方法[J].高壓電器,,2014(7):76-82.
[2] 黃繼東,,周曉龍,馬和科.基于VLD開發(fā)的超高壓微機(jī)母線保護(hù)[J].電力自動(dòng)化設(shè)備,,2008(7):97-101.
[3] 艾淑云,,毋炳鑫,謝衛(wèi)華.基于VLD設(shè)計(jì)的微電網(wǎng)模式切換研究[J].電子科技,,2014(9):160-164.
[4] 譚貌,,陳義,涂杰.軟件版權(quán)保護(hù)技術(shù)的研究與分析[J].計(jì)算機(jī)應(yīng)用與軟件,,2007(1):54-57.
[5] 彭進(jìn)展,,尹寶林,黃鑫.GRDBS:一種針對(duì)嵌入式系統(tǒng)的通用遠(yuǎn)程調(diào)試系統(tǒng)[J].計(jì)算機(jī)工程,,2003(2):109-111.
[6] 田安琪,,金天.嵌入式測姿系統(tǒng)軟件的模塊化[J].電子技術(shù)應(yīng)用,2015(7):26-29.
[7] 張志杰.基于分層結(jié)構(gòu)的管理信息系統(tǒng)架構(gòu)設(shè)計(jì)[J].計(jì)算機(jī)技術(shù)與發(fā)展,,2010(10):147-149.
[8] 龍玉軍,,龔彬.基于TCP、UDP的多路多數(shù)據(jù)流融合網(wǎng)絡(luò)系統(tǒng)設(shè)計(jì)[J].電子設(shè)計(jì)工程,,2011(21):69-72.
[9] 瞿有甜,,盛賢良.基于TCP套接字的應(yīng)用研究[J].計(jì)算機(jī)應(yīng)用研究,2006(7):47-49.