王琦 韓安 賈政 王毓輝
【摘要】本文就企業集約化管理的需求,信息化集成平臺的應用推廣,使用集成平臺處理業務、數據、信息已經滲透到企業安全、生產各個環節。數據、文件之間共享被越來越多的集成應用系統所使用,如實時監測數據文本、圖文圖紙、資料文件等。在企業信息化集成平臺的使用過程中,文件傳輸的效率起著有至關重要的作用。系統的實現,為公司綜合調度數據集成、企業信息化文件共享提供了有效的基礎支撐。
【關鍵詞】傳輸系統;集成信息化;校驗碼;事件;監聽機制
引言
目前,隨著企業集約化管理的需求,使用集成平臺處理業務、數據、信息已經滲透到企業安全、生產各個環節。數據、文件之間共享被越來越多的集成應用系統所使用,如實時監測數據文本、圖文圖紙、資料文件等,需要構建一套企業集成類信息化平臺,對作業現場各子系統數據進行集成與應用,達到實時監視與集中調度的目標。在某些應用場景下,數據在傳輸過程中需要考慮上傳的及時性與數據的連續性,以保證對現場環境的實時監視,以保證對預警和故障的及時處理;同時在應用分析過程中,需要對現場數據的連續性分析,以保證數據的完整性和數據分析結果的準確性。
常規的文件傳輸系統更適應于下行多于上行傳輸的場景。而在企業的信息化集成平臺上,客戶端對上傳文件的需求更為強烈??蛻舳舜嬖谟写罅康奈募枰蟼髦练掌?,以實現數據處理、解析與存儲備份及文件歸檔存儲與備份等。常規的文件傳輸系統有以下缺點:一、上行與下行不對等,更注重下行傳輸;二、傳輸權限不易控制,權限認證手段種類繁多,步驟繁瑣,例如FTP模式;三、對于大量小文件和頻繁傳輸的場景,文件傳輸效率低下,多數情況下需要驗證請求再傳輸。
1.實現目標
本文針對現有企業生產過程實時監測與應用平臺中,基層單位小文件,多客戶端,安全高效頻繁傳輸的應用需求,設計一種基于TCP協議的遠程高效文件傳輸系統,達到數據及時、高效、穩定傳輸,主要實現基于文件夾、文件創建事件的監聽觸發上傳機制;一次握手,終身傳輸機制;自定義分發機制,滿足多種業務應用;分塊多線程傳輸機制提高傳輸效率;分級故障診斷等系統功能,同時該系統的核心技術亦可作為企業網盤的核心技術。
2.設計實現
系統基于TCP/IP技術,采用Socket方式進行設計,面向SOA的架構思路,利用windows服務實現在服務端提供服務,定義好數據傳輸方式,傳輸協議,數據格式,同時通過ip地址和端口進行服務訪問??蛻舳送ㄟ^連接服務器指定的端口進行消息交互。程序拓撲結構如圖1所示。
圖1 系統架構圖
系統設計實現主要利用.Net Remoting技術,在windows 服務中注冊文件傳輸服務,客戶端利用Windows應用程序實現,在實現中利用分布式的設計思想,便于程序與系統功能擴展。
.NET遠程處理(.NET Remoting)是微軟 .NET Framework 中的一種網絡通信技術,提供了一種允許對象通過應用程序域與另一對象進行交互的框架。可以使用 SOAP 以外的協議來通信,而在服務端和客戶端之間所操作的方法近乎相同,客戶端可以不必考慮使用的協議,即可訪問服務端所開放的對象。
在Remoting中是通過通道(channel)來實現兩個應用程序域之間對象的通信的。
客戶端通過Remoting訪問通道以獲得服務端對象,再通過代理解析為客戶端對象,遠程對象代碼運行在服務器上,然后客戶端再通過Remoting連接服務器,獲得該服務對象并通過序列化在客戶端運行。
3.研究內容
3.1 統一權限認證體系的設計與實現
建立統一的權限認證體系,以控制文件傳輸權限,權限認證主要通過客戶端調用服務器接口進行權限認證,如果正常登陸,則進行文件同步及創建監聽事件。
3.2 大文件分塊傳輸與算法設計
針對大文件傳輸特殊性要求,需要考慮對文件進行分塊多線程進行傳輸,因此需要設定文件塊大小的閾值,如512kb,小于等于512K時為小文件,反之為大文件;大文件分為多塊之后,在傳輸之前每塊均提取自身校驗碼;同時向服務器發送對應的文件基本信息及分塊信息,校驗碼與文件均進行傳輸;同時系統根據文件分塊個數分配多個線程的傳輸;單塊數據傳輸后,仍使用同樣的算法提取校驗碼,與原始校驗碼對比驗證以確定當前數據塊是否正確接收。各分塊傳輸完成后,根據文件塊索引,實現文件合并。
圖2 文件分塊傳輸邏輯圖
3.3 文件轉換庫的設計
在某些特殊情況下,需要考慮規定接收文件的格式,比如圖片類僅支持bmp、jpg、png和gif;客戶端能夠獲取格式規定,并對本地的相關文件實現文件轉換算法,例如傳輸圖片文件時,客戶端生成tiff格式的文件,則必須將該文件轉換為bmp、jpg、png或gif中的一種才可以上傳。對于客戶端本身操作的文件,不符合格式的文件都可以通過算法轉換為標準格式的文件。
因此在文件版傳輸版本過程中,需要考慮文件轉換庫的設計,即記錄客戶端文件名稱、文件特征碼、文件擴展名、服務端文件名稱、轉換后文件特征碼、文件擴展名,服務器在啟動過程中,掃描服務器某目錄下的文件列表名稱及校驗碼,與客戶端對應目錄文件校驗碼進行第一次比對,對服務器端不存在或不一致的文件名及校驗碼進行同步上傳,文件信息比對主要用在客戶端啟動時,其他時間主要通過文件夾或文件事件進行同步更新。
3.4 敏捷傳輸機制的設計
在傳統的傳輸設計過程中,主要通過時間輪詢的方式判斷某目錄下文件是否發生了變化,同時對于某些文件處于變化狀態中,然后進行對應的事件,在這種情況下既不利于文件的及時傳輸與數據的更新,也不利于程序的設計實現,變化中的狀態文件需要加鎖進行處理,否則會造成文件半個的傳輸或者傳輸異常。
系統在設計過程中采用C#中的FileSystem Watcher組件,實現對文件系統的監視,當目錄或者文件發生增加、修改、刪除等事件完成時,進行相關的事件驅動,快速地啟動業務處理。系統主要針對FileSystemWatcher的Changed,Created,Deleted,Renamed等FileSystemEventArgs事件,實現當客戶端創建目錄或文件時,通過文件夾或文件創建成功事件,激發客戶端通過服務器端接口創建對應目錄或文件;當客戶端更改目錄時,通過文件夾更改成功事件,激發客戶端通過服務器端接口更改對應目錄;當客戶端刪除目錄時,通過文件夾刪除成功事件,激發客戶端通過服務器端接口刪除對應目錄及目錄中文件;
3.5 故障處理及重傳方法的設計
系統基于網絡傳輸,在傳輸過程中,難免因為網絡故障而導致的傳輸網絡中斷,在公司集成化信息平臺中,需要考慮不間斷運行,因此需要及時對網絡傳輸進行診斷,并提供一定的定位功能,可通過提示窗、控制臺輸出、日志記錄等多種功能提供故障定位信息,例如網絡中斷異常、文件轉換失敗等故障均有記錄可查,可輔助解決故障,同時根據故障狀態或故障類型將故障劃分類別,根據持續時間進行分級報警,進行窗體閃爍或語音報警提醒。
在傳輸過程中,網絡中斷,在傳輸中間過程會導致部分文件的中斷或不完整,在服務器端通過文件校驗對文件塊進行檢查,當發現文件塊出現傳輸錯誤則向客戶端發出錯誤回執,進行重發。
3.6 斷點續傳的設計
由于實時監測平臺數據完整性要求,需要對傳輸的數據保持完整性,因此需要考慮文件時間戳標識對文件進行本地化存儲,當發生網絡中斷時,文件暫存到本地,網絡通斷時,根據文件列表,依據文件的創建時間進行順序上傳,以保證數據有序性。
4.功能測試
測試環境采用局域網內的三臺機器,一臺作為服務器,兩臺作為客戶端,分別實現對服務端與客戶端程序部署。
4.1 測試準備
(1)建立客戶端信息目錄庫:客戶端目錄庫存儲服務器地址、登錄賬號、密碼、共享路徑、是否自定驗證登陸。如在客戶端程序配置文件中服務器地址(192.168.1.1)、登陸賬戶(ABC)、密碼(加密源碼:123456)、共享路徑為D:\F1;D:\F2。
(2)服務器初始化:設定好存放路徑,如:G:\Data。在服務器上創建好實際路徑,并將路徑名稱保存在配置文件中,加載轉換對應的校驗碼庫列表(主要與客戶端轉換后文件對比分析)。
(3)客戶端初始化:監聽共享路徑為D:\F1;D:\F2下文件或者目錄操作事件,同時在啟動過程中,通過輸入用戶名、密碼完成權限認證后,實現本地目錄下文件監聽。
4.2 過程測試
(1)初始自動同步:客戶端登陸驗證完成后,進行對應(舉例D:\F1;D:\F2下)目錄對應的服務器目錄進行文件校驗碼的獲取,如服務器對應G:\Data\ABC\F1目錄下有一個文件D1.DOC,對應的文件校驗碼為AFCD1238,文件大小為1.32M,一個文件D2.DOC,對應的文件校驗碼為ABCD1238,文件大小為500K,F2目錄不存在,則根據事件創建F2目錄,則服務器上G:\Data\ABC\F2目錄;客戶端D:\F1下有文件D1.DOC,對應的文件校驗碼為AFFF1238,文件大小為1.32M,一個文件D2.DOC,對應的文件校驗碼為ABCD1238,文件大小為500K。D:\F2有一個P1.TIFF文件,根據對應的文件名和校驗碼進行判斷,本次上傳F1下的D1.DOC和F2下的P1.TIFF文件;
(2)文件傳輸:對于F1下的D1.DOC文件:根據前文示例,將512kb作為劃分文件大小的標準,大于512kb的文件,按照每塊512kb大小將整個文件分割成三個文件塊之后再傳輸,傳輸完成后合成,進行保存,同時可根據服務器線程管理,啟動線程資源分配,如服務器共有1000個接收線程,有空閑上傳線程2個,則分配2個線程進行并行上傳,服務器空閑線程為0,如先傳遞先兩個512KB文件,文件傳輸完畢,則通知服務器線程回收,服務器空閑線程大于2,則單獨分配1個空閑線程進行剩余數據塊的傳輸,傳輸完成后,回收線程,所有塊均傳輸完成后,合并所有塊,完成大文件傳輸。對于F2下的P1.TIFF文件進行上傳轉換,采用SaveAs方式進行文件另存,同時將文件校驗碼記錄到對應庫中,以便于重傳判別。
(3)故障處理及重傳:傳輸過程中,通過停止網卡工作或斷開網線方式進行,系統進行網絡傳輸中斷提醒,當中斷故障持續5分鐘,進行使用日志提醒或提示窗;故障持續時間超過10分鐘則報警升級,通過語音報警箱進行提醒;同時對某一個特殊類型文件進行轉換上傳時,當文件轉換失敗進行記錄可查。
(4)其他測試:網絡中斷以后,文件本地化暫存的斷點續傳測試,文件進行本地化暫存,當網絡通以后,進行文件順序上傳??蛻舳藢夸浵碌奈募?、目錄創建、刪除、更新事件,服務端相關事件的響應。
(5)退出:當客戶程序退出時,與服務端消息交互,服務端進行對應退出信息的記錄,以防止客戶端用戶在文件數據傳輸過程中非法操作的追蹤。
4.3 測試結果
通過測試,該文件傳輸系統高效的進行了文件的傳輸,解決了傳統傳輸模式效率、穩定性及可控性問題,該系統更適合大量小文件頻繁傳輸,有利于在企業集約化監測監管信息化平臺中的數據共享集成。同時,服務端文件傳輸塊的設計根據程序運行過程進行實時調整,以保證大文件所占比率在整個文件傳輸系統中的5%以下,從而避免過多的文件切塊傳輸與合并另存,提高文件傳輸效率。
5.總結
本文就一種高效文件傳輸系統的設計與實現展開論述,系統就企業集約化監測監管信息化平臺中的數據、文件之間共享建立了穩定高效的傳輸通道,在項目應用起著有至關重要的作用。在后期系統完善中尚需要考慮服務器端的可靠性,同時實現基于SOAP的多種協議的傳輸以滿足越過代理服務器,實現SOCKET等被屏蔽的功能,以及建立統一的管理平臺,支持多語言及遠程管理功能。
參考文獻
[1]高珍珍.跨庫集成檢索系統中數據源連接器的半自動生成[D].北京師范大學.
[2]趙文濤,魏紅格.礦業信息異構數據庫集成模型的研究[J].工礦自動化,2008(06).
[3]林懷恭,聶瑞華,等.基于ESB的共享數據中心的研究與實現[J].計算機應用與軟件,2010,5.
[4]韓建國,楊漢宏,等.神華集團數字礦山建設研究[J].工礦自動化,2013(03).
[5]王淵,韓安,晁曉菲.煤炭集團公司生產安全調度指揮管理平臺的建設構思[J].工礦自動化,2012(03).
作者簡介:王琦(1971—),碩士,高級工程師,同煤集團機電副總工程師,主要從事礦山機電、信息化研究與應用工作。