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