羅 恒,王金璐,孫 鋒,周建輝,劉 杰
(1.中國艦船研究設計中心,湖北 武漢 430064;2.武漢理工大學能源與動力工程學院,湖北 武漢 430063)
在船舶軸系試驗臺架的試驗過程中,會產生大量的臺架監測數據,這些數據主要以數據庫存儲及文本存儲2種主要形態進行保存[1-2]。對振動、視頻圖像等監測類型數據,用文件進行保存的形式具有優勢,在實際項目中大多采用這一方式。為提高數據的安全性,防止意外災害等情況下導致的數據丟失,一般都需要采用數據備份的處理方法,其中又以異地雙機熱備份的方式最為常見[3-4]。當前類似的軟件程序如FreeFileSync等,在進行文件備份時主要是設置一定的時間間隔對監視的文件夾進行迭代式掃描,判斷出發生改變的文件后對其進行文件備份[5]。此方式設計簡單,但是需要使用定時器對文件夾進行全掃描,耗費計算機資源較多,運行效率低[1];對文件進行異地計算機備份操作時,需要通過網上鄰居來指定備份路徑,需要用戶手動操作較多,體驗較差[6]。
船舶軸系試驗臺架監測數據的存儲方式有文件存儲和數據庫存儲2種主要方式。數據庫系統以記錄和字段為單位進行數據存儲,可以實現整體數據的結構化、減少數據冗余、提高數據的讀取速度;這種方式比較適合對溫度、壓力等單次監測數據量小的測試數據的存儲。文件存儲通過以文件為單位來組織數據存儲,將一批數據組織成一個相對獨立的數據文件;這種方式特別適合軸系試驗臺架的振動監測等數據的存儲。對振動監測數據,因為采樣頻率很高,一次測試即使只持續采集幾秒鐘,也會產生上萬行到幾十萬行的子數據,這種數據如果用數據庫表直接存儲,記錄量太大,對數據庫形成比較大的負載壓力,而該類數據具有嚴格的時間序列特征,不需要進行排序、查找等典型的數據庫操作;因此,將一次測試的數據用文件保存,而將該文件的路徑信息保存到數據庫,以實現文件的索引,這種方式具有更好的處理效率。
本文設計一種新的船舶軸系試驗臺架監測數據備份軟件,其在進行本地存儲時,使用配置文件來減少人為操作步驟并提高運行效率和計算機資源利用率;在進行異計算機備份數據操作時,使用網絡通信TCP/IP協議傳送文件數據進行雙機遠程備份,能夠降低對操作系統依賴度,同時也能減少人為操作步驟和操作難度,提高人機交互能力。
針對文件型監測數據的備份,主要有本地備份和異地備份2種需求,本地備份是在文件所在的計算機上設定一個備份目錄,將源文件備份到該備份目錄;異地備份則是在另外一臺計算機上創建備份目錄。在設計備份處理程序時,將源文件復制到本機備份目錄或者通過網絡傳輸到異地的備份目錄都有比較成熟的解決方案。問題的難點在于如何發現來源文件目錄的文件變動事件。如新增加了一個文件、文件的修改、文件的刪除等。采用定時器對文件目錄進行掃描,再比較2次掃描之間的差異,從而獲取到文件的變動,這種處理方式的效率太低。在Windows操作系統中,提供了一個文件系統監視器(FileSystemWatcher)組件,通過該組件,設定需要監控的文件夾目錄及其子目錄,監控目錄下的任何文件事件都會發出一個消息,并被該組件所在的程序獲取到。通過該組件就能很容易獲取到特定目錄下的文件變動事件,高效簡單地實現獲取來源文件的目的。圖1所示為軸系試驗數據備份軟件處理流程。

圖1 軸系試驗數據備份軟件處理流程
文件系統監視器(File SystemWatcher)是本文用到的主要工具之一,該工具為微軟公司從Visual Studio 2008版本之后提供的一個組件,其主要功能是監控指定目錄(可以包括其下的子目錄)中的文件創建、刪除、改動、重命名等事件,并發出相應的事件[3],開發的程序通過處理這些事件以實現特定的效果。該組件可以動態地定義需要監控的文件類型及文件屬性改動的類型,以提供更精確的文件事件消息。
文件系統監視器可以通過屬性來設定和配置相關的行為,最主要的幾個屬性如下。
①監測路徑(Path)屬性:用于設定需要獲取文件夾相關文件系統事件的目錄路徑;②是否包括子目錄(IncludeSubdirectories)屬性:設置是否關聯監視指定路徑中的子目錄;③文件類型過濾(Filter)屬性:設置篩選字符串,用于確定在目錄中監視的文件類型;④文件事件類型過濾(NotifyFilter)屬性:設置目錄下的哪些文件事件會被監測和觸發監視事件,當同時監視多個文件屬性的變動時要用“或”組合;⑤啟用事件監聽(Enable-Raising Events)屬性:設置程序是否開始監聽,默認為“非(False)”,所以需要在程序的初始化時就設置此屬性值為“是(True)”。
文件系統監視器本身是一個多線程的控件,每實例化一個對象都會自動創建一個線程。由于開發的備份軟件只需要在后臺運行,只用記錄備份信息,不需要界面展示,所以不需要進行跨線程的數據訪問。如果需要同時監控多個文件目錄,只需要創建其類型數組,每個文件目錄使用一個對象進行監控即可。
網絡通信是本文實現異地雙擊備份用到的文件傳輸方法,其利用相關接口和協議通過網絡線路傳輸數據信息到網絡計算機上,從而實現2臺計算機的遠程信息交互[4]。本文使用最廣泛的就是TCP/IP協議來完成數據交互。TCP/IP協議通常可以概括為4層:應用層、傳輸層、網絡層和網絡接口層。TCP/IP協議[5]按照層次由上到下,層層包裝。最上面的是應用層,這里面有http等我們熟悉的協議。第二層是傳輸層,其中的TCP和UDP協議就在這個層次。第三層是網絡層,IP協議就在這里,它負責對數據加上IP地址和其他的數據以確定傳輸的目標。第四層是網絡接口層,也就是物理層,通信信息最后都會通過物理媒介進行傳輸。本文直接使用網絡開發中封裝好的Socket編程接口來進行網絡數據傳輸。
本地備份是指數據接收處理后,直接在本地進行實驗數據備份,備份速度快。本地備份處理流程圖如圖2所示。

圖2 本地備份處理流程圖
在本地備份任務中,直接使用.net提供的IO數據流讀取數據,然后在硬盤指定位置寫數據即可。根據網絡通信TCP/IP協議的特點,異地雙機備份的程序分為服務端和客戶端,本文設計異地備份目的計算機為服務端,本地數據產生計算機為客戶端。此設計的優點是只有在有需要備份的文件時才進行2臺計算機的連接和數據通信,可以節省本地計算機的計算資源,更好的為數據采集和處理服務。異地雙機備份處理流程圖如圖3所示。

圖3 異地雙機備份處理流程圖
當本地計算機產生需要備份的文件時,客戶端軟件中的文件系統監視器會丟出相應事件,促使客戶端向服務端發送連接請求。客戶端同服務端連接成功后,發送備份數據到服務端。然后服務端接收并保存數據,同時反饋備份信息。客戶端通過反饋信息判斷備份是否成功,成功則關閉與服務器的連接,失敗則再次發送備份數據。
程序設計為可以保存用戶設置的配置信息,以便能夠自動完成備份任務。設計使用ini文件保存配置信息,其不僅可以使程序快速讀取和保存配置信息,用戶還可以手動按照ini格式自己修改配置信息。保存的配置信息主要包括遠程計算機的IP地址、程序端口號、監視和保存的備份文件全路徑及程序關閉密碼。使用程序關閉密碼是為了保證程序的安全穩定運行,防止人為操作失誤導致的程序關閉。
異地備份機制中使用網絡通信TCP/IP協議時,設計以字節格式發送數據[6]。字節第一位表示文件更改類型,有4種類型——1表示新建(Created)類型,2表示刪除(Deleted)類型,4表示修改(Changed)類型,8表示重命名(Renamed)類型。字節第二位表示文件或文件夾,0為文件,1為文件夾。字節后面的內容按照更改類型的不同而有所不同,Created類型和Deleted類型在后面只需要添加文件或文件夾的路徑即可,Renamed類型需要在后面添加更改前和更改后的文件或文件夾名,Changed類型則需要在后面添加文件或文件夾路徑和文件內容。文件或文件夾的路徑名和文件內容都是以字符串的形式保存的,所以需要將字符串類型轉換成字節類型。
將備份文件按照設計的方式以字節形式整合完畢后,通過網絡通訊協議發送字節數據到服務端,對數據進行分析備份。服務端接收到字節數據后,通過解析字節數據來獲得備份信息和備份文件,完成備份任務。
數據備份程序由多個環節組成,異地備份任務中也需要2臺計算機進行網絡通信,因此在實際運行過程中可能發生異常,需要對相關異常進行處理,以提高程序的容錯能力。主要可能發生的異常情景如下。
1)連接服務端時出現錯誤。不能連接到指定的異地備份服務端,有可能是服務端沒啟動或者服務端的IP地址或端口號錯誤,應檢查服務端狀態,保證運行正常,還要確定請求的服務端IP地址和端口號正確。
2)本地客戶端因某些原因,程序掛掉后,仍有文件更改。本地客戶端應在配置文件中保存一個最近的備份任務完成時間。當程序啟動時,進行一個初始化操作,在監控文件夾下找出晚于最近備份任務完成時間的備份文件,加入到備份任務中進行備份,解決在程序異常期間產生的需備份文件沒有完成備份的問題。
3)異地服務端因某些原因,程序停止運行,但本地客戶端仍有文件需要備份。在異地服務器未響應期間,本地客戶端應將監視文件中的所有更改文件信息全部放入備份任務中,并保存所有操作記錄,待服務器響應后,再進行所有的文件更改備份操作。
為了解決現有文件性監測數據備份解決方案中所存在的操作復雜和不能進行網絡傳輸的缺點,設計了一種基于文件系統監視器的自動備份軟件的解決方案,并在實際的項目中成功運用。該方案只需要根據用戶自己設定的配置信息就能完成船舶軸系試驗臺架監測數據的自動備份任務,通過修改配置信息來達到修改備份程序設置的目的,極大的降低了人為操作的失誤,提高了軸系試驗數據備份效率,經在實際工程試驗臺架系統中的應用驗證,完全符合實際要求,可以推廣應用到類似的應用場景,具有一定的工程實用價值。