解決方案
在慢速鏈路上複製檔案,會浪費兩台機器早已共有的所有內容。壓縮只能帶來二到四倍的幫助,而一般的 diff 工具需要兩個檔案都位於同一台機器上,這正是鏈路所造成的不可能。
Andrew Tridgell 與 Paul Mackerras 於 1996 年以遠端 diff 解決了這個問題:接收端將自己的檔案切分為區塊,送出每個區塊的校驗和,而發送端在一次掃描中,利用一個便宜到能在每個位元組位置計算的滾動校驗和,找出自己哪些區塊能在任意偏移處匹配。只有不匹配的資料與參照會經過網路傳輸。
此設計只需要一次來回,因此延遲幾乎不造成影響,而且即使檔案差異相當大也能正確運作。Tridgell 於 1996 年 6 月 19 日發表這個工具,作為 rcp 的替代品,具備此遠端更新演算法,以及讓通訊與運算重疊進行的管線化。
達成了什麼
遠端計算差異:傳送校驗和,而非內容
為何有效
滾動校驗和讓發送端能便宜地掃描每個偏移處
一次來回使其即使在高延遲鏈路上也快速
強校驗和在資料移動前確認弱匹配
只傳送不匹配的區塊,節省的頻寬與相似程度成正比
可應用之處
當頻寬稀缺且檔案有重疊時,傳送證據而非資料:滾動校驗和能揭示遠端已存在的內容,而無需兩個檔案位於同一處。
後續發展
rsync 成為 Unix 上用於備份、鏡像與軟體散布的標準工具,而其區塊校驗和 diff 至今仍是該工具的核心。1996 年的報告仍是該演算法所引用的參考文獻,而單次來回的設計影響了後來的同步系統。
追溯依據
參考來源
- The rsync algorithm (TR-CS-96-05) Australian National University · openresearch-repository.anu.edu.au
- First release of rsync - rcp replacement (announcement) LWN.net archive · static.lwn.net ·