華 南,朱彥霞
(1.河南中廣智媒科技有限公司,河南 鄭州 450000;2.中國廣電河南網(wǎng)絡(luò)有限公司;3.河南省職工醫(yī)院;4.河南省鄭州工人療養(yǎng)院)
隨著云計算、物聯(lián)網(wǎng)和大數(shù)據(jù)技術(shù)的發(fā)展,海量數(shù)據(jù)的傳輸和存儲成為了一個亟待解決的問題。對于小文件的傳輸,由于其“個體小、總量多”[1]的特點,給數(shù)據(jù)傳輸帶來了很大的困難,同時也帶來了存儲空間浪費、經(jīng)濟(jì)損失[2]等問題。
目前,已經(jīng)有多種小文件傳輸優(yōu)化方案(如基于云計算[3-4]、并行計算[5-6]、多線程和UDP 協(xié)議[7-8]等),但是仍然存在依賴云計算服務(wù),依賴硬件和網(wǎng)絡(luò)設(shè)備以及數(shù)據(jù)丟失或重復(fù)傳輸?shù)葐栴};Windows 操作系統(tǒng)中基于NTFS 分區(qū)格式的小文件傳輸方案表現(xiàn)良好,但仍面臨使用負(fù)擔(dān)較大、效率低、跨網(wǎng)絡(luò)海量小文件同步等問題;基于Windows 操作系統(tǒng)的小文件傳輸方案Robocopy、Fastcopy、TeraCopy、Synctoy 等,支持多線程傳輸、斷點續(xù)傳等功能,然而相比Linux 平臺,存在學(xué)習(xí)使用負(fù)擔(dān)較大的問題、跨網(wǎng)絡(luò)海量小文件同步、傳輸效率低、高性能產(chǎn)品收費成本高等問題;Windows操作系統(tǒng)中活動目錄技術(shù)支持DFS 文件服務(wù)并提供強(qiáng)大的數(shù)據(jù)同步功能,但其依賴許多服務(wù)和配置才能使用,在技術(shù)上缺乏靈活性。此外,通過RPC 映射目錄的同步方法可以通過優(yōu)化拷貝方式進(jìn)行同步[9],但由于底層協(xié)議的原因,當(dāng)傳輸海量文件時,整體性能會下降,特別是當(dāng)傳輸中斷時,進(jìn)行數(shù)據(jù)對比將耗費更多時間。
因此,海量小文件同步傳輸及性能優(yōu)化問題是個技術(shù)難點,也是當(dāng)今云計算技術(shù)研究的一個熱點。為了解決這個問題,需要設(shè)計出更高效、可靠、安全的同步傳輸方案,并通過優(yōu)化算法和技術(shù)手段來提高同步效率和速度,降低成本,從而更好地滿足人們?nèi)找嬖鲩L的數(shù)據(jù)傳輸需求。
在標(biāo)準(zhǔn)的Windows 操作系統(tǒng)中,進(jìn)行兩個終端之間的文件傳輸(例如,從PC1 到PC2 傳輸1000 個文件)如圖1所示。標(biāo)準(zhǔn)的Windows操作系統(tǒng)會對每個文件執(zhí)行一次完整的磁盤和網(wǎng)絡(luò)傳輸流程,無論文件大小如何,這導(dǎo)致在傳輸大量文件時速度非常慢。此外,網(wǎng)絡(luò)傳輸時協(xié)議的握手次數(shù)并沒有減少,也會導(dǎo)致傳輸速度下降。
在不考慮LOFS(Loss of Service Faults)的情況下,傳輸速率(R)與擁塞窗口和數(shù)據(jù)包往返時間之間存在一定的關(guān)系。具體來說,傳輸速率與擁塞窗口和數(shù)據(jù)包往返時間的乘積成正比,即:
R=y/RTT
其中,y 表示當(dāng)前擁塞窗口的大小,即網(wǎng)絡(luò)中可以發(fā)送的數(shù)據(jù)包數(shù)量,RTT 表示數(shù)據(jù)包往返時間,即從發(fā)送端發(fā)送一個數(shù)據(jù)包到接收端并收到確認(rèn)的時間。上述關(guān)系式表明,當(dāng)擁塞窗口y 增加或數(shù)據(jù)包往返時間RTT減小時,傳輸速率R也會相應(yīng)增加,反之亦然。這是因為當(dāng)擁塞窗口y 增加時,網(wǎng)絡(luò)中可以發(fā)送的數(shù)據(jù)包數(shù)量也會增加,傳輸效率提高;而當(dāng)數(shù)據(jù)包往返時間RTT 減小時,數(shù)據(jù)包能夠更快地在發(fā)送端和接收端之間傳輸,從而也提高了傳輸效率。
在考慮LOSF 傳輸情況下,在慢啟動階段,擁塞窗口大小的計算公式為:
y=min(W,CWND)
其中,y 表示當(dāng)前擁塞窗口的大小,W 表示擁塞窗口的上限,CWND 表示當(dāng)前的擁塞窗口大小。在慢啟動階段,CWND 的初始值為1,每經(jīng)過一個往返時間RTT,CWND 的值就會加倍,即CWND=CWND*2。因此,可以將擁塞窗口y的計算公式表示為:
y=min(W,2^n)
其中,n 表示當(dāng)前慢啟動階段經(jīng)過的往返時間RTT 的個數(shù),W表示擁塞窗口的上限。
在考慮LOSF傳輸情況下,傳輸速率為:
R=(MFS/RTT)*sqrt(2/p)
其中,R 表示傳輸速率,MFS 表示文件集的平均大小,RTT 表示往返時間,p 表示丟包率。這個表達(dá)式中,sqrt(2/p)表示LOFS 因子,描述了網(wǎng)絡(luò)中丟包率對傳輸速率的影響。在不考慮丟包的情況下,傳輸速率與文件大小呈現(xiàn)正相關(guān)性,即隨著文件大小增加,傳輸速率會相應(yīng)增加;如果傳輸文件數(shù)量過多,會產(chǎn)生多個RTT 浪費,文件過小,網(wǎng)絡(luò)帶寬不能充分利用,對吞吐量產(chǎn)生影響、效率低下。
雖然有一些第三方免費和收費軟件可在一定程度上提升大量小文件傳輸效率,例如從Linux 上移植的Rsync,但由于這些軟件是基于Linux 開發(fā)的,對于中文和Windows 平臺特殊的NTFS 存儲技術(shù)兼容性較差。當(dāng)同步的文件過大或文件數(shù)量過多時,也會出現(xiàn)兼容性問題。
對此,可以利用Windows 7 及其后續(xù)操作系統(tǒng)的特性,結(jié)合最新的設(shè)計思路來實現(xiàn)文件的高速同步。本文提出并構(gòu)建了一種高效的Windows 文件同步算法fastNTsync,該算法基于以下三種技術(shù)優(yōu)勢:
⑴NTFS分區(qū)表快照技術(shù)
該技術(shù)能夠在不中斷文件系統(tǒng)的情況下對NTFS分區(qū)表完成快照,從而提高同步的效率??煺湛捎糜谟涗浄謪^(qū)表的狀態(tài),以便在同步期間快速檢測和比較分區(qū)表的變化。
⑵NTFS $MFT分析技術(shù)
該技術(shù)可分析NTFS文件系統(tǒng)的主文件表($MFT),以便快速獲取文件信息。這有助于減少網(wǎng)絡(luò)傳輸量和提高同步效率。
⑶文件打包分區(qū)組合拷貝技術(shù)
該技術(shù)可將文件按照一定的規(guī)則打包成一個包,并在傳輸過程中對包進(jìn)行組合拷貝。這有助于減少網(wǎng)絡(luò)傳輸次數(shù)和提高同步效率。
本文提出的fastNTsync 算法融合了以上三種技術(shù),可顯著提高文件同步的效率和速度,同時解決了NTFS特殊性和中文兼容性問題。
fastNTsync 算法以Microsoft 的.NET Core 5 為主要開發(fā)平臺,使用C#語言開發(fā),并使用LiteDB 數(shù)據(jù)庫作為嵌入式數(shù)據(jù)庫。模擬物理環(huán)境使用Oracle VM VirtualBox 開源虛擬機(jī)來仿真多機(jī)環(huán)境,網(wǎng)絡(luò)采用NAT方式。虛擬機(jī)分別模擬一部分Linux/Windows環(huán)境,實驗環(huán)境網(wǎng)絡(luò)實際為10000M 以太網(wǎng)卡傳輸(網(wǎng)絡(luò)配置如圖2所示)。
圖2 網(wǎng)絡(luò)配置信息圖
fastNTsync 算法采用公共的RSA 庫和改進(jìn)過的128 位hash 算法來提高數(shù)據(jù)傳輸?shù)陌踩院托?,同時應(yīng)用第三方開源ZIP 庫實現(xiàn)文件塊的打包提高文件傳輸效率,在實際應(yīng)用過程中還應(yīng)考慮文件沖突、同步隊列管理和異常處理等細(xì)節(jié)問題。
2.2.1 fastNTsync算法具體實現(xiàn)思路
具體實現(xiàn)思路如下:
⑴同步服務(wù)器端啟動后,使用開源庫獲取發(fā)起端的NTFS索引和文件映射表$MFT數(shù)據(jù),并將其拷貝到內(nèi)存流中形成快照,以支持文件同步。
⑵解析NTFS 索引和$MFT 數(shù)據(jù),獲取需要同步的目錄和文件樹結(jié)構(gòu),包括文件名、字節(jié)長度、修改時間等信息,并將這些數(shù)據(jù)寫入LiteDB 數(shù)據(jù)庫,以支持快速的同步任務(wù)處理。
⑶開啟HTTP 服務(wù),允許同步客戶端通過驗證碼和同步任務(wù)ID 來獲取LiteDB 的快照庫,以支持遠(yuǎn)程同步操作。
⑷允許同步客戶端掃描設(shè)定的同步存儲目錄和文件結(jié)構(gòu),包括文件名、目錄結(jié)構(gòu)、文件CRC、字節(jié)長度、修改時間和校驗128 位hash,并將這些索引數(shù)據(jù)存儲到本地LiteDB數(shù)據(jù)庫中,以便進(jìn)行同步數(shù)據(jù)對比。
⑸通過比較客戶端和服務(wù)端LiteDB 數(shù)據(jù)庫中的索引數(shù)據(jù),對需要同步的新增、修改和刪除操作進(jìn)行識別,并將這些操作轉(zhuǎn)化為HTTP 請求,以支持遠(yuǎn)程同步操作。
⑹同步客戶端通過HTTP 請求獲取需要同步的文件內(nèi)容,然后通過文件流的方式,將文件寫入本地存儲,以實現(xiàn)同步文件的傳輸。
⑺同步過程中可以使用正則表達(dá)式來排除不需要同步的文件類型,同時可以配置同步速度限制,以避免網(wǎng)絡(luò)帶寬資源被占滿。
2.2.2 編碼實現(xiàn)
fastNTsync算法偽代碼如下:
2.2.3 算法核心過程
⑴利用NTFS分區(qū)表的特性和Hash碼提升文件同步效率
Windows NTFS分區(qū)表身攜帶文件的長度和修改時間信息,通過計算Hash 碼進(jìn)行快速比對,避免了對文件內(nèi)容的重復(fù)讀取和計算Hash 碼的過程,提高了文件同步的效率。
⑵小文件打包優(yōu)化網(wǎng)絡(luò)傳輸效率
在文件同步過程中,使用無壓縮打包的方式優(yōu)化網(wǎng)絡(luò)傳輸效率。因為Windows 在網(wǎng)絡(luò)之間傳輸小于512KB 甚至更低容量的小文件的效率并不高,使用無壓縮打包的方法可以提高網(wǎng)絡(luò)傳輸效率,從而提高同步效率。
⑶多線程傳輸提升文件同步效率
采用多線程傳輸技術(shù)提升網(wǎng)絡(luò)并發(fā)效率。至少使用兩個線程,同時處理多個文件的傳輸,從而減少傳輸時間,提高文件同步效率。
⑷利用NTFS索引及文件映射表特點提升文件同步效率
通過獲取發(fā)起端NTFS的索引和文件映射表$MFT數(shù)據(jù),以獲取文件列表,減少I/O 請求,避免對文件系統(tǒng)的重復(fù)讀取和計算,效率遠(yuǎn)遠(yuǎn)超過傳統(tǒng)的文件遞歸檢索效率。這樣可加快文件同步速度,提高同步效率。
算法性能驗證過程如圖3所示。
圖3 算法驗證過程
具體驗證過程描述如下:
⑴ 通過fastNTsync 程序的函數(shù)-init_test 1,在PC1 的F 盤的目錄f:svn estA 中創(chuàng)建6,546 個隨機(jī)大小的.txt 的測試文件,硬盤使用傳統(tǒng)的機(jī)械硬盤,總共約14GB 左右,最小的文件約1KB,最大的約300MB;其中,小于512KB 的文件有873 個。同時,在PC2 的E 盤中建立testA的空目錄。
⑵在兩臺PC上配置fastNTsync.exe的配置信息,配置如下:
別名PC1IP:192.168.31.25
端口為7000,設(shè)定同步目錄為:f: estB
別名PC2 IP:192.168.31.24
端口為7000,設(shè)定同步目錄為:e: estB
⑶通過標(biāo)準(zhǔn)的Windows 命令,從PC1 電腦發(fā)起f:svn estA 到192.168.31.24e$(192.168.31.24 是PC2 的IP)進(jìn)行文件拷貝,大文件與小文件在傳輸速率上差異性較為明顯(如圖4、圖5 所示),系統(tǒng)估算平均用時為5分13秒。
圖4 Windows自帶Copy命令實現(xiàn)大文件傳輸速率示例圖
圖5 Windows自帶Copy命令實現(xiàn)大量小文件傳輸速率示例圖
由于小文件較多,網(wǎng)絡(luò)傳輸實際速度大致在20Mbps~993Mbps左右徘徊。
⑷復(fù)制PC1 的testA 目錄一份為testB,執(zhí)行命令fastNTsync.exe -s PC1 -t PC2,開始同步;大文件與小文件傳輸速率基本無差異(如圖6 所示),系統(tǒng)估算用時約1分17秒。
圖6 fastNTsync.exe在覆蓋模式下的速率
圖7 Windows文件資源管理器傳輸在覆蓋模式下的速率
通過對比可以看出,在相同環(huán)境及傳輸任務(wù)下,本文所提出的fastNTsync算法較傳統(tǒng)Windows命令的執(zhí)行效率優(yōu)勢更為突出。
第二次測試過程:PC1 的testA 文件并再次執(zhí)行fastNTsync 程序的函數(shù)-init_test2,生成測試數(shù)據(jù)文件增加為7329 個,并且隨機(jī)重寫了PC1 的testA 目錄下一些文件內(nèi)容,最終test 目錄大小為16.4 GB 左右。目前PC1和PC2大約有1000個以上的差異文件。
⑸進(jìn)行第二次同步時,分別使用標(biāo)準(zhǔn)的Windows命令復(fù)制PC1 到PC2 的文件(直接覆蓋)和改進(jìn)后的fastNTsync.exe 程序進(jìn)行同步。實驗結(jié)果顯示,使用Windows 命令復(fù)制文件的同步過程耗時6 分40 秒,而使用fastNTsync程序的同步過程僅耗時約58秒。
經(jīng)過綜合評測,fastNTsync算法采用NTFS快照技術(shù)高效地檢索和比對兩臺待同步計算機(jī)的文件列表信息,從而僅同步需要更新的文件。此外,該算法對于小文件進(jìn)行了打包和解包處理,減少了網(wǎng)絡(luò)協(xié)議握手次數(shù),提高了文件傳輸效率。
隨著數(shù)據(jù)量不斷增加,海量小文件同步問題已成為一個重要問題。本文提出了一種基于fastNTsync算法的海量小文件同步優(yōu)化算法,該算法充分融合了NTFS 分區(qū)表快照、NTFS $MFT 分析和文件打包分區(qū)組合拷貝等技術(shù)優(yōu)勢。通過優(yōu)化同步過程中的數(shù)據(jù)傳輸、數(shù)據(jù)存儲和數(shù)據(jù)管理等方面,該算法有效地提高了同步速度和效率,并實現(xiàn)了較高的同步質(zhì)量。
實驗結(jié)果表明,本文提出的fastNTsync 算法在處理大量小文件時具有顯著的優(yōu)勢。相比現(xiàn)有同步算法,該算法可以更快地完成同步任務(wù),同時也能夠更加高效地利用存儲空間。該算法的性能優(yōu)勢為海量小文件同步問題的解決提供了一種有效的解決方案,同時也為相關(guān)領(lǐng)域的研究和應(yīng)用提供了有價值的參考。
雖然本文的fastNTsync算法能夠有效解決海量小文件同步問題,但在實際應(yīng)用中,仍需考慮不同環(huán)境下的應(yīng)用效果、系統(tǒng)的穩(wěn)定性和安全性等問題。未來的研究可以探究更加先進(jìn)的同步算法,同時結(jié)合機(jī)器學(xué)習(xí)和人工智能等技術(shù),進(jìn)一步提高同步效率和準(zhǔn)確性。