案例库 · 软件与 IT · 技术决策 · 1996
通过校验和而非数据在慢速链路上更新rsync文件
Tridgell和Mackerras将文件分块,仅传输未匹配部分,因此一次往返即可同步任意两个相似文件。
rsync(澳大利亚国立大学)
那一手
通过慢速链路复制文件时,两端已经共有的所有内容都被浪费。压缩只能带来两到四倍的改进,而普通差异工具需要两个文件位于同一台机器上,而这正是链路所无法实现的。
Andrew Tridgell和Paul Mackerras在1996年用远程差异解决了这个问题:接收方将文件分成块,发送每块的校验和,发送方在一次遍历中,使用滚动校验和(在每个字节位置计算成本低廉)找出自己哪些块与任何偏移处的块匹配。只有未匹配的数据和引用会通过网络传输。
这个设计只需要一次往返,因此延迟影响很小,即使文件差异较大时也能正确处理。Tridgell于1996年6月19日宣布了这个工具,作为rcp的替代,具有这种远程更新算法,并带有将通信与计算重叠的流水线。
为什么管用
- 滚动校验和让发送方以低廉成本扫描每个偏移
- 一次往返使其在高延迟链路下也快速
- 强校验和在数据传输前确认弱匹配
- 仅传输未匹配块,节省带宽与相似度成正比
值了多少在远端计算差异:发送校验和,而非内容聪明
可以搬走什么
当带宽稀缺且文件重叠时,发送证据而非数据:滚动校验和揭示了远端已存在的内容,而无需在同一位置拥有两个文件。
后来呢
rsync成为Unix上备份、镜像和软件分发的标准工具,其块校验和差异算法至今仍是工具的核心。1996年的报告仍是该算法的参考引用,其单次往返设计影响了后来的同步系统。
资料来源
发现哪里写错了?告诉我们。