如果他们的文件存储在云中,Dropbox等服务如何实现增量编码?

时间:2011-05-28 18:20:55

标签: amazon-s3 cloud rsync dropbox

Dropbox声称在同步期间,只有部分更改的文件被传输回主服务器,这显然是一项很棒的功能,但他们如何对存储在Amazon S3云中的文件进行更改?例如,假设用户桌面上的30页文档仅包含对第4页的更改.Dropbox现在会同步代表更改的块以及后端发生的情况,如果它们存储的文件位于云中?这是否意味着他们必须将存储在S3中的30页文档下载到他们的服务器,然后执行代表第4页的块的替换,然后上传回云?我怀疑情况会是这样,因为那会有些低效。我能想到的另一个选择是,如果Amazon S3基于字节范围提供存储在云中的文件的更新,例如,从字节100-200发出对文件X的PUT请求,这将从100到200替换所有字节具有PUT请求的值。所以我很好奇使用其他云服务(如亚马逊)的公司如何实现这种类型的同步。

由于

2 个答案:

答案 0 :(得分:5)

由于S3和类似的存储不提供文件系统功能,任何假装存储文件和目录的东西都需要模拟文件系统。在执行此操作时,文件通常会拆分为特定大小的页面,其中每个页面都存储在存储中的单独文件中。这样,更改的块只需要上传一个页面(例如),而不是整个文件。我应该注意,对于像office文档这样的文件,如果文件大小发生变化,这种方法可能会出错 - 例如,如果您在开头插入页面或删除页面,那么整个文件将被更改,并且需要完整的文件要重新上传。我们没有分析Dropbox如何完成他的工作,我刚刚描述了常见的场景。还存在不同的“补丁算法”,其中可以在本地创建补丁(如果Dropbox在缓存中具有较旧的本地副本),然后应用于服务器上的一个或多个块。

答案 1 :(得分:0)

有几种同步工具可以通过线路传输增量,如rsync,rdiff,rdiff-backup等。对于与S3的双向同步,例如有s3rsync等付费服务。对于纯客户端同步,可以考虑zsync之类的工具(许多人用来推出应用更新)。

另一种方法是对目录进行tar-ball,生成增量文件(使用rdiff或xdelta3),并使用时间戳作为密钥的一部分来上传增量文件。为了同步,您需要做的就是在客户端执行这两项检查:

  1. 您拥有S3中的所有delta文件。如果没有拉它们并应用它们来生成最新的备份状态。
  2. 您的上一个备份状态对应于您当前的目录。如果没有生成新的增量文件并推送到S3。
  3. 此处的相关因素是客户端至少100%的额外空间利用率。但是这种方法可以帮助您在需要时恢复更改。