文件同步技术介绍!
随着计算机技术和互联网的快速发展以及智能终端设备的兴起,移动化办公已经成为常态。目前,越来越多的人们拥有多个智能终端设备,这极大的方便了人们的工作和生活。智能终端设备的普及在给人们带来方便的同时,也给人们的文件管理提出了新的挑战。如何保证多个设备之间的数据一致性以及如何高效地进行文件同步成为了人们关注的焦点,除此之外,数据的可追溯性也逐渐进入人们的视野。
现有的文件同步软件大都没有提供数据的可追溯性功能,一旦用户修改文件并保存后就无法回退到该文件之前的状态。文件同步是用于保持不同设备上文件一致性的应用程序。用户通过设置一个文件同步目录来保存需要同步的文件,当用户更新文件时,这些变化将自动的同步到该用户的其他设备上。当人们在旅行、出差时需要访问某些远程文件时,文件同步系统的作用就突显出来了,文件同步的应用也越来越广。
一.重复数据删除技术
文件同步系统需要存储用户数据,这些数据往往存在许多冗余,若对所有的用户数据进行存储势必会降低系统存储空间的利用率。本文通过分析研究了文件系统中常用的重复数据删除技术,并利用滑动分块的重复数据删除算法实现冗余数据的删除。
滑动分块算法:使用固定大小的滑动窗口计算文件每个位置处固定大小数据块的弱校验值,仅在弱校验值匹配成功之后,该算法将计算数据块的 Hash值并用于实现更为准确的重复数据查找。其中只有当强弱校验值都匹配成功时,才认为找到重复数据并将其作为一个分界块,该分界块与前一个分界块之间的数据形成一个不定长度的数据块并存储该数据块的原始信息及其强弱校验值,接着移动滑动窗口大小的距离开始查找;当匹配过程中任何一个环节失败或者数据块大小达到滑动窗口大小,都意味着没能找到重复数据,因此需要滑动窗口到下一个位置处。滑动分块算法结合了定长分块和变长分块算法的优点,它通过采用强弱校验值的方式,可以避免为不相同的数据分块计算 Hash 值,从而降低了算法的运行时间。基于变长分块的特性,滑动分块同样能保证对数据插入或删除只会影响附近的数据块,后续的相同数据块同样能通过算法匹配出来。
二.文件同步算法
例如:在服务器端有一个文件 A,客户端有一个文件 B,现在需要将文件 A 的内容同步到文件 B 中,传统的做法就是将服务器端的文件 A 的所有数据通过网络发送到客户端并重写文件 B。然而,当文件 A 和文件 B 具有一定的相似度时,这种方式将会造成网络带宽的浪费。Andrew Tridgell 在 1996 年提出的Rsync同步算法巧妙地解决了上述问题。Rsync 同步流程:
1) 客户端采用定长分块算法对文件进行分块,并采用 Adler-32算法计算分块的弱校验值和 MD5 算法计算强校验值;
2) 客户端将文件分块编号强弱校验值发送给服务器进行重复数据查找;
3) 服务器接收到文件分块信息后,由强弱校验值建立查找树,并将待同步的文件进行分块进行重复数据查找;
4) 若服务器查找到重复数据,则向客户端发送重复数据块的编号,否则发送文件内容信息;
5) 客户端在接收到来自服务器的信息后,并根据这些信息构造服务器端的文件,从而实现将服务器端的文件同步到客户端。
在 Rsync 算法中,最关键的部分就是上述流程中的步骤2),它通过两轮校验找出文件之间的相同部分,Rsync服务器在接收到来自客户的文件同步请求及分块信息之后,利用分块信息建立查找树,随后服务器将待同步的文件通过重叠文件每个偏移分块的方式查找匹配数据块。
三.文件监控技术
当用户数据发生变化时,用户通常希望同步软件能自动将变化的文件同步到服务器端,为了实现这种效果需要监控同步目录下的文件,从而及时地进行同步操作。
目前,市面上存在不少文件同步系统,如 360 云盘、百度云盘、微云的云存储系统等,它们都有一个共同的特征就是依靠强大的免费存储空间来获取用户。实际上,大部分用户也只是将这类云存储作为一个云端的数据备份网盘。由于它们并没有提供给用户关于文档变更的历史信息,一旦用户无意间更改某个文件之后,要想重新获取之前版本几乎是不可能的。
在当前的云同步系统中,用户如果需要保存某个文件的多个版本通常需要手动的重命名文件,然后上传到同步系统中,随后在其他设备上进行操作,如此繁琐的操作使得用户体验极为不佳。当用户维护的版本过多时,要记住各个不同版本之间的差异本身就是一件很困难的事,同时,在使用时用户还需要在众多相似文件名中找出需要回退的版本,为此用户需要不停的查看对比,才能确定回退的版本;此外,由于用户包含众多相似的文件,因此这些相似的文件中必然有一部分数据是重复,对于同步系统来说,重复数据的存储将导致系统存储空间的利用率降低。针对上述问题,文件同步软件能提供很好的解决方案并有很大的市场前景。
上一篇:关于SD-WAN技术的介绍!