梁任綱, 何 倩,2, 劉 鵬, 蔣 明
(1.桂林電子科技大學(xué) 衛(wèi)星導(dǎo)航定位與位置服務(wù)國家地方聯(lián)合工程研究中心,廣西 桂林 541004;2.桂林電子科技大學(xué) 廣西密碼學(xué)與信息安全重點實驗室,廣西 桂林 541004)
在萬物互聯(lián)時代,隨著信息與通信技術(shù)的飛快發(fā)展,物聯(lián)網(wǎng)應(yīng)用的規(guī)模變得越來越龐大[1]。截至2021年,物聯(lián)網(wǎng)中的服務(wù)設(shè)備數(shù)量預(yù)測將超過400億,由物聯(lián)網(wǎng)服務(wù)設(shè)備產(chǎn)生的數(shù)據(jù)流量呈現(xiàn)爆炸式的增長趨勢,基于傳統(tǒng)的云計算模型處理海量多源異構(gòu)數(shù)據(jù)存在網(wǎng)絡(luò)帶寬受限、計算資源受限、高時延和隱私數(shù)據(jù)泄露等安全問題,以網(wǎng)絡(luò)邊緣設(shè)備為核心的邊緣計算模型應(yīng)運而生。
邊緣計算因為高計算能力和靠近用戶群體從而就近處理,可減少網(wǎng)絡(luò)堵塞、提高網(wǎng)絡(luò)的傳輸速率,最終降低網(wǎng)絡(luò)時延,即時響應(yīng)用戶請求,明顯提高用戶的使用體驗,使邊緣計算在各行各業(yè)的應(yīng)用中呈現(xiàn)出“病毒式”傳播的趨勢,物聯(lián)網(wǎng)應(yīng)用中的邊緣節(jié)點數(shù)量也變的越來越多。邊緣計算和人工智能的有力結(jié)合形成邊緣智能[2],為在邊緣智能中提供更優(yōu)質(zhì)的智能服務(wù),讓跨域的邊緣節(jié)點收斂于相同的模型參數(shù),邊緣節(jié)點之間的模型同步共享不可或缺。例如,市場經(jīng)濟(jì)規(guī)模早已突破百億大關(guān)的短視頻抖音平臺2021年數(shù)據(jù)用戶預(yù)計將達(dá)到7億,僅僅依靠傳統(tǒng)的云存儲方式不能即時響應(yīng)巨大的用戶服務(wù)請求,云邊結(jié)合更加具有優(yōu)勢,為了使抖音短視頻的推薦更具有針對性,在多邊緣節(jié)點之間進(jìn)行熱門短視頻、個性化推薦模型的更新和同步必不可少。綜上所述,打通數(shù)據(jù)孤島,實現(xiàn)跨域邊緣節(jié)點之間的可信數(shù)據(jù)同步至關(guān)重要。
現(xiàn)階段存在多種數(shù)據(jù)同步工具,如Rsync、Syncany、Hadoop等[3-5],但是現(xiàn)有的邊緣服務(wù)應(yīng)用對數(shù)據(jù)同步提出了更高的要求,傳統(tǒng)的數(shù)據(jù)同步工具已無法滿足,例如不能實現(xiàn)一對多的數(shù)據(jù)同步、同步過程中傳輸大量的冗余數(shù)據(jù)、同步過程缺少可信監(jiān)管和存在安全隱患、無法跨平臺數(shù)據(jù)同步和無可視化界面進(jìn)行數(shù)據(jù)同步的控制和管理等。因此,跨域邊緣節(jié)點之間便捷、有效、可信的數(shù)據(jù)同步是當(dāng)前亟需解決的問題。
區(qū)塊鏈作為近年來的新興技術(shù)之一,本質(zhì)上是分布式數(shù)據(jù)庫,沒有集中式數(shù)據(jù)庫存在的單點故障問題,并且區(qū)塊鏈不可篡改、可溯源的特性可以為鏈上數(shù)據(jù)進(jìn)行強(qiáng)有力的背書,區(qū)塊鏈還具有匿名性,在傳輸信息時不需要披露或驗證身份信息,具有高安全性。
面向跨域的可信數(shù)據(jù)同步,提出一個基于區(qū)塊鏈和Rsync的可信數(shù)據(jù)同步機(jī)制,主要貢獻(xiàn)有:
1)針對跨域邊緣節(jié)點的可信數(shù)據(jù)同步需求,引入去中心化、不可篡改、可溯源的區(qū)塊鏈技術(shù)為邊緣節(jié)點之間的數(shù)據(jù)同步提供可信環(huán)境,并且設(shè)計了基于區(qū)塊鏈的可信數(shù)據(jù)同步模型架構(gòu);
2)針對傳統(tǒng)數(shù)據(jù)同步存在大量冗余數(shù)據(jù)傳輸問題,基于Rsync算法實現(xiàn)跨域的數(shù)據(jù)同步,可提高跨域邊緣節(jié)點之間數(shù)據(jù)同步的效率和邊緣網(wǎng)絡(luò)帶寬的利用率;
3)針對傳統(tǒng)數(shù)據(jù)同步過程缺乏可信監(jiān)管等問題,基于區(qū)塊鏈實現(xiàn)數(shù)據(jù)同步監(jiān)控與溯源,將服務(wù)接口調(diào)用日志和數(shù)據(jù)同步信息存儲至區(qū)塊鏈中進(jìn)行溯源,可提高跨域邊緣節(jié)點之間數(shù)據(jù)同步的安全性和可靠性;
4)以跨域邊緣節(jié)點的可信數(shù)據(jù)同步需求為背景,基于Hyperledger Fabric平臺實現(xiàn)了提出的可信數(shù)據(jù)同步系統(tǒng),實驗結(jié)果表明,該數(shù)據(jù)同步系統(tǒng)安全有效,目前該系統(tǒng)已經(jīng)實地部署并應(yīng)用。
無論是最開始的文件與文件同步、物理機(jī)與物理機(jī)之間的同步,還是服務(wù)器與服務(wù)器之間的同步,學(xué)者對于數(shù)據(jù)同步的研究從未間斷。隨著物聯(lián)網(wǎng)應(yīng)用的飛速發(fā)展,跨域邊緣節(jié)點之間的數(shù)據(jù)同步再次得到越來越多的關(guān)注。文獻(xiàn)[6]是文件同步的較早研究,它在2004年討論了文件同步器的正式規(guī)范和參考實現(xiàn)模型?;赗sync的文件同步由Yan[7]等和Gupta, Sagar[8]開發(fā),他們研究的重點是通過提供單循環(huán)消息傳遞技術(shù),而不是多消息傳遞技術(shù)來提高Rsync的性能。針對分布在多個設(shè)備上的文件同步需求,文獻(xiàn)[9]提出了一種基于云的同步方法,它可以有效同步任意數(shù)量的分布式文件系統(tǒng),該方法保持了點對點同步和基于云的主副本方法的優(yōu)點,但是它不假定任何文件數(shù)據(jù)存儲在云中,解決了容量、成本、安全和隱私問題。此外,以點對點的方式執(zhí)行數(shù)據(jù)同步,消除了“云主從復(fù)制”方法中出現(xiàn)的成本和帶寬問題,但是系統(tǒng)原型并沒有提供實現(xiàn)細(xì)節(jié)或評估結(jié)果。Fatih作為土耳其最重要的教育項目之一,師生通過教學(xué)設(shè)備獲取存儲在云服務(wù)器上的教育數(shù)據(jù),因為網(wǎng)絡(luò)帶寬限制、用戶數(shù)量和數(shù)據(jù)流量的劇增導(dǎo)致Fatih性能降低,針對該問題,文獻(xiàn)[10]通過引入代理服務(wù)器減少網(wǎng)絡(luò)流量和云終端之間的數(shù)據(jù)傳輸速率,針對代理服務(wù)器之間的同步問題,該文獻(xiàn)回顧并比較了SyncML、Rsync和CouchDB等分布式文件同步方法在代理服務(wù)器之間應(yīng)用的可行性,并對SyncML和CouchDB方法在樣本教育數(shù)據(jù)上的有效性進(jìn)行了測試。文獻(xiàn)[11]實現(xiàn)了一種名為Granary的分布式存儲系統(tǒng),Granary通過DHT層來存儲文件元數(shù)據(jù)并具備可信賴的數(shù)據(jù)共享功能。文獻(xiàn)[12]提出了一種名為RAM的高吞吐量無哈希分塊方法,在CDC中,RAM不使用散列,而使用字節(jié)值聲明切點。針對云存儲用戶設(shè)備轉(zhuǎn)移時,設(shè)備數(shù)據(jù)的自動和連續(xù)地同步和云存儲用戶之間數(shù)據(jù)共享需求,文獻(xiàn)[13]提出了同步數(shù)據(jù)協(xié)議及其相關(guān)的體系結(jié)構(gòu),以減少跨設(shè)備之間的文件同步時間,確保文件同步的高質(zhì)量和最小的資源消耗。文獻(xiàn)[14]作為一篇綜述性論文,介紹了文件同步和共享在云存儲科學(xué)、教育和研究中的應(yīng)用,并對云存儲同步理論的研究進(jìn)行了論述。針對Kettle、Sqoop等開源同步工具將歷史數(shù)據(jù)、實時增量等數(shù)據(jù)同步至Hive倉庫過程中存在的操作復(fù)雜、延遲高、文件安全性低等問題,文獻(xiàn)[15]搭建了一個異構(gòu)數(shù)據(jù)同步系統(tǒng),不僅實現(xiàn)了功能且對大數(shù)據(jù)同步平臺的建設(shè)具有借鑒作用。針對商城與分銷業(yè)務(wù)系統(tǒng)間存在的數(shù)據(jù)同步高成本和不可靠等問題,文獻(xiàn)[16]基于SOA的思想實現(xiàn)了數(shù)據(jù)同步系統(tǒng)且已被實施應(yīng)用。針對各級指揮系統(tǒng)的數(shù)據(jù)同步需求,文獻(xiàn)[17]提出并實現(xiàn)了一種基于Oracle Logminer的數(shù)據(jù)同步技術(shù),該技術(shù)簡便、高效且安全可靠,具備很高的實用價值,但是其只針對不同系統(tǒng)的數(shù)據(jù)庫表。
去中心化的區(qū)塊鏈由對等方共同維護(hù)賬本,通過密碼學(xué)等技術(shù)確保區(qū)塊鏈上的賬本信息不輕易被對等方篡改,從而為對等節(jié)點建立信任,并利用腳本語言或者智能合約自動執(zhí)行繁雜的邏輯操作,其對解決安全問題具有現(xiàn)實意義。為解決文件同步性能、高可用性、安全性、驗證方便等存在的問題,研究者將數(shù)據(jù)同步和具有去中心化、可溯源、分布式數(shù)據(jù)庫特性的區(qū)塊鏈結(jié)合,文獻(xiàn)[18]利用區(qū)塊鏈和Rsync算法實現(xiàn)數(shù)據(jù)同步,直接將文件非匹配數(shù)據(jù)上傳至區(qū)塊鏈,區(qū)塊鏈節(jié)點下載非匹配數(shù)據(jù)并進(jìn)行拼接,最終實現(xiàn)各節(jié)點的數(shù)據(jù)同步,但由于區(qū)塊存儲數(shù)據(jù)有限,當(dāng)文件非匹配數(shù)據(jù)過大時,區(qū)塊鏈存儲的區(qū)塊過多,導(dǎo)致節(jié)點之間數(shù)據(jù)同步效率降低、區(qū)塊鏈節(jié)點的存儲壓力和成本提高。文獻(xiàn)[19]提出了一種創(chuàng)新的文件夾和文件同步模型:ChainFileSynch,它涉及一種基于區(qū)塊鏈的快速云存儲文件同步架構(gòu)、進(jìn)程和處理算法,該模型充分利用了區(qū)塊鏈的分布式分布和可溯源的特征,與傳統(tǒng)的云同步技術(shù)相比,ChainFileSynch提高了云存儲的同步效率和網(wǎng)絡(luò)可靠性并提供數(shù)據(jù)同步一致性驗證。但其同步方式是利用區(qū)塊鏈網(wǎng)絡(luò)進(jìn)行文件的完全覆蓋,當(dāng)大文件只是修改部分時,進(jìn)行多節(jié)點的數(shù)據(jù)同步傳輸大量冗余數(shù)據(jù)容易造成網(wǎng)絡(luò)擁塞。
雖然上述方案實現(xiàn)了數(shù)據(jù)同步,但有些方案仍存在以下問題:不能實現(xiàn)一對多的數(shù)據(jù)同步、同步過程中傳輸大量的冗余數(shù)據(jù)和缺少可信監(jiān)管、無法跨平臺數(shù)據(jù)同步和無可視化界面進(jìn)行數(shù)據(jù)同步的控制和管理等。
隨著物聯(lián)網(wǎng)的快速發(fā)展,邊緣服務(wù)在各行各業(yè)快速應(yīng)用,由邊緣服務(wù)產(chǎn)生的服務(wù)數(shù)據(jù)劇增,跨域邊緣節(jié)點之間的數(shù)據(jù)同步對邊緣服務(wù)應(yīng)用不可或缺。針對傳統(tǒng)數(shù)據(jù)同步存在無法一對多數(shù)據(jù)同步、缺乏可信監(jiān)管、安全隱患、無可視化控制界面等問題,基于Rsync算法實現(xiàn)跨域邊緣節(jié)點之間的數(shù)據(jù)同步,引入?yún)^(qū)塊鏈技術(shù)為跨域的數(shù)據(jù)同步提供可信環(huán)境。
基于區(qū)塊鏈和Rsync[20]的數(shù)據(jù)同步架構(gòu)由數(shù)據(jù)同步模塊和溯源模塊組成,其中數(shù)據(jù)同步模塊的設(shè)計是基于跨地域、跨平臺、多邊緣服務(wù)器之間的數(shù)據(jù)同步需求,引入溯源模塊是基于區(qū)塊鏈具備的高安全性、去中心化、可溯源、不可篡改特征,從而實現(xiàn)邊緣服務(wù)器之間數(shù)據(jù)同步的安全透明?;趨^(qū)塊鏈和Rsync的同步機(jī)制模型架構(gòu)如圖1所示。
圖1 同步機(jī)制模型架構(gòu)
數(shù)據(jù)同步模塊主要由同步主節(jié)點和跨多安全域A、B、C的若干同步從節(jié)點組成,其中同步從節(jié)點根據(jù)數(shù)據(jù)發(fā)送端與接收端的不同分為數(shù)據(jù)同步源端和數(shù)據(jù)同步終端。數(shù)據(jù)同步模塊的主要功能是實現(xiàn)跨多安全域的邊緣節(jié)點之間的數(shù)據(jù)同步。
溯源模塊主要基于Fabric實現(xiàn),其主要功能是同步主節(jié)點將數(shù)據(jù)同步信息上傳至數(shù)據(jù)同步鏈,數(shù)據(jù)同步源端和數(shù)據(jù)同步終端在數(shù)據(jù)同步過程中通過數(shù)據(jù)同步智能合約將服務(wù)接口調(diào)用的相關(guān)信息存儲上鏈,從而實現(xiàn)從同步主節(jié)點的同步任務(wù)發(fā)布、同步過程的服務(wù)接口調(diào)用到同步任務(wù)結(jié)束全過程的透明可溯源。
2.1.1 同步主節(jié)點
同步主節(jié)點是數(shù)據(jù)同步模塊的控制中樞,數(shù)據(jù)同步模塊中的若干同步從節(jié)點在同步主節(jié)點控制下利用Rsync算法并選定合適的分塊參數(shù)實現(xiàn)一對多的跨多安全域數(shù)據(jù)同步。同步主節(jié)點的功能模塊主要由主節(jié)點控制模塊、通信模塊、區(qū)塊鏈模塊等組成。
主節(jié)點控制模塊:控制同步從節(jié)點進(jìn)行數(shù)據(jù)同步操作。
通信模塊:該模塊主要用于同步主節(jié)點和同步從節(jié)點之間的通信。在多對多的數(shù)據(jù)同步應(yīng)用場景,針對同步從節(jié)點在短時間內(nèi)向同步主節(jié)點發(fā)送大量的數(shù)據(jù)同步請求,導(dǎo)致數(shù)據(jù)同步系統(tǒng)對數(shù)據(jù)同步請求處理不及時,最終導(dǎo)致數(shù)據(jù)同步產(chǎn)生瓶頸、系統(tǒng)資源耗盡的問題,通過在同步主節(jié)點部署消息中間件RabbitMQ將待處理的數(shù)據(jù)同步請求緩存至消息隊列中,然后同步主節(jié)點再從消息隊列中按照定時響應(yīng)獲取數(shù)據(jù)同步請求,控制同步從節(jié)點進(jìn)行數(shù)據(jù)同步。采用消息隊列存儲數(shù)據(jù)同步請求,可避免數(shù)據(jù)同步系統(tǒng)短時間出現(xiàn)大量數(shù)據(jù)同步請求的處理瓶頸問題,從而提高數(shù)據(jù)同步系統(tǒng)的健壯性、穩(wěn)定性和準(zhǔn)確性。
區(qū)塊鏈模塊:該模塊主要包括數(shù)據(jù)同步信息上鏈和服務(wù)接口調(diào)用日志上鏈,可實現(xiàn)從同步任務(wù)發(fā)布、同步服務(wù)接口調(diào)用到同步任務(wù)結(jié)束全過程的透明可溯源。在同步主節(jié)點中,區(qū)塊鏈模塊主要實現(xiàn)同步主節(jié)點的同步任務(wù)發(fā)布和溯源。
2.1.2 同步從節(jié)點
同步從節(jié)點的功能模塊主要由從節(jié)點控制模塊、通信模塊、區(qū)塊鏈模塊、文件監(jiān)控模塊、數(shù)據(jù)傳輸模塊等組成。
文件監(jiān)控模塊:該模塊主要用于實時監(jiān)控同步從節(jié)點(數(shù)據(jù)同步源端)的數(shù)據(jù)變更(例如監(jiān)控目錄或者文件內(nèi)容的新建、修改和刪除),并將數(shù)據(jù)變化的狀態(tài)信息發(fā)送給從節(jié)點控制模塊。
從節(jié)點控制模塊:該模塊根據(jù)文件監(jiān)控模塊反饋的數(shù)據(jù)變化狀態(tài)信息發(fā)送數(shù)據(jù)同步請求至消息中間件,在主節(jié)點控制模塊的控制下參與一對多的邊緣服務(wù)數(shù)據(jù)同步。
數(shù)據(jù)傳輸模塊:該模塊主要實現(xiàn)數(shù)據(jù)同步源端與數(shù)據(jù)同步終端之間的同步數(shù)據(jù)傳輸。
區(qū)塊鏈模塊:在數(shù)據(jù)同步過程中,同步從節(jié)點將服務(wù)接口調(diào)用日志存儲至上鏈,實現(xiàn)服務(wù)接口調(diào)用過程的透明和可溯源。
通信模塊:同步從節(jié)點向同步主節(jié)點發(fā)送數(shù)據(jù)同步請求并存儲至消息中間件RabbitMQ中。
基于區(qū)塊鏈和Rsync的數(shù)據(jù)同步工作流程主要分為數(shù)據(jù)預(yù)同步和同步兩個階段,其中主要包括同步主節(jié)點發(fā)布一對一或者一對多的數(shù)據(jù)同步任務(wù)、數(shù)據(jù)同步任務(wù)上鏈、數(shù)據(jù)同步請求存儲至消息隊列、數(shù)據(jù)同步溯源信息上傳至區(qū)塊鏈等過程。
2.2.1 數(shù)據(jù)預(yù)同步
數(shù)據(jù)同步源端:本地文件系統(tǒng)發(fā)生數(shù)據(jù)變更的同步從節(jié)點,數(shù)據(jù)同步源端需要將變更數(shù)據(jù)同步至其他的同步從節(jié)點(數(shù)據(jù)同步終端)。
數(shù)據(jù)同步終端:本地文件系統(tǒng)需要被數(shù)據(jù)同步的同步從節(jié)點,在同步主節(jié)點的控制下,同數(shù)據(jù)同步源端進(jìn)行數(shù)據(jù)同步操作并更新本地數(shù)據(jù)。
數(shù)據(jù)預(yù)同步階段的工作流程如圖2所示。
圖2 數(shù)據(jù)預(yù)同步階段的工作流程
1)同步主節(jié)點通過Eurake 服務(wù)注冊與發(fā)現(xiàn)技術(shù)搜尋所有的同步從節(jié)點,指定數(shù)據(jù)同步源端、數(shù)據(jù)同步終端,通過目錄服務(wù)接口調(diào)用檢索數(shù)據(jù)同步源端和數(shù)據(jù)同步終端的文件目錄,從而指定需要同步和被同步的文件或者目錄,最后發(fā)布一對一或者一對多的數(shù)據(jù)同步任務(wù)。
2)將數(shù)據(jù)同步任務(wù)信息(數(shù)據(jù)同步任務(wù)的ID、數(shù)據(jù)同步任務(wù)的發(fā)布者、同步目錄/文件的監(jiān)控ID、數(shù)據(jù)同步源端IP、數(shù)據(jù)同步源端的目錄地址、數(shù)據(jù)同步源端的文件名、同步終端列表等)上傳至數(shù)據(jù)同步鏈上。
3)數(shù)據(jù)同步源端使用Inotify工具實時監(jiān)控本地文件系統(tǒng)中同步的文件或者目錄,監(jiān)控其是否發(fā)生文件或者目錄的新增、刪除或者修改。
4)數(shù)據(jù)同步源端監(jiān)控的文件或者目錄發(fā)生數(shù)據(jù)變更。
5)數(shù)據(jù)同步源端發(fā)送數(shù)據(jù)同步請求至同步主節(jié)點所部署的RabbitMQ消息中間件進(jìn)行緩存。
2.2.2 數(shù)據(jù)同步
基于Rsync 算法將數(shù)據(jù)同步源端和數(shù)據(jù)同步終端的數(shù)據(jù)按照固定長度進(jìn)行分塊,分別使用Adler-32算法和MD4算法[21]計算數(shù)據(jù)塊的弱校驗和和強(qiáng)校驗和,數(shù)據(jù)同步源端通過滑動塊尋找出數(shù)據(jù)同步源端和數(shù)據(jù)同步終端的差異數(shù)據(jù),然后在數(shù)據(jù)同步過程中只傳送差異數(shù)據(jù)和相同數(shù)據(jù)塊的匹配信息,減少傳統(tǒng)數(shù)據(jù)同步方式中存在的大量冗余數(shù)據(jù)傳輸,從而提高網(wǎng)絡(luò)資源的利用率。數(shù)據(jù)同步階段的工作流程如圖3所示。
圖3 數(shù)據(jù)同步階段的工作流程
1)同步主節(jié)點獲取消息隊列中緩存的數(shù)據(jù)同步請求,在其控制下數(shù)據(jù)同步源端和數(shù)據(jù)同步終端進(jìn)行數(shù)據(jù)同步操作。
2)同步主節(jié)點將數(shù)據(jù)同步命令發(fā)送給數(shù)據(jù)同步終端。
3)數(shù)據(jù)同步終端根據(jù)數(shù)據(jù)同步命令中的同步文件在本地文件系統(tǒng)中查詢,并將舊文件Fold按照指定的字節(jié)數(shù)進(jìn)行分塊,分別使用Adler-32算法和MD4算法計算數(shù)據(jù)塊的弱校驗和和強(qiáng)校驗和,最后將文件的校驗和列表發(fā)送給數(shù)據(jù)同步源端。
4)數(shù)據(jù)同步源端通過智能合約將服務(wù)接口調(diào)用日志(接口調(diào)用者的IP、接口被調(diào)用者的Url(IP+接口名)、接口調(diào)用時間)上傳至數(shù)據(jù)同步鏈。
5)數(shù)據(jù)同步源端接收到文件Fold的校驗和列表后,依照強(qiáng)、弱校驗和對接收到的數(shù)據(jù)進(jìn)行排序并建立 Hash Table。數(shù)據(jù)同步源端根據(jù)Fold的校驗和列表同新文件Fnew進(jìn)行數(shù)據(jù)塊匹配校驗,首先,數(shù)據(jù)同步源端將Fnew從第1個字節(jié)開始取相同字節(jié)大小的數(shù)據(jù)塊,同樣分別使用Adler-32算法和MD4算法計算數(shù)據(jù)塊的弱校驗和與強(qiáng)校驗和,并且和校驗和列表中的校驗和進(jìn)行匹配。如果2個數(shù)據(jù)塊的弱校驗和和強(qiáng)校驗和均匹配成功,則該數(shù)據(jù)塊在數(shù)據(jù)同步終端存在,從該數(shù)據(jù)塊的末地址開始下一輪的校驗匹配;如果弱校驗和或者強(qiáng)校驗和匹配不成功,則該數(shù)據(jù)塊在數(shù)據(jù)同步終端不存在,從該數(shù)據(jù)塊首地址的下一個偏移地址的位置開始下一輪的校驗匹配。
6)數(shù)據(jù)同步源端發(fā)送Fnew和Fold的匹配信息和差異數(shù)據(jù)給數(shù)據(jù)同步終端。
7)數(shù)據(jù)同步終端接收Fnew和Fold的匹配信息和差異數(shù)據(jù),并進(jìn)行文件重組。
8)數(shù)據(jù)同步終端通過智能合約將服務(wù)接口調(diào)用日志上傳至數(shù)據(jù)同步鏈。
數(shù)據(jù)同步智能合約的結(jié)構(gòu)體主要包括數(shù)據(jù)同步任務(wù)結(jié)構(gòu)體DataSyncTask、數(shù)據(jù)同步終端列表結(jié)構(gòu)體DataDestinations和接口調(diào)用結(jié)構(gòu)體InterfaceCall。
1)DataSyncTask結(jié)構(gòu)體的屬性、數(shù)據(jù)類型等信息如表1所示。
表1 DataSyncTask結(jié)構(gòu)體
2)DataDestinations結(jié)構(gòu)體的屬性、數(shù)據(jù)類型等信息如表2所示。
表2 DataDestinations結(jié)構(gòu)體
3)InterfaceCall結(jié)構(gòu)體的屬性、數(shù)據(jù)類型等信息如表3所示。
表3 InterfaceCall結(jié)構(gòu)體
數(shù)據(jù)同步智能合約主要具備數(shù)據(jù)同步任務(wù)的鏈上存儲、數(shù)據(jù)同步任務(wù)的鏈上刪除、服務(wù)接口調(diào)用日志的鏈上存儲、數(shù)據(jù)同步任務(wù)的信息查詢等功能。其智能合約函數(shù)如表4所示。
表4 數(shù)據(jù)同步智能合約接口函數(shù)
同步主節(jié)點發(fā)布數(shù)據(jù)同步任務(wù)后,數(shù)據(jù)同步系統(tǒng)通過Fabric-java-sdk調(diào)用數(shù)據(jù)同步智能合約的dataSyncTaskEnroll()方法進(jìn)行數(shù)據(jù)同步信息的存儲上鏈。算法偽代碼如算法1所示。智能合約獲取數(shù)據(jù)同步任務(wù)信息,并對dSTask對象進(jìn)行屬性賦值。同步任務(wù)的ID(task_Id)和數(shù)據(jù)同步任務(wù)對象序列化后的JSON數(shù)據(jù)存儲在狀態(tài)數(shù)據(jù)庫中。如果返回的值為空,則表示數(shù)據(jù)同步信息上鏈成功,否則返回錯誤的消息。
算法1dataSyncTaskEnroll
輸入:task_Id, style, issuer, watch_Id, time_interval, ownHost, path_Name, data_Destinations
輸出:空值
1. if {傳入?yún)?shù)}=""then {
2. return "dataSyncTaskEnroll invalid args"
3. end
5. if len(dSTaskBytes) !=0 then
6. return "dSTask already exist"
7. end
12.if err !=null then
13. return “save dSTask error”
14.end
15.return null
數(shù)據(jù)同步源端和數(shù)據(jù)同步終端在同步主節(jié)點的控制下進(jìn)行跨域邊緣節(jié)點之間的數(shù)據(jù)同步。數(shù)據(jù)同步過程涉及微服務(wù)之間的接口調(diào)用,為了確保服務(wù)接口調(diào)用過程的安全性和可溯源,通過智能合約的InterfaceCallInfoEnroll()方法將服務(wù)接口調(diào)用日志存儲上鏈。算法偽代碼如算法2所示,首先在狀態(tài)數(shù)據(jù)庫中根據(jù)數(shù)據(jù)同步任務(wù)的ID進(jìn)行查詢,如果數(shù)據(jù)同步任務(wù)存在,則將task_Id對應(yīng)的value值反序列化為dSTask對象,然后將獲取到的服務(wù)接口調(diào)用日志參數(shù)賦值給dSTask的InterfaceCall屬性,最后將dSTask對象重新序列化為JSON格式存儲于狀態(tài)數(shù)據(jù)庫當(dāng)中。
算法2InterfaceCallInfoEnroll
輸入:task_Id, sr_Ip, url, time
輸出:空值
1. if {傳入?yún)?shù)}=""then {
2. return "Function invalid args"
3. end
7. if len(dSTaskBytes)=0 then
8. return "dataSyncTask not found"
9. end
12.dSTask.InterfaceCall=append(dSTask.
InterfaceCall, string(InCallBytes))
15.if err !=null then
16. return "save dataSyncTask error"
17.end
18.return null
當(dāng)邊緣節(jié)點存在惡意數(shù)據(jù)的傳播行為時,數(shù)據(jù)同步系統(tǒng)通過Fabric-java-sdk調(diào)用數(shù)據(jù)同步智能合約的querydataSyncTask()方法進(jìn)行數(shù)據(jù)同步信息的溯源檢索,其算法偽代碼如下算法3所示,通過智能合約在數(shù)據(jù)同步鏈上根據(jù)數(shù)據(jù)同步任務(wù)的ID從狀態(tài)數(shù)據(jù)庫中獲取相應(yīng)的數(shù)據(jù)同步任務(wù)信息。
算法3querydataSyncTask
輸入:task_Id
輸出:dataSyncTaskBytes
1. if task_Id=""then {//驗證參數(shù)的正確性
2. return "querydataSyncTask invalid args"
3. end
5. if len(dataSyncTaskBytes)=0 then
6. return "dataSyncTask not found"
7. end
8. return dataSyncTaskBytes
1)數(shù)據(jù)同步的網(wǎng)絡(luò)環(huán)境。數(shù)據(jù)同步的網(wǎng)絡(luò)環(huán)境包括5個Windows服務(wù)器,用于模擬數(shù)據(jù)同步集群之間的數(shù)據(jù)同步。服務(wù)器的相關(guān)配置具體參數(shù)如表5所示。
表5 硬件參數(shù)表
在一臺服務(wù)器上部署同步主節(jié)點,安裝配置RabbitMQ,在其他3臺服務(wù)器上部署同步從節(jié)點,共同構(gòu)成數(shù)據(jù)同步集群,模擬在同步主節(jié)點的控制下同步從節(jié)點之間進(jìn)行邊緣服務(wù)器的數(shù)據(jù)同步。
2)區(qū)塊鏈的網(wǎng)絡(luò)環(huán)境。部署區(qū)塊鏈平臺的服務(wù)器、軟件信息的基本參數(shù)如表6、7所示。
表6 HyperLedger Fabric部署服務(wù)器參數(shù)表
表7 軟件信息表
5.2.1 區(qū)塊鏈的性能
用Caliper對Fabric的性能進(jìn)行測試,在測試過程中,對txNumber分別設(shè)置為1 000、5 000、10 000、15 000,txNumber為10 000時,性能測試的結(jié)果如表8所示。
表8 Fabric性能表
由表8可知,在open類型中,將數(shù)據(jù)寫入?yún)^(qū)塊鏈,區(qū)塊鏈的吞吐量能夠達(dá)到169。在query類型中,從區(qū)塊鏈查詢數(shù)據(jù),區(qū)塊鏈的吞吐量能夠達(dá)到350。在實際的工程應(yīng)用中能夠滿足基本的性能要求,并且可以通過提高區(qū)塊鏈節(jié)點的CPU、內(nèi)存、磁盤等配置來提升區(qū)塊鏈的性能。
5.2.2 數(shù)據(jù)同步的性能
1)數(shù)據(jù)的全量同步性能。在相同的網(wǎng)絡(luò)環(huán)境中,在一對三的實驗場景下(即數(shù)據(jù)從一個數(shù)據(jù)同步源端同步至3個數(shù)據(jù)同步終端),基于區(qū)塊鏈和Rsync的數(shù)據(jù)同步(Rsync同步)和基于P2P的文件分發(fā)(BTS-PD同步)[22]進(jìn)行1、5、10、50、100、200、250、500 MiB等不同文件大小的數(shù)據(jù)同步,實驗對比結(jié)果如圖4所示。
圖4 文件的全量同步對比
由圖4實驗分析可知,當(dāng)同步的文件小于或者等于250 MiB時,Rsync同步相比于BTS-PD同步更具有優(yōu)勢。當(dāng)全量同步的文件大小為1 MiB時,BTS-PD同步的時間開銷為12.5 s,而Rsync同步的時間開銷為僅為3 s,其原因是BTS-PD在進(jìn)行小文件傳輸時,其系統(tǒng)初始化等其它額外開銷占整個傳輸過程的比重過大,即在BTS-PD同步中文件做種、種子分發(fā)和BTS-PD同步應(yīng)用啟動下載等過程的時間開銷相比于文件傳輸?shù)臅r間開銷大很多。當(dāng)全量同步的文件大小為250 MiB時,BTS-PD同步的時間開銷為51.5 s,Rsync同步的時間開銷為47 s左右,其原因是BTS-PD同步隨著應(yīng)用的啟動,P2P節(jié)點在從其他P2P節(jié)點下載數(shù)據(jù)的同時也向其他P2P節(jié)點進(jìn)行數(shù)據(jù)的分發(fā)共享,以至于BTS-PD同步的下載速度逐漸變大,因此二者的同步時間開銷差距總體呈現(xiàn)逐漸縮小的趨勢。當(dāng)全量同步的文件大小為500 MiB時,BTS-PD同步在多節(jié)點和大文件的同步中優(yōu)勢較為突出。但本文的研究背景是邊緣節(jié)點之間的可信數(shù)據(jù)同步,在邊緣節(jié)點的數(shù)據(jù)同步中更多的是小文件同步,其次邊緣網(wǎng)絡(luò)的帶寬資源非常重要,基于BTS-PD同步不能實現(xiàn)數(shù)據(jù)的增量同步,所以BTS-PD同步在邊緣節(jié)點之間的數(shù)據(jù)同步存在一定的局限性。
2)數(shù)據(jù)的增量同步性能。文件夾的增量同步:在一對一的實驗場景下,Rsync同步和BTS-PD同步模擬跨域邊緣節(jié)點之間文件夾的增量同步實驗。首先在數(shù)據(jù)同步源端將100 KiB、1 MiB、10 MiB、100 MiB、500 MiB、1 GiB等不同大小的文件分別放入6個文件夾中,其次將該文件夾同步至數(shù)據(jù)同步終端,同步結(jié)束后再往上述6個文件夾中分別新增10 KiB的差異文件,然后再從數(shù)據(jù)同步源端同步至數(shù)據(jù)同步終端。BTS-PD同步需要將該文件夾(包含2個文件,分別是原有的文件和新增的10 KiB差異文件)重新做成種子文件進(jìn)行批量數(shù)據(jù)同步,而Rsync同步實現(xiàn)了文件夾的增量同步,由圖5的對比實驗分析可知,隨著同步的文件夾越來越大,BTS-PD同步和Rsync同步的同步時間開銷差值越來越大,當(dāng)同步的文件夾為1 GiB時,BTS-PD同步和Rsync同步的同步時間開銷差值能夠達(dá)到38 s左右,隨著同步的節(jié)點數(shù)越多和發(fā)生文件差異變化的文件夾越大,二者的同步時間開銷差值在一定條件下也會越來越大。
圖5 文件夾的增量同步對比
文件的增量同步:在一對一的實驗場景下,Rsync同步和BTS-PD同步模擬跨域邊緣節(jié)點之間文件的增量同步實驗。首先在數(shù)據(jù)同步源端將10 MiB、50 MiB、100 MiB、250 MiB和500 MiB等不同大小文件分別同步至數(shù)據(jù)同步終端,同步結(jié)束后再往上述5個文件中分別新增10 KiB的差異文件,然后再從數(shù)據(jù)同步源端同步至數(shù)據(jù)同步終端。BTS-PD同步需要將該變化的文件重新做成種子文件同步至數(shù)據(jù)同步終端,而Rsync同步可以進(jìn)行文件的增量同步,由圖6的實驗結(jié)果分析可知,Rsync同步相比于BTS-PD同步而言,其同步時間開銷更小,最為重要的是Rsync同步只傳文件的匹配信息和差異部分,可減少傳統(tǒng)數(shù)據(jù)同步中存在的大量冗余數(shù)據(jù)傳輸問題,提高邊緣網(wǎng)絡(luò)中帶寬的利用率。
圖6 文件的增量同步對比
針對跨域邊緣節(jié)點之間的可信數(shù)據(jù)同步需求,引入去中心化、不可篡改、可溯源的區(qū)塊鏈技術(shù)為數(shù)據(jù)同步提供可信環(huán)境,設(shè)計基于區(qū)塊鏈的可信數(shù)據(jù)同步模型架構(gòu);基于Rsync算法實現(xiàn)了跨域的數(shù)據(jù)同步系統(tǒng),提高了邊緣節(jié)點之間數(shù)據(jù)同步的效率和邊緣網(wǎng)絡(luò)帶寬的利用率;基于區(qū)塊鏈實現(xiàn)數(shù)據(jù)同步監(jiān)控與溯源,將服務(wù)接口調(diào)用日志和數(shù)據(jù)同步信息存儲至區(qū)塊鏈中進(jìn)行溯源,提高了跨域邊緣節(jié)點之間數(shù)據(jù)同步的安全性和可靠性;目前該系統(tǒng)已經(jīng)實地部署并應(yīng)用。數(shù)據(jù)同步算法對于數(shù)據(jù)同步的性能具有重要意義,下一步考慮將同步算法Rsync進(jìn)行優(yōu)化,提高增量數(shù)據(jù)同步的效率。將考慮引入基于P2P的數(shù)據(jù)同步,制定Rsync和P2P相結(jié)合的數(shù)據(jù)同步策略,完善數(shù)據(jù)同步機(jī)制,提高數(shù)據(jù)同步的效率。