卞曉豐
(國家氣象信息中心 北京 100081)
日常的信息系統應用背后,實際就是數據的生產、傳遞和使用的過程,數據已經成為系統建設的重要組成部分和信息化過程中的重要資源。全局范圍來看,應用系統不再只是關注內部數據,而是開始著眼于部門之間的大量數據交換和共享。現實情況是部門間信息系統相互獨立,體系結構、生產廠商、架構設計等都可能存在著差異,而且難以統一。各信息系統上不同計算模型導致各自的數據和文件也存在著差異,這給數據交換和共享帶來了很大的困難。
為了保證數據安全準確的到達,最簡單的方式是搭建專線進行點對點的數據傳輸。但是,當多個系統之間要進行數據交換,如果任意兩個系統之間都是點對點的數據傳輸話,雖然簡單方便,但成本和效率都難以得到保證。同時,在面對異常龐大的數據資源時,隨著數據規模的不斷擴大,特別是大規模小文件的數據應用,對數據傳輸的要求有是相當高的。傳統的數據傳輸和管理方法已接近其能力極限,甚至已經不能滿足需求。因此,迫切需要引進先進的技術和方法,將數據傳輸需要從簡單靜態管理向智能動態管理轉變。采用LDM(Local Data Manager)[1]進行數據傳輸,通過一系列的配置項設定,可以解決復雜情況下的數據采集、獲取、管理及分發等方面的問題,從而較好地實現系統之間的數據傳輸。
本質上,LDM是一種點對點的傳輸軟件。產品隊列是LDM的核心,服務進程是每個LDM部署的總體控制和調度的核心。當與其他LDM部署之間進行通信時,通過LDM的事件觸發機制來控制本地文件的傳輸和存儲的操作。底層的遠程過程調用機制決定了各LDM部署之間是一種服務器/客戶端結構。不同的是,LDM既可以是服務器端,也可以同時是客戶端。數據發送和接收的功能分別通過服務進程的子進程實現(圖1)。一般來說,數據發送進程將數據從產品隊列中讀出,然后將數據或者元數據傳給下游系統。
產品隊列是LDM的核心,以文件形式存在,用于傳輸數據緩存的特殊存儲。從上游接收到的數據、推送和處理的數據、發往下游的數據都將在這暫時存放。在進入傳輸通道之前,數據會被LDM包裝成為數據產品插入產品隊列。數據產品增加了數據的產品標識符、數據的來源類型、用于MD5校驗的16位數字簽名、數據的進入產品隊列時間戳等附加信息。其中,對于數據產品的管理而言,最重要的信息就是數據進入產品隊列的時間戳,當空間不足時,時間戳最久的數據就會被刪除。數字簽名用于保證數據的安全性和唯一性,產品隊列會記錄下所管理的數據產品的16位數字簽名,當數據進入產品隊列的時候,它的數字簽名將會與已在隊列中的數據產品的簽名比對。如果相同,數據就被拋棄;否則,就插入到產品隊列中。

圖1 LDM服務器組成結構
為了實現數據產品的存儲,產品隊列被劃分成若干塊來使用,共分為三種:在用、空閑、未用。一個穩定的產品隊列中有大量的在用塊,少量的空閑塊,而未用塊的數量可多可少。為新的數據產品分配空間時,如果空閑塊中有大小合適的,將多余的空間切割掉后使用;否則,釋放時間戳最久的數據產品,直到有合適大小的塊為止。空閑塊重新進入分配列表時,總是看是否可以和鄰近的區域合并。這種管理機制包含了申請、分配和回收,使產品隊列能夠被高效地使用。
為了方便塊的管理,其組織結構采用是一種叫做跳表[2]的數據結構。跳表是一種基于概率的平衡樹的替代實現方法,無論數據以什么順序輸入,即使是完全遞增,它也可以保持很高的查找效率而不需要任何重構,而且跳表的實現也比平衡二叉樹簡單。
遠程過程調用是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。遠程過程調用假定某傳輸協議(如TCP,UDP)存在,通信程序之間使用該傳輸協議交換信息數據。遠程過程調用使得網絡分布式程序的開發更加容易,LDM的通信方式就是以此為基礎,實現了系統之間的控制信息的傳遞。
一個遠程過程是有三個要素來唯一確定的:程序號、版本號和過程號。程序號是用來區別一組相關的并且具有唯一過程號的遠程過程。一個程序可以有一個或幾個不同的版本,而每個版本的程序都包含一系列能被遠程調用的過程,通過版本的引入,使得不同版本下的遠程過程調用能同時提供服務。每個版本都包含有許多可供遠程調用的過程,每個過程則有其唯一標示的過程號。LDM的程序號為300029,使用388端口。
LDM中定義的常用的遠程過程調用消息有:
(1)FEEDME:下游LDM向上游LDM請求數據產品時發送,消息中包含最大HEREIS大小的信息。
(2)NOTIFYME:下游LDM向上游LDM請求數據產品元數據時發送 。
(3)NOTIFICATION:上游LDM回應NOTIFYME消息,向下游LDM發送數據產品元數據時用。
(4)HEREIS:上游LDM回應FEEDME消息,向下游LDM發送數據產品時用。
(5)COMINGSOON:由上游LDM向它的下游LDM發送。當數據產品大小大于最大HEREIS大小時,詢問下游LDM是否接收相應的數據,如果是,則發出后續的BLKDATA消息 。
(6)BLKDATA:由上游LDM向下游LDM發送,傳送之前元數據已經包含COMINGSOON消息中的數據產品。
(7)HIYA:由上游LDM向下游LDM發送。指定數據產品選擇規范。
(8)IS_ALIVE:由下游LDM向上游LDM發送。下游LDM在60秒未接收到任何消息時發送,確認上游LDM是否還存活。
當數據進入LDM之后,并不是直接發往接收方,而是通過一系列的遠程過程調用控制信息的交換,根據數據的來源類型判斷數據的流向。這增加了安全性,減少了傳輸過程中的數據管理,高效地實現了數據產品的傳送。另外,和傳統的FTP傳輸方式不同,LDM之間的連接不采用用戶名和密碼方式。通常是由下游發起申請,得到上游LDM的同意之后,兩者之間才能夠進行數據傳輸。除此之外,無需繁瑣的人工操作,通過一系列的配置項,LDM就能夠對數據種類、數據的發送和接收進行細粒度的定制。
通過對上下游關系以及數據特征的配置,LDM不僅能夠處理不同來源的數據,還可以讓使用者根據自己的需求選擇的接收的數據。通過鎖機制來實現對產品隊列的競爭訪問,支持多個進程對同一個數據產品的讀操作,LDM支持多數據流傳輸的基礎正在于此。在跨越多個不同的系統或網絡進行多點數據交換傳輸中, LDM可以通過配置實現一對多,或多點連續中繼等數據分發。另外,LDM還支持集群方式部署,通過負載均衡避免數據接收超出單臺服務器能力的情況的出現。
隨著數據的重要性不斷提高,安全的數據交換和共享已經成為信息系統建設中不可忽視的內容。與FTP等傳統的傳輸方式不同,LDM是一款可為應用定制的數據傳輸軟件,經過多年發展已經比較成熟了。通過上下游之間的相互認證以及事件觸發機制,LDM可以在復雜的網絡環境下實現安全的數據傳輸;在跨越多個不同的系統或網絡進行多點數據交換傳輸時,LDM可以通過不同的配置實現一對多,或多點連續中繼等數據分發。LDM以并發多數據流的方式傳輸數據,尤其在交換大量小文件的情況下,為數據傳輸提供較高性能。通過數字簽名校驗,LDM不僅保證傳輸數據的安全,而且解決了數據正確性的問題。
[1] Unidata,Local Data Manager.[EB/OL]. http://www.unidata.ucar.edu/software/ldm/.
[2] Pugh W.Skip lists: a probabilistic alternative to balanced trees[J].Communications of the ACM, 1990, 33(6): 668-676.