黃俊領, 張志杰, 高 寧
(中國人民解放軍61741部隊信息中心,北京100094)
近幾年來,為了滿足氣象水文預報預測業務的需求,中國在氣象、海洋、空間各行業進行了大規模的基礎性建設,通過衛星遙感探測、地面自動觀測、海洋環境探測、空間環境探測獲取了大量觀、探測資料,生成了大量的氣象水文預報預測產品。如何在有限的帶寬下把資料和產品實時或近實時地推送至各級氣象水文基層單位,使一線預報人員能夠在第一時間獲取所需的保障資料,最大限度的提高預報產品的時效性,是氣象水文信息服務的一項主要任務。目前在有線信道上的信息推送主要是基于FTP(文件傳輸協議)的文件傳輸,通過遠程目錄同步[1]的方式實現。采用這種方式,傳輸目錄中文件數量較多時搜索、比對時間大幅增加,消耗時間遠大于增量文件傳輸時間,且無傳輸優先級控制,不能保證不同信息時效性要求。
采用基于硬鏈接的數據推送技術,設計了包括本地文件同步、遠程文件傳輸、到報監控管理和傳輸安全控制等的氣象水文數據推送系統,探索了氣象水文數據推送的新形式,實現了氣象水文信息的高效推送。
硬鏈接(Hard link)[2]最早是UNIX文件系統的一個功能屬性,和原文件名指向的是存儲設備上同一個文件內容。就好像這個文件內容有多個文件名一樣,每個文件名都有相等地位。刪除其中任何一個之后,文件內容本身不會被刪除,仍然可以使用其他名稱來訪問。只有當最后一個指向這個文件內容的文件名被刪除后,文件內容才被真正刪除??梢钥闯?一個文件的硬鏈接跟此文件的原名稱沒有任何本質區別。
現在,硬鏈接已不僅僅是UNIX、LINUX的專利,在Windows系統的NTFS文件系統中也能夠使用硬鏈接技術。使用硬鏈接有以下優點:一是節省硬盤空間,同樣的文件,只需要維護硬鏈接關系,不需要進行多重的拷貝。二是防止意外刪除,刪除其文件的一個鏈接,文件還能夠通過其他鏈接名稱進行訪問操作。三是方便應用管理,如建立硬鏈接進行集中備份、通過維護硬鏈接關系(即文件重定向)進行軟件或組件版本升級(Windows7中大量使用[3-4])等。四是便于同步操作,將需要同步的文件建立硬鏈接到同一個分區下的不同目錄中,即可以實現對目錄中文件的同步操作,系統使用的就是硬鏈接的此項特征。
基于硬鏈接的氣象水文數據推送系統的整體功能架構如圖1所示,設計為3層:基礎服務層、功能管理層和用戶接口層。架構以封裝資源和為用戶提供統一、簡單和友好的接口界面為目標,通過各層協同工作與支持,共同完成數據推送的各項功能。
基礎服務層主要是完成數據推送所需要的一些基礎服務,主要由數據傳輸服務、數據安全服務、其他支撐服務和傳輸狀態數據庫4個部分組成。采用現有成熟IT技術如.NET框架技術、WEB服務技術和數據庫技術來實現,存在形式是服務、鏈接庫和數據庫。
數據傳輸服務對所有的待傳輸數據提供落地、非落地的基于TCP的數據傳輸和基于UDP的消息傳輸服務。具體做法是使用TCP進行數據傳輸,使用UDP進行消息反饋和傳遞。數據安全服務完成節點注冊身份認證、應用層加解密和訪問策略控制等功能。其他支撐服務由WEB服務、壓縮解壓縮服務、文件分割與組合服務、版本檢測與升級服務等組成。傳輸狀態數據庫完成數據傳輸過程中的日志記錄、配置記錄、消息記錄等功能,并與WEB服務相結合,對全網提供傳輸狀態的動態查詢和報表功能。
功能管理層實現了系統在傳輸的各個階段和環節的管理功能,主要有系統配置管理、傳輸流程管理、安全傳輸管理、傳輸監控管理和日志報表管理等5部分,其中系統配置管理、傳輸監控管理和日志報表管理采用基于WEB服務的方式,傳輸流程管理和安全傳輸管理采用基于C/S的模式。
系統配置管理實現對系統基本參數和要素的配置功能,主要包括傳輸目標節點信息、數據源目錄信息、傳輸任務信息及其他系統運行參數信息。傳輸流程管理是功能實現的一個重點,描述了數據是如何從源節點傳輸到目標節點的全過程,以及其中控制和反饋信息的傳輸。安全傳輸管理實現節點的入網注冊、身份認證、配置信息下載、應用層的加解密功能和安全策略管制管理等功能。節點入網注冊和身份認證將節點規劃信息和節點的硬件信息進行綁定,作為入網憑證。加解密功能根據數據傳輸模式要求,對需要加密傳輸的數據進行加密傳輸和接收解密操作。安全策略管理包括粗粒度的菜單控制及細粒度的目錄及文件控制策略。傳輸監控管理通過分析數據傳輸特征,完成資料和傳輸的全程監視功能。日志報表管理主要完成數據傳輸的日志記錄及報表生成功能,用來組織傳輸監控和故障分析。

圖1 系統架構圖
用戶接口層主要包括人機界面、查詢處理和統一數據視圖3個部分內容,是用戶訪問數據源的入口,是進行任務管理、監控系統運行的人機交互平臺。人機界面采用基于B/S和C/S技術結合設計,為用戶提供一切可供用戶操作的前臺信息展示界面。查詢處理利用人機界面將用戶提交的各類查詢和監視要求,經功能實現層處理輸出為標準的服務請求,最后利用基礎服務來執行并獲取查詢結果。統一數據視圖是將查詢處理產生的查詢結果進行統一封裝,規范其展現方式,以同一種表現風格來處理信息的有效表達,使得操作人員更易于理解。
系統傳輸流程可分為建立任務、報文檢測、建硬鏈接、數據推送、數據接收、情況反饋等6個步驟,如圖2所示。建立任務主要是建立用來驅動傳輸的各項任務及相關信息,即推送目標、推送數據及相關信息。報文檢測是指對源目錄中報文到達情況進行檢測,并將檢測信息存入傳輸狀態數據庫。建硬鏈接即根據傳輸任務的要求,建立新到報文至目標單位的傳輸硬鏈接,建立成功后,將源目錄中相應文件刪除。數據推送是指在完成相應加密、壓縮或其他功能處理后,將數據發送至目標單位接收端主機上。數據接收是利用部署在目標單位的數據接收軟件,將數據接收下來,進行解密、解壓縮或其他功能處理后,存放在相應目標目錄下,以備使用。情況反饋是將文件接收情況、接收檢測和監視信息進行反饋操作,便于本地和數據發送端進行數據傳輸狀態監視。
在整個傳輸流程的各個節段進行監視和錯誤處理,以便及時發現問題,解決問題。

圖2 系統工作流程
3.2.1 建立任務
傳輸任務是傳輸工作的驅動器,指明了傳輸的數據源、目的地、任務的期限、以及需要傳輸數據的種類等信息。一般來講,在任務建立之前,數據源的信息已經確定,在建立任務時只需選取需要的數據種類,然后附加到任務信息中,即可完成任務的構建。而一種數據源確定了一類數據的特征及其傳輸特性,如數據名稱、到報頻度、每一時間段到報量、到報檢測模式(定時、實時)、傳輸模式(加密、壓縮、其他)、傳輸優先級等信息。因此,在建立任務需要涉及到3個方面的信息,數據源信息、目標單位信息和數據與目標單位的關聯信息[5]。由于數據源信息是已有的,因此只需完成目標單位信息和關聯信息的建立工作即可。任務構建完成后,對應各任務的數據傳輸保障目錄之間的關系如圖3所示。

圖3 源、鏈接及目標目錄對應示意圖
3.2.2 報文檢測與建立硬鏈接
文件檢測和建立硬連接會啟動2個進程分別完成,按照各源數據目錄的檢測模式,一個進程進行實時檢測,另一個進程負責定時檢測。為了提高性能,節約時延,在這里采用文件檢測和硬連接建立同時進行的方法,并將建立的硬連接信息直接存入傳輸狀態信息庫。下一步是依據傳輸狀態信息庫來進行數據推送。傳輸狀態信息庫主要包括以下字段:推送目標單位、檢測目標目錄、文件名稱、建立時間、推送次序、傳輸模式、傳輸次數(如果傳輸不成功、會計次重傳輸、三次不成功、報錯)、錯誤代碼(0是不出錯、其他為出錯)、傳輸是否成功、完成傳輸時間。工作流程圖如圖4所示。
系統通過此步驟,完成新增文件向鏈接目標的同步功能,并生成傳輸狀態信息,作為數據推送的依據。為了提高數據庫檢索時效性,傳輸狀態數據庫只保留2天數據量,其余數據按照策略轉移至傳輸狀態歷史數據庫中,傳輸狀態數據庫每個月完成壓縮出庫歸檔一次。

圖4 文件檢測與建硬鏈接流程圖
3.2.3 數據推送、接收和反饋
傳輸狀態數據庫是服務端推送的依據,通過組合查詢傳輸狀態數據庫,找到待傳輸的優先級相同的一批文件,然后進行數據傳輸。查詢策略包含2個,一是查詢時間間隔,主要是根據經驗進行設定;二是查詢組合條件,查詢組合條件為“傳輸未成功+傳輸優先級+未出錯”。傳輸程序采用多線程處理,對于每一類優先級相同的數據推送啟動一個線程,每一個推送線程對所有需要數據推送的目標單位服務,每個線程單獨進行自己的數據檢索和數據推送操作。在數據的推送過程中,優先級主要體現在對不同優先級的推送線程的時間片劃分上。接收端啟動接收線程,進行數據接收,接收后解析出傳輸信息,并根據信息進行功能處理如解密、解壓縮等,以及保存到相應的目錄等。系統的每一批數據推送的起源是一個查詢操作,每一批數據推送完成后,會要求接收端以UDP的方式返回傳輸結果并更新傳輸狀態數據庫和本地數據庫。數據推送、接收和反饋流程如圖5所示。
3.2.4 資料監視和流程監視
資料監視指對特定位置,規定匯集的所有資料是否依各自的時間約束完整抵達。這里限定了資料的特定途經位置,對于單個資料來說,時間和在規定時間內的到報量是重點關注點,預警報警信息主要由這兩元組決定,因此,在展現方式上,使用一維展現資料種類、二維展現時間和到報量屬性[6]。

圖5 數據推送、接收和反饋流程圖
傳輸流程監視是判斷傳輸故障、解決傳輸問題的重要環節。一種資料的傳輸流程是指從傳輸源節點至目的節點的整個過程,可以描述為途經全部位置(或節點主機)的一個有序集合。在表現方式上,使用單向延伸坐標,以單維有序方式表示資料的傳輸流程。傳輸流程監視的一個重點是監視各節點的報文積壓情況,并根據情況產生提示或報警行為。采用監視各傳輸目錄的方法,正常情況下,傳輸目錄中文件數應當為0或者一很小數量,若超過一定限值,則給出提示或報警信號,并給出可能的解決方案,引導保障人員解決傳輸故障和問題。
在對現有傳輸手段缺陷及硬鏈接技術特點進行分析的基礎上,給出了一種基于硬鏈接的氣象水文信息推送系統設計,并利用visual C#語言、ORACLE數據庫完成系統的原型設計與實現。在設計中采用了3層邏輯功能劃分的技術架構、B/S和C/S結合的編程環境,在核心部分采用了多線程、模塊化的設計思想,保證了系統的高效、可靠與穩定。系統與傳統傳輸系統相比,具有傳輸效率高、支持一定的優級控制的特點。對提高氣象水文保障數據的時效性和準確性具有重要的意義,對類似有實時數據推送需求的應用具有一定的借鑒作用。下一步將重點改進傳輸過程中出現錯誤后的反饋和數據補發流程,確保數據傳輸的及時、正確。
[1] 張亞生,王霖.一種基于網絡的通用目錄同步軟件設計方法[J].計算機與網絡,2003,(5).
[2] 尤晉元,張亞英,戚正偉譯.UNIX環境高級編程:第二版[M].北京:人民郵電出版社,2006.
[3] 張婧妍,宋杰,鮑玉斌,等.全國第五次程序設計語言發展與教學會議[C].2006.
[4] 章宗標.一種基于Agent的工作流流程監控模型[J].浙江交通職業技術學院學報,2008,(3).
[5] 曹金山.網絡高效安全數據傳輸方法設計[J].現代電子技術,2010,(20)