黃小平,張明軍,謝蓉蓉
(1. 廣州軟件學(xué)院網(wǎng)絡(luò)技術(shù)系,廣東 廣州 510990;2. 西安石油大學(xué)計算機(jī)學(xué)院,陜西 西安 710065)
信息采集技術(shù)的迅猛發(fā)展使空間數(shù)據(jù)量快速增長,因此對數(shù)據(jù)傳輸提出更高要求。空間數(shù)據(jù)就是描述空間目標(biāo)位置、形狀、大小以及分布特征的信息,具有定位、定性等特征。而空間數(shù)據(jù)的管理形式也從集中式管理發(fā)展為利用分布式系統(tǒng)管理海量數(shù)據(jù)。在分布式系統(tǒng)中,大多通過異步方式實現(xiàn)數(shù)據(jù)傳輸,該方法對時序要求較低,導(dǎo)致傳輸效率較低。近年來,一些學(xué)者研究了同步傳輸方法在空間數(shù)據(jù)傳輸中的應(yīng)用。
江渝川[1]等人提出基于似然估計補(bǔ)償機(jī)制的數(shù)據(jù)同步傳輸算法。首先設(shè)置分層區(qū)域節(jié)點-子節(jié)點的數(shù)據(jù)傳輸結(jié)構(gòu),完成區(qū)域節(jié)點初始化;利用數(shù)據(jù)分子雙向交互方式建立似然估計補(bǔ)償機(jī)制,同時計算頻率與相位偏移程度;最后對子節(jié)點信息進(jìn)行精確同步。王松明[2]將JESD204B協(xié)議的數(shù)模轉(zhuǎn)換器和現(xiàn)場可編程門陣列相結(jié)合,確定系統(tǒng)基本結(jié)構(gòu);分析數(shù)據(jù)傳輸延時情況,按照同步原理實現(xiàn)接收與發(fā)送多通道數(shù)據(jù)同步傳輸。
以上方法雖然可以實現(xiàn)數(shù)據(jù)同步傳輸,但是數(shù)據(jù)傳輸?shù)陌踩缘貌坏奖U?。為此,本文利用線程池技術(shù)實現(xiàn)空間數(shù)據(jù)同步傳輸。線程的概念較為抽象,其涵蓋了一個計算機(jī)操作某項任務(wù)時所做的全部事件,屬于CPU上調(diào)度的程序狀態(tài)[3]。線程和進(jìn)程有很大區(qū)別,進(jìn)程是由代碼、數(shù)據(jù)和寄存器構(gòu)成的,而線程則是由表示程序運行狀況的寄存器與棧構(gòu)成,可以被普通用戶組成的線程庫訪問。由于同步傳輸是通過相同的時鐘節(jié)拍來實現(xiàn)數(shù)據(jù)發(fā)送,因此信號源碼之間的位置是固定的,因此必須確定線程池同步數(shù)據(jù)的時序圖[4],構(gòu)建統(tǒng)一的時鐘信號,建立收發(fā)方的密鑰機(jī)制[5],只有這樣才能保證空間數(shù)據(jù)安全同步傳輸。
空間數(shù)據(jù)傳輸系統(tǒng)組成結(jié)構(gòu)主要包括客戶、接口服務(wù)與儲存四個模塊,每個模塊之間相互協(xié)作,共同完成數(shù)據(jù)傳輸任務(wù)。
1)客戶模塊
客戶模塊是空間數(shù)據(jù)的發(fā)送方,位于各監(jiān)測站臺,由發(fā)送與傳輸控制協(xié)議[6](Transfer Control Protocol,TCP)加速兩個子模塊構(gòu)成。發(fā)送端主要任務(wù)是數(shù)據(jù)的監(jiān)視、調(diào)度與執(zhí)行。如果有新的數(shù)據(jù)信息生成,發(fā)送任務(wù)會自動添加到發(fā)送列表,通過控制器進(jìn)行調(diào)度;TCP子模塊的主要任務(wù)是控制數(shù)據(jù)傳輸速度。
2)接口模塊
接口部分屬于站臺和數(shù)據(jù)中心的通信接口,規(guī)定了訪問控制驗證、文件名更改、文件格式定義等數(shù)據(jù)傳輸協(xié)議。
3)服務(wù)模塊
服務(wù)模塊是空間數(shù)據(jù)傳輸?shù)慕邮辗?,包括監(jiān)聽器、接收器、文件池、控制器與數(shù)據(jù)處理引擎等設(shè)備。其中監(jiān)聽器收到訪問請求后,將任務(wù)分配給接收器;接收器負(fù)責(zé)數(shù)據(jù)接收,并將數(shù)據(jù)存放到文件池;控制器為處理引擎分配相應(yīng)任務(wù);處理引擎則對文件池中的數(shù)據(jù)做解析處理。
4)儲存模塊
數(shù)據(jù)儲存方法包括兩種,二進(jìn)制[7]與圖片類型的數(shù)據(jù)通過文件形式保存到服務(wù)器中;記錄類的數(shù)據(jù)利用數(shù)據(jù)庫表的方式儲存。
空間數(shù)據(jù)有助于相關(guān)人員了解空間環(huán)境,對保障空間安全具有重要意義??臻g業(yè)務(wù)預(yù)報必須以大量的、真實的、多維數(shù)據(jù)為支撐,因此對數(shù)據(jù)傳輸過程提出如下要求。
1)空間數(shù)據(jù)傳輸必須滿足穩(wěn)定性需求,因此要求始終保持7×24小時穩(wěn)定傳輸。
2)不僅需要在較短時間內(nèi)傳輸海量數(shù)據(jù),還要確保較高的發(fā)送速度,避免數(shù)據(jù)堆積。
3)針對數(shù)據(jù)發(fā)送端,傳輸中斷后可以自動補(bǔ)發(fā)數(shù)據(jù);對于接收端,需保證數(shù)據(jù)完整程度。
為滿足上述要求,確定空間數(shù)據(jù)傳輸?shù)幕具^程如圖1所示。
圖1 空間數(shù)據(jù)傳輸過程示意圖
基于上述對數(shù)據(jù)傳輸系統(tǒng)工作過程的分析,要想實現(xiàn)數(shù)據(jù)的同步傳輸,需引入線程池技術(shù)。線程處理最普遍的用例就是用戶界面,利用線程,用戶通過按鈕啟動程序,而并非讓用戶等待到任務(wù)結(jié)束后再響應(yīng)。將線程池在數(shù)據(jù)同步傳輸中的使用共分為以下四個邏輯單元:
1)主線程
主線程首先需要完成任務(wù)類、線程管理類的構(gòu)造與實例化,做好全部環(huán)境準(zhǔn)備。為確保處理速度,再從數(shù)據(jù)庫中挑選出適量的數(shù)據(jù)進(jìn)行處理,并將這些任務(wù)引入到隊列中。至此主線程任務(wù)結(jié)束,等待線程池并發(fā)處理,當(dāng)獲得完成通知后重新挑選一定數(shù)量任務(wù)處理,直到全部同步傳輸任務(wù)均實現(xiàn)。
在主線程退出操作時,必須釋放各類目標(biāo)以便安全退出。
2)管理線程
管理線程并不是程序中單獨的線程,在該類中,其關(guān)鍵技術(shù)是需要構(gòu)建并同時啟動N個工作線程。為便于線程做單獨處理,這些線程需利用同一個目標(biāo)對其保存,例如某些變量賦值、暫停與啟動線程等。
3)工作線程
工作線程即任務(wù)處理模塊,主要執(zhí)行的任務(wù)主要包括從隊列中獲取某項任務(wù)、結(jié)合任務(wù)項從數(shù)據(jù)庫中獲得初始數(shù)據(jù)、形成制定格式語句[8]、按照處理結(jié)果返寫標(biāo)志四項內(nèi)容。
4)查詢線程
主線程創(chuàng)造了查詢線程,但在創(chuàng)建后必須等待主線程的喚醒成功后才能執(zhí)行,其主要任務(wù)為持續(xù)探測任務(wù)數(shù)量。查詢線程有助于確定任務(wù)處理進(jìn)度,同時將處理情況通知主線程。如果得知全部任務(wù)均已完成,主線程會發(fā)出完成標(biāo)志。
確定線程池具備的四個邏輯單元后,需要進(jìn)一步分析這些單元的處理邏輯時序。
1)線程池線路數(shù)量
對于線程池數(shù)量,通常情況下的計算公式為
N=ηCPU*2+2
(1)
其中,ηCPU為CPU數(shù)量。由式(1)可知,線程數(shù)量取決于CPU數(shù)量。在本文中,為充分使用數(shù)據(jù)庫讀寫時間,工作線程將在數(shù)據(jù)庫中反復(fù)讀寫,以達(dá)到并發(fā)處理目的。
2)任務(wù)列表同步
在數(shù)據(jù)同步傳輸過程中可能會遇到如下問題,隊列中的任務(wù)存在亂碼現(xiàn)象,和理想情況不同導(dǎo)致程序報錯。此種現(xiàn)象由于主線程與工作線程同時挑選隊列任務(wù)造成的。因此本文利用臨界區(qū)域技術(shù),將兩個線程操作放入相同過程中讀寫。臨界區(qū)為某段獨占共享資源的訪問代碼,無論在任何時刻都只允許一個線程訪問共享資源。若存在多個資源同時訪問,則會有一個線程被掛起,直到進(jìn)入臨界區(qū)的線程離開。這樣可以不僅保證隊列安全,應(yīng)用程序也會減少出錯。
3)主線程進(jìn)度獲取
主線程需要隨時了解已知任務(wù)的進(jìn)展情況,但是若利用主線程直接監(jiān)測,通常會導(dǎo)致主進(jìn)程鎖死。因此通過查詢線程監(jiān)測進(jìn)度,并將監(jiān)測情況報告給主程序。詳細(xì)過程為:預(yù)定一個信息,主線程會對該消息做出反應(yīng),并且定義某個單獨計數(shù)器,當(dāng)任務(wù)實現(xiàn)后計數(shù)器數(shù)值加1。通過比較計數(shù)器和任務(wù)數(shù)量來判斷任務(wù)進(jìn)程,當(dāng)計數(shù)器與任務(wù)數(shù)量相同時則表示該任務(wù)已完成。
圖2表述了線程池處理邏輯的時序圖。
圖2 線性池數(shù)據(jù)同步時序圖
利用線性池方法確定同步傳輸?shù)臅r序后,為了使同步傳輸更加安全可靠,本文使用基于馬爾可夫決策過程的空間數(shù)據(jù)加密同步算法實現(xiàn)數(shù)據(jù)同步傳輸。
3.3.1 同步傳輸動態(tài)路徑獲取
在對空間數(shù)據(jù)同步傳輸過程中,需綜合分析時延與丟包率[9]對吞吐量造成的影響,結(jié)合最佳策略選取不同路徑進(jìn)行數(shù)據(jù)傳輸,具體實現(xiàn)過程如下。
(2)
(3)
(4)
2)在傳輸路徑k上如果出現(xiàn)丟失狀況,則k中擁塞窗口cwk會減少到cwk/2;
(5)
(6)
(7)
(8)
在狀態(tài)i時選擇不同行動后的理想吞吐量表示反饋,理想吞吐量即為數(shù)據(jù)同步傳輸路徑的吞吐量,根據(jù)吞吐量情況選擇最佳傳輸路徑。
3.3.2 同步傳輸
將數(shù)據(jù)密鑰協(xié)商和同步傳輸相結(jié)合,使通信雙方彼此構(gòu)成的密鑰協(xié)商數(shù)據(jù)進(jìn)行分片,同時為每個分片加上時間戳,通過私鑰對數(shù)據(jù)內(nèi)容簽名[10],完成全部數(shù)據(jù)的分片后利用上述選擇的最佳路徑傳輸空間數(shù)據(jù),這樣不但可以保證傳輸?shù)耐叫?,還提高了數(shù)據(jù)傳輸安全性。詳細(xì)過程如下:
假設(shè)通信雙方A與B通過某條傳輸路徑已經(jīng)得到密鑰協(xié)商的公用參數(shù)p與g。則密鑰協(xié)商過程如下:
(9)
在所選的路徑上向B傳輸空間數(shù)據(jù)
(10)
式中,m′為數(shù)據(jù)傳輸?shù)姆制偭?,Tai為每一條路徑的時間戳,可避免數(shù)據(jù)同步傳輸過程中受到攻擊,SA代表A的私鑰,ESA(kai,Tai,m′)描述A利用自身私鑰SA對數(shù)據(jù)進(jìn)行簽名,以便接收方可以及時認(rèn)證消息。B按照和A相似的過程進(jìn)行同步數(shù)據(jù)傳輸加密分片:
(11)
在所選擇的同步傳輸路徑上向A傳輸如下數(shù)據(jù)
(12)
當(dāng)通信方Tbi接收到數(shù)據(jù)Mj后,根據(jù)隨機(jī)數(shù)kb和Tbi判斷數(shù)據(jù)是否重放,如果重放則直接去除,反之通過對方公鑰進(jìn)行簽名核實。則發(fā)送發(fā)A傳輸空間數(shù)據(jù)的流程如下。
發(fā)送方A采用數(shù)據(jù)密鑰Ka,b加密需要傳輸?shù)臄?shù)據(jù),假設(shè)需發(fā)送的空間數(shù)據(jù)包為M′,C=EKab(M)代表經(jīng)過加密處理的數(shù)據(jù)密文,A將密文C分解為n″個子數(shù)據(jù)包,同時對數(shù)據(jù)包添加會話序號seq、塊標(biāo)識i′與時間戳Ti′,則
(13)
接收方B接收數(shù)據(jù)流程為,B接收到數(shù)據(jù)后,按照認(rèn)證碼對空間數(shù)據(jù)進(jìn)行認(rèn)證,通過認(rèn)證后根據(jù)塊標(biāo)識對數(shù)據(jù)包做解碼處理,恢復(fù)明文數(shù)據(jù)包,實現(xiàn)數(shù)據(jù)同步且安全傳輸。
為證明所提傳輸方法的有效性,在如圖3所示的拓?fù)渚W(wǎng)絡(luò)中進(jìn)行仿真。實驗參數(shù)如表1所示。
圖3 仿真拓?fù)浣Y(jié)構(gòu)圖
表1 實驗參數(shù)表
將大小不同的數(shù)據(jù)通過本文方法、文獻(xiàn)[1]、文獻(xiàn)[2]方法進(jìn)行同步傳輸,記錄每次傳輸?shù)臅r間,測試結(jié)果如表2所示。
表2 不同方法數(shù)據(jù)同步傳輸所需時間記錄表
由表2可知,當(dāng)空間數(shù)據(jù)小于5kB時,三種方法同步傳輸所需時間均相同,沒有出現(xiàn)明顯差異。但隨著數(shù)據(jù)量的不斷增大,本文方法的傳輸速率優(yōu)勢較為明顯,當(dāng)空間數(shù)據(jù)達(dá)到200kB時,本文方法的傳輸時間為58.12×10-3s,而文獻(xiàn)[1]方法和文獻(xiàn)[2]方法分別為61.34×10-3s和67.23×10-3s。這是因為基于線程池技術(shù)的傳輸時序圖發(fā)揮出重要作用,具有較強(qiáng)的處理邏輯可以減少同步傳輸時間。此外為證明不同方法的傳輸安全性能,對累計傳輸錯誤率進(jìn)行對比試驗,試驗結(jié)果如圖4所示。
圖4 不同方法同步傳輸累計錯誤率
由圖4可知,本文方法的累計錯誤率最低,最高為數(shù)據(jù)140kB時的0.12%,比文獻(xiàn)[1]方法和文獻(xiàn)[2]方法在數(shù)據(jù)140kB時的0.18%和0.3%累計錯誤率更低。這是因為本文在傳輸過程中加入密鑰機(jī)制,可以有效保證數(shù)據(jù)安全性,減少錯誤傳輸概率。
為滿足空間數(shù)據(jù)傳輸對速度與安全性的要求,本文將線程池技術(shù)與基于馬爾可夫的空間數(shù)據(jù)加密算法相結(jié)合,設(shè)計一種同步傳輸方法。
1)該方法對于不同大小的空間數(shù)據(jù)均能快速傳輸,當(dāng)空間數(shù)據(jù)達(dá)到200kB時,本文方法的傳輸時間為58.12×10-3s。
2)本文方法的累計錯誤率最低,最高為數(shù)據(jù)140kB時的0.12%,相較于對比方法累計錯誤率更低,更能保障數(shù)據(jù)安全。
3)雖然線程池技術(shù)擁有強(qiáng)大的處理能力,但是也存在一定風(fēng)險,其應(yīng)用程序容易受到其它多線程的破壞,導(dǎo)致死鎖。當(dāng)處理較長時間的并發(fā)任務(wù)時,還需改善其性能,使其具有更加廣闊的應(yīng)用前景。