您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“rsync算法的原理是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“rsync算法的原理是什么”吧!
rsync命令是一個(gè)遠(yuǎn)程數(shù)據(jù)同步工具,可通過LAN/WAN快速同步多臺(tái)主機(jī)間的文件。rsync使用所謂的“rsync算法”來使本地和遠(yuǎn)程兩個(gè)主機(jī)之間的文件達(dá)到同步,這個(gè)算法只傳送兩個(gè)文件的不同部分。具體使用可以參考https://man.linuxde.net/rsync。
可以同步兩個(gè)文件不同的部分,這個(gè)引起我的好奇,那么是怎么做的?
其實(shí)一種簡單的思路是,那兩個(gè)文件放一起,比對(duì)一下不就知道了,這里的問題就是一個(gè)文件在遠(yuǎn)端,一個(gè)在本地,那么如果按照這種方式,豈不是要傳一個(gè)文件過去,直接覆蓋就好了。而sync的思路就是如果文件某個(gè)部分變了,那么就同步這一塊內(nèi)容,至于這一塊的內(nèi)容怎么標(biāo)識(shí)和原來的不一樣,需要同步,簡單我們想到的是數(shù)據(jù)摘要,如果兩個(gè)md5不一樣,不就改變了需要同步了嗎。那么我們看一下rsync是怎么處理的。
首先,我們會(huì)把fileDst的文件平均切分成若干個(gè)小塊,比如我們按照1024個(gè)字節(jié)劃分,然后對(duì)每塊計(jì)算兩個(gè)標(biāo)識(shí),rsync使用兩個(gè)方式計(jì)算:
一個(gè)叫rolling checksum,是弱checksum,32位的checksum,其使用的是Mark Adler發(fā)明的adler-32算法,
一個(gè)是強(qiáng)checksum,128位的,以前用md4,現(xiàn)在用md5 hash算法。
再者就是同步目標(biāo)端會(huì)把文件的一個(gè)計(jì)算后的列表傳給同步源文件這,這個(gè)列表里包括了三個(gè)東西,rolling checksum,md5 checksume,文件塊編號(hào)。
源機(jī)器拿到了這個(gè)列表后,會(huì)對(duì)文件做同樣的計(jì)算和目標(biāo)計(jì)算值做對(duì)比,這樣就知道哪些文件塊改變了,這里立馬想到的是如果源文件比如中間或者開頭加入了一個(gè)字符,那么每一塊計(jì)算的值不就改變了,還不是要全部同步?因?yàn)樵诒葘?duì)的后面用了“挪步”的方式。
同步源端拿到fileDst的checksum數(shù)組后,會(huì)把這個(gè)數(shù)據(jù)存到一個(gè)hash table中,用rolling checksum做hash,以便獲得O(1)時(shí)間復(fù)雜度的查找性能,簡單點(diǎn)可以理解成map,只是不知道這個(gè)hash table在沖突碰撞的時(shí)候是怎么處理的。
然后在源文件這里開始計(jì)算,如果弱checksum和強(qiáng)checksum一致,那么這就是同一個(gè)文件,如果只要其中一個(gè)不一致,那么就是不同的部分。于是,算法會(huì)住后移動(dòng) 1個(gè)字節(jié),再計(jì)算文件塊要做checksum,但是前面這一字節(jié)的內(nèi)容需要同步給目標(biāo)機(jī)器上。目標(biāo)機(jī)器上會(huì)有一個(gè)臨時(shí)文件,當(dāng)匹配結(jié)束后會(huì)替換掉原來的目標(biāo)文件。如果文件改動(dòng)比較大,那么對(duì)文件做這么多計(jì)算還是直接把文件傳輸過去,哪一個(gè)效率更高呢?
還有就是計(jì)算checksum,弱的是32byte,強(qiáng)的128byte,所以還是有可能有重復(fù)的情況吧,只是這個(gè)概率非常低2的160次方吧,這樣看,是不是比直接傳輸覆蓋的情況出錯(cuò)概率更低呢!
到此,相信大家對(duì)“rsync算法的原理是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。