黃小平,張明軍,謝蓉蓉
(1. 廣州軟件學院網絡技術系,廣東 廣州 510990;2. 西安石油大學計算機學院,陜西 西安 710065)
信息采集技術的迅猛發展使空間數據量快速增長,因此對數據傳輸提出更高要求。空間數據就是描述空間目標位置、形狀、大小以及分布特征的信息,具有定位、定性等特征。而空間數據的管理形式也從集中式管理發展為利用分布式系統管理海量數據。在分布式系統中,大多通過異步方式實現數據傳輸,該方法對時序要求較低,導致傳輸效率較低。近年來,一些學者研究了同步傳輸方法在空間數據傳輸中的應用。
江渝川[1]等人提出基于似然估計補償機制的數據同步傳輸算法。首先設置分層區域節點-子節點的數據傳輸結構,完成區域節點初始化;利用數據分子雙向交互方式建立似然估計補償機制,同時計算頻率與相位偏移程度;最后對子節點信息進行精確同步。王松明[2]將JESD204B協議的數模轉換器和現場可編程門陣列相結合,確定系統基本結構;分析數據傳輸延時情況,按照同步原理實現接收與發送多通道數據同步傳輸。
以上方法雖然可以實現數據同步傳輸,但是數據傳輸的安全性得不到保障。為此,本文利用線程池技術實現空間數據同步傳輸。線程的概念較為抽象,其涵蓋了一個計算機操作某項任務時所做的全部事件,屬于CPU上調度的程序狀態[3]。線程和進程有很大區別,進程是由代碼、數據和寄存器構成的,而線程則是由表示程序運行狀況的寄存器與棧構成,可以被普通用戶組成的線程庫訪問。由于同步傳輸是通過相同的時鐘節拍來實現數據發送,因此信號源碼之間的位置是固定的,因此必須確定線程池同步數據的時序圖[4],構建統一的時鐘信號,建立收發方的密鑰機制[5],只有這樣才能保證空間數據安全同步傳輸。
空間數據傳輸系統組成結構主要包括客戶、接口服務與儲存四個模塊,每個模塊之間相互協作,共同完成數據傳輸任務。
1)客戶模塊
客戶模塊是空間數據的發送方,位于各監測站臺,由發送與傳輸控制協議[6](Transfer Control Protocol,TCP)加速兩個子模塊構成。發送端主要任務是數據的監視、調度與執行。如果有新的數據信息生成,發送任務會自動添加到發送列表,通過控制器進行調度;TCP子模塊的主要任務是控制數據傳輸速度。
2)接口模塊
接口部分屬于站臺和數據中心的通信接口,規定了訪問控制驗證、文件名更改、文件格式定義等數據傳輸協議。
3)服務模塊
服務模塊是空間數據傳輸的接收方,包括監聽器、接收器、文件池、控制器與數據處理引擎等設備。其中監聽器收到訪問請求后,將任務分配給接收器;接收器負責數據接收,并將數據存放到文件池;控制器為處理引擎分配相應任務;處理引擎則對文件池中的數據做解析處理。
4)儲存模塊
數據儲存方法包括兩種,二進制[7]與圖片類型的數據通過文件形式保存到服務器中;記錄類的數據利用數據庫表的方式儲存。
空間數據有助于相關人員了解空間環境,對保障空間安全具有重要意義。空間業務預報必須以大量的、真實的、多維數據為支撐,因此對數據傳輸過程提出如下要求。
1)空間數據傳輸必須滿足穩定性需求,因此要求始終保持7×24小時穩定傳輸。
2)不僅需要在較短時間內傳輸海量數據,還要確保較高的發送速度,避免數據堆積。
3)針對數據發送端,傳輸中斷后可以自動補發數據;對于接收端,需保證數據完整程度。
為滿足上述要求,確定空間數據傳輸的基本過程如圖1所示。

圖1 空間數據傳輸過程示意圖
基于上述對數據傳輸系統工作過程的分析,要想實現數據的同步傳輸,需引入線程池技術。線程處理最普遍的用例就是用戶界面,利用線程,用戶通過按鈕啟動程序,而并非讓用戶等待到任務結束后再響應。將線程池在數據同步傳輸中的使用共分為以下四個邏輯單元:
1)主線程
主線程首先需要完成任務類、線程管理類的構造與實例化,做好全部環境準備。為確保處理速度,再從數據庫中挑選出適量的數據進行處理,并將這些任務引入到隊列中。至此主線程任務結束,等待線程池并發處理,當獲得完成通知后重新挑選一定數量任務處理,直到全部同步傳輸任務均實現。
在主線程退出操作時,必須釋放各類目標以便安全退出。
2)管理線程
管理線程并不是程序中單獨的線程,在該類中,其關鍵技術是需要構建并同時啟動N個工作線程。為便于線程做單獨處理,這些線程需利用同一個目標對其保存,例如某些變量賦值、暫停與啟動線程等。
3)工作線程
工作線程即任務處理模塊,主要執行的任務主要包括從隊列中獲取某項任務、結合任務項從數據庫中獲得初始數據、形成制定格式語句[8]、按照處理結果返寫標志四項內容。
4)查詢線程
主線程創造了查詢線程,但在創建后必須等待主線程的喚醒成功后才能執行,其主要任務為持續探測任務數量。查詢線程有助于確定任務處理進度,同時將處理情況通知主線程。如果得知全部任務均已完成,主線程會發出完成標志。
確定線程池具備的四個邏輯單元后,需要進一步分析這些單元的處理邏輯時序。
1)線程池線路數量
對于線程池數量,通常情況下的計算公式為
N=ηCPU*2+2
(1)
其中,ηCPU為CPU數量。由式(1)可知,線程數量取決于CPU數量。在本文中,為充分使用數據庫讀寫時間,工作線程將在數據庫中反復讀寫,以達到并發處理目的。
2)任務列表同步
在數據同步傳輸過程中可能會遇到如下問題,隊列中的任務存在亂碼現象,和理想情況不同導致程序報錯。此種現象由于主線程與工作線程同時挑選隊列任務造成的。因此本文利用臨界區域技術,將兩個線程操作放入相同過程中讀寫。臨界區為某段獨占共享資源的訪問代碼,無論在任何時刻都只允許一個線程訪問共享資源。若存在多個資源同時訪問,則會有一個線程被掛起,直到進入臨界區的線程離開。這樣可以不僅保證隊列安全,應用程序也會減少出錯。
3)主線程進度獲取
主線程需要隨時了解已知任務的進展情況,但是若利用主線程直接監測,通常會導致主進程鎖死。因此通過查詢線程監測進度,并將監測情況報告給主程序。詳細過程為:預定一個信息,主線程會對該消息做出反應,并且定義某個單獨計數器,當任務實現后計數器數值加1。通過比較計數器和任務數量來判斷任務進程,當計數器與任務數量相同時則表示該任務已完成。
圖2表述了線程池處理邏輯的時序圖。

圖2 線性池數據同步時序圖
利用線性池方法確定同步傳輸的時序后,為了使同步傳輸更加安全可靠,本文使用基于馬爾可夫決策過程的空間數據加密同步算法實現數據同步傳輸。
3.3.1 同步傳輸動態路徑獲取
在對空間數據同步傳輸過程中,需綜合分析時延與丟包率[9]對吞吐量造成的影響,結合最佳策略選取不同路徑進行數據傳輸,具體實現過程如下。


(2)

(3)


(4)

2)在傳輸路徑k上如果出現丟失狀況,則k中擁塞窗口cwk會減少到cwk/2;

(5)


(6)


(7)

(8)
在狀態i時選擇不同行動后的理想吞吐量表示反饋,理想吞吐量即為數據同步傳輸路徑的吞吐量,根據吞吐量情況選擇最佳傳輸路徑。
3.3.2 同步傳輸
將數據密鑰協商和同步傳輸相結合,使通信雙方彼此構成的密鑰協商數據進行分片,同時為每個分片加上時間戳,通過私鑰對數據內容簽名[10],完成全部數據的分片后利用上述選擇的最佳路徑傳輸空間數據,這樣不但可以保證傳輸的同步性,還提高了數據傳輸安全性。詳細過程如下:
假設通信雙方A與B通過某條傳輸路徑已經得到密鑰協商的公用參數p與g。則密鑰協商過程如下:


(9)
在所選的路徑上向B傳輸空間數據

(10)
式中,m′為數據傳輸的分片總量,Tai為每一條路徑的時間戳,可避免數據同步傳輸過程中受到攻擊,SA代表A的私鑰,ESA(kai,Tai,m′)描述A利用自身私鑰SA對數據進行簽名,以便接收方可以及時認證消息。B按照和A相似的過程進行同步數據傳輸加密分片:


(11)
在所選擇的同步傳輸路徑上向A傳輸如下數據

(12)
當通信方Tbi接收到數據Mj后,根據隨機數kb和Tbi判斷數據是否重放,如果重放則直接去除,反之通過對方公鑰進行簽名核實。則發送發A傳輸空間數據的流程如下。
發送方A采用數據密鑰Ka,b加密需要傳輸的數據,假設需發送的空間數據包為M′,C=EKab(M)代表經過加密處理的數據密文,A將密文C分解為n″個子數據包,同時對數據包添加會話序號seq、塊標識i′與時間戳Ti′,則

(13)
接收方B接收數據流程為,B接收到數據后,按照認證碼對空間數據進行認證,通過認證后根據塊標識對數據包做解碼處理,恢復明文數據包,實現數據同步且安全傳輸。
為證明所提傳輸方法的有效性,在如圖3所示的拓撲網絡中進行仿真。實驗參數如表1所示。

圖3 仿真拓撲結構圖

表1 實驗參數表
將大小不同的數據通過本文方法、文獻[1]、文獻[2]方法進行同步傳輸,記錄每次傳輸的時間,測試結果如表2所示。

表2 不同方法數據同步傳輸所需時間記錄表
由表2可知,當空間數據小于5kB時,三種方法同步傳輸所需時間均相同,沒有出現明顯差異。但隨著數據量的不斷增大,本文方法的傳輸速率優勢較為明顯,當空間數據達到200kB時,本文方法的傳輸時間為58.12×10-3s,而文獻[1]方法和文獻[2]方法分別為61.34×10-3s和67.23×10-3s。這是因為基于線程池技術的傳輸時序圖發揮出重要作用,具有較強的處理邏輯可以減少同步傳輸時間。此外為證明不同方法的傳輸安全性能,對累計傳輸錯誤率進行對比試驗,試驗結果如圖4所示。

圖4 不同方法同步傳輸累計錯誤率
由圖4可知,本文方法的累計錯誤率最低,最高為數據140kB時的0.12%,比文獻[1]方法和文獻[2]方法在數據140kB時的0.18%和0.3%累計錯誤率更低。這是因為本文在傳輸過程中加入密鑰機制,可以有效保證數據安全性,減少錯誤傳輸概率。
為滿足空間數據傳輸對速度與安全性的要求,本文將線程池技術與基于馬爾可夫的空間數據加密算法相結合,設計一種同步傳輸方法。
1)該方法對于不同大小的空間數據均能快速傳輸,當空間數據達到200kB時,本文方法的傳輸時間為58.12×10-3s。
2)本文方法的累計錯誤率最低,最高為數據140kB時的0.12%,相較于對比方法累計錯誤率更低,更能保障數據安全。
3)雖然線程池技術擁有強大的處理能力,但是也存在一定風險,其應用程序容易受到其它多線程的破壞,導致死鎖。當處理較長時間的并發任務時,還需改善其性能,使其具有更加廣闊的應用前景。