文件增量同步之rsync算法

前言之前毕设有用到文件增量同步,于是乎就记录一下 。
场景在A和B两个不同端之间有相似度很高的文件,同时这个文件又比较大 。如果通过全量传输来更新,http传输量很大,非常不友好 。那么可以通过某些手段,只上传修改的内容,其余内容复用旧文件 。
重复块检测技术

  • 固定分块检测技术:固定分块检测的话,如果某一区域发生变化,之后分块将均无法检测命中块,命中率低且局限性大 。
  • 可变块检测技术:可变块很好解决上面的问题,例如CDC算法 。不过好像没有通用的解决方案,我是没找到 。
  • 滑动块检测技术:采用固定块,滑动检测是否命中,命中率高,但是相似度越低的文件,越耗时,例如:rsync增量传输算法,也是本文的讲解目标
rsync增量传输算法对于A、B文件进行同步为例,首先对A文件进行分块,并且对每一块进行摘要计算(弱摘要&强摘要),并将其摘要数据传输给B端 。B从第一字节开始,以相同大小的块滑动下去一一比较 。
首先计算当前块的弱摘要,若弱摘要命中,则计算强摘要是否相同;若均相同,则该区域是相同块;两个相同块之间的区域,则是差异块 。
  • 弱摘要采用Adler-32,生成速度快,但是可能出现重复 。
  • 强摘要采用md5,生成慢,但是有保障 。
 
文件增量同步之rsync算法

文章插图
 


    推荐阅读