基于diff的文件同步算法(上)

1.写在前面

文件同步的核心问题是新旧版本的对比问题。这里所说的版本是指用于区分文件变更的一种状态标记,它可以是我们通常所说的版本号,也可以是时间戳,如修改时间。本文介绍一种基于diff的文件同步算法,共分为两篇,上篇介绍diff算法的服务端实现,下篇介绍diff算法的客户端实现。

2.算法概述

从客户端的角度来看,文件同步的本质是本地文件集合与云端文件集合的对比。从实现角度来讲,客户端会保存一份云端文件集合的快照,通过将快照和云端集合对比可以计算出云端文件变更,通过将快照和本地集合对比则可以计算出本地文件变更。对于本地文件的变更,需要将文件提交至云端;对于云端文件的变更,需要将文件同步至本地。对于文件同步在云端和本地都有修改的情况下,就需要进行冲突处理。

如果每个同步周期需要获取云端文件集合,文件量小还可以接受,文件量一大,对带宽和服务器压力都会存在瓶颈,而且很多文件可能根本就没有变更,这会造成很多无效的对比,浪费计算资源。所以需要一种增量机制,用于增量拉取云端变更的文件。

diff算法是利用修改时间作为增量机制,其核心是每次diff时会记录下当前diff的时间戳,客户端下次diff时,带上上次diff时返回的时间戳(通常将时间戳编码到cursor中),这样就能增量获取到一段时间内的变更记录了。由于每次diff的变更文件集合可能非常大,所以需要进行分页操作,有两个主要的问题需要解决:

  • 首次diff问题
  • 用时间维度获取变更记录时,如(t1, t2]之间的文件变更,由于t1、t2通常是使用秒作为精度,每次分页diff出的文件记录时,如果存在闭区间t2时刻文件记录,则无法判断t2时刻是否存在更多的记录。

3.全量同步

首次diff通常发生在客户端本地快照没有数据且第一次请求时,这种情况通常指全量同步。服务器在处理全量同步时是希望尽量将当时请求时刻以内的所有文件数据都分页吐给客户端。由于时间戳存在增量同步的问题,可以使用文件惟一标识迭代出全量数据。如果记文件的惟一标识为fid,修改时间为mtime,分页大小为pagesize,SQL查询具体做法为:

 

select fields from file_meta where fid>last_fid and mtime<=stime sort by fid ASC limit pagesize;

其中:

  • stime是第一次全量同步时,记录下当前请求的时间戳,主要是明确一个时间限界内的全量数据,防止在全量同步过程中又出现新的变更;
  • last_fid为最近一次查询结果中最后一条记录的fid,首次查询last_fid为0;
  • 判断是否有更多数据通常采用多取一条记录进行判断;
  • 由于并不知道全量同步过程中是否有新的文件变更,需要进行一次增量同步;

4.增量同步

前面说到在按时间维度进行增量同步时,由于需要分页,并不知道闭区间内是否有更多文件变更记录。举个粟子,当我们查询出(t1, t2]的文件集合时,如果恰好有几个文件的修改时间等于t2,而且本次分页并没有拉取完。下次diff时会查询(t3, t4]时间区间内的文件(t3>t2),由于上次并没有拉取完,即t2时间可能还有更多数据,如果直接查询(t3, t4]时间区间的文件,那么可能会丢失t2时间的文件记录。

对于以上情况,当查询(t1, t2]时间区间内的文件时,针对返回的文件,我们需要对最后一秒的文件进行单独处理。如果返回的文件的修改时间均是在一秒内,那么称为单秒增量同步,其它情况称为正常增量同步。

4.1.正常增量同步

对于正常增量同步虽然所有文件的mtime不是在同一秒内,但需要处理最后一秒问题,就像前面的例子,当分页未完成时,我们没办判断最后一秒是否还有更多数据,所以一个简单的做法是从本次查询的文件记录中,从最后一个文件开始,移除mtime相同的文件,即把最后一秒的文件留到下次进行查询。当最后一秒的文件足够多,比如超过一个分页时,就会触发单秒增量同步。正常增量同步查询SQL表示:

 

select fields from file_meta where mtime>t1 and mtime<=t2 sort by mtime DESC limit pagesize;

4.2.单秒增量同步

单秒增量同步是指查询一秒内的文件记录,这种查询比较简单,如果用SQL表示如下:

 

select fields from file_meta where mtime=xxx sort limit pagesize;

5.其它工程问题

在工程实现上还需要注意很多问题,比如主从同步、频率控制、数据重置等。

5.1.主从同步

对服务器来讲,文件数据的存储量通常都比较大,不可能采用单机就能搞定,一般都会采用分布式进行存储,对于分布存储就会存储主从同步问题。当写操作完成后,马上读取,如果主从同步未完成,并不能读取出数据。所以在diff的时间滑动窗口中,需要做一定的延迟处理,延迟时间肯定需要大于主从同步的时间。

5.2.频率控制

对于diff接口,可能会调用的比较频繁,如果不进行频率控制,高峰期时可能会造成雪崩效率,diff接口需要有降级和频控处理。diff接口一般来说是一种后台行为,并不需要进行实时调用,当客户端进行增量同步时,如果在一段很短的时间内连续调用,应触发频控策略。

5.3.数据重置

由于客户端会缓存云端数据快照,如果客户端存在脏数据,将导致同步算法失败。服务器应该和客户端约定一种数据重置机制,当服务器端数据升级或出现脏数据时,服务端可以下发数据重置命令,客户端收到数据重置命令后应该清空本地缓存,重新进行全量同步。

6.总结

diff算法需要处理全量同步和增量同步的情况。全量同步按照文件id维度排序分页下发;增量同步按照时间维度分页下发,由于分页原因以及时间精度问题,不能判断最后一秒内是否存在更多的数据需要查询,因为把最后一秒的数据进行单独查询。最后就是需要考虑一些工程上的问题,如主从同步、频率控制、接口降级、数据重置等问题。



作者:AlgoPeek
链接:https://www.jianshu.com/p/1d889fb14ca3
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439103.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虎年第一篇-CCNP-第九篇-BGP(一)

CCNP-第九篇-BGP(一) 首先,开工啦,祝大家2022新年快乐虎年大吉,虎虎生威哦BGP是一个网络工程师的分水岭 这是真的,BGP一般很大的企业才能用得上,或者ISP运营商 人家可以不用,但是你不能不会吧, BGP,CCIE必考 BGP有四节课基础,后面CCIE的部分还有 从BGP开始就要换一种理念 因为之…

rsync算法原理及使用

如果服务器之间需要保持某些文件的一致&#xff0c;我们可以使用scp来复制&#xff0c;如果需要长期保持一致&#xff0c;可以配合crontab脚本来使用。但是此时我们有更优的方式&#xff0c;就是rsynccrontab来实现定时增量传输保持文件一致。 rsync功能很强大&#xff0c;网上…

CCNP-第十篇-BGP(二)

CCNP-第十篇-BGP(二) 首先 BGP都基本上部署在PE,CE设备 PE:Provider edge 运营商边界 CE:Customer edge 用户边界 建立BGP 1.一般呢,是会使用环回口建立BGP 2.因为他是虚拟接口,很稳定,而且不会down,只要系统在,他就不会down;; 3.如果他down了就是整个网络都断了 4.节约接口使…

数据同步算法研究

1、引言 基于LAN或WAN的网络应用之间进行数据传输或者同步非常普遍&#xff0c;比如远程数据镜像、备份、复制、同步&#xff0c;数据下载、上传、共享等等&#xff0c;最为简单的做法自然就是对数据进行完全复制。然而&#xff0c;数据在网络上来回被复制多次后就会存在大量副…

CCNP-第十一篇-BGP(三)(精髓篇)

CCNP-第十一篇-BGP(三) BGP十三条线路原则(大点) 能修改的前7条,後6条是无法修改的,所以实际上7条 跟ACL一样,从上往下执行,比如第一条比较出来了就不会继续往下了 工作中比较多用的,第四条根据as-path一,权重-Weight 1.思科里面叫权重,是思科私有的,在华为叫首选优先级(Pre…

WSS 数据库表中的 UserInfo 表中的 tp_SystemId 字段的使用

在 WSS 的数据库中&#xff0c;UserInfo表的 tp_SystemId 记录的是用户登录验证时需要用到的数据&#xff0c;是此用户在 AD( Active Directory ) 中的 SID( Security ID )。此字段的数据很重要&#xff0c;不小心改动的话&#xff0c;此用户将不能登录 WSS。 这里介绍一下如何…

CCNP-第十二篇-BGP(四)

CCNP-第十二篇-BGP(四) 这次接着上次的选路原则继续干 上次是前6条,现在是跟后面的7条 BGP的选路原则默认是11条,最大可以配置后去到13条七.EBGP路由优于IBGP 这个不知道咋讲呢 如果A-B-C 那么A-B为IBGP B-C为EBGP的话 他们同时宣告一个条目 在两边对称的情况下,会选择EBGP宣告…

使用Module自定义网站定义(Site Definition)

在WSS SDK中有一篇文章介绍了使用Modules添加文件到网站定义中(可以在http://msdn.microsoft.com中搜索Using Modules to Add Files to a Site Difinition找到)&#xff0c;不过很多东西只是稍微提了一下&#xff0c;具体怎么操作并没有讲到。 一般的&#xff0c;我们可以用下…

CCNP-第十三篇-BGP(五)

CCNP-第十三篇-BGP(五) 这一节要讲下BGP联邦 干啥用的呢? 打破IBGP的传递问题 其实这个东东有点像BGP版本的NAT 啥意思呢? 我自己启动AS100 但是对外宣告200 通过EBGP打破IBGP的传递问题总有AS:1-65535 私有AS 65412-65535 网络环境 环境搭建好之后,R2和R3互为ibgp,as为65…

CCNP-第十五篇-VXLAN(一)

CCNP-第十五篇-VXLAN(一) 到了这个阶段呢,怎么说呢,简单的NP级别的交换我都跳过去了,但是后期会补, 所以这个衔接可能新手或者不会的看的有的迷茫 但是出自个人原因只好这么干了,VXLAN3篇差不多就到IE的MPLS,各种VPN 然后为什么先发第十六不发十五呢 十五是BGP的综合实验,暂时…

Sites Table

The Sites Table stores information about site collections. The Table is defined using T-SQL syntax, as follows. TABLE <table name>(FullUrl nvarchar(255) DEFAULT N’’,Id uniqueidentifier,NextUserOrGr…

CCNP-第十六篇-VXLAN效果演示+端口镜像

CCNP-第十六篇-VXLAN(二)端口镜像 这一篇主要搞vxlan的实操演示 VXLAN演示 正常的ensp里面应该是没这个镜像的 要用到这个CE12800 我这有,可以提供给大家使用 链接&#xff1a;https://pan.baidu.com/s/1nqGo8a7mmWpthu-CuBC80Q?pwdcjnb 提取码&#xff1a;cjnb 这玩意要手动…

CCNP-第十四篇-BGP综合实验

CCNP-第十四篇-BGP综合实验 大家好呀,学了那么长时间的BGP,又是一个巨大分水岭,那怎么能没综合实验呢? 答案以及个人录制视屏(数字那个视频因为录制软件的问题看不到命令行可以直接看后面的,不喜勿喷) 链接&#xff1a;https://pan.baidu.com/s/159TcFZyugYgupXzgBN1l-w?pwd…

CCIE-LAB-第一篇-教学导入环境

CCIE-LAB-第一篇-教学导入环境 2022/2/23 时间好紧啊草 开始讲lab就内容会变少,更新速度会变快. 做IE LAB 头都大,不信去看拓扑图就知道了,在第二篇 首先下载这四个东西导入进入vm里面 链接&#xff1a;https://pan.baidu.com/s/1lrrlSyEMpi0jUde_VhLR6A?pwdfgdt 提取码&a…

CCIE-LAB-第二篇-端口聚合LACP+RSTP

CCIE-LAB-第二篇-端口聚合LACP+RSTP 实际中,思科只会给你5个小时去做下面的全部配置 这个是CCIE-LAB的拓扑图 解决101.102.110-交换机,在左上角,请注意还有生成树的环境 做链路聚合 TAG:不要修改预配置的,他预先的LACP 关日志 比如这些烦人的东东你可以关掉他的日志 no log…

CCIE-LAB-第三篇-VRRP+SLA

CCIE-LAB-第三篇-VRRP+SLA 实际中,思科只会给你5个小时去做下面的全部配置 这个是CCIE-LAB的拓扑图 问题 简单翻译 做冗余,意思就是VRRP.必须用优先级. 每个路由器都要用ping包去检测r11和r12的接口,每5秒一次,400毫秒内收不到回复就会通告不可达.如果11和12都挂了,那么交换…

CCIE-LAB-第四篇-OSPFv2+SHA384+BFD

CCIE-LAB-第四篇-OSPFv2+SHA384+BFD 实际中,思科只会给你5个小时去做下面的全部配置 这个是CCIE-LAB的拓扑图 问题 本次修改设备为sw101.sw102.sw201.sw202 问题描述 1:启动OSPFv2,保证邻居关系 2.保障认证和完整性,在冗余连接上. DC和HQ要保证OSPF的源数据,

CCIE-LAB-第五篇-DHCP+DHCP-Realy+DHCP snooping

CCIE-LAB-第五篇-DHCP+DHCP-Realy+DHCP snooping 实际中,思科只会给你5个小时去做下面的全部配置 这个是CCIE-LAB的拓扑图 问题 翻译: 第1.5节:针对HQ的DHCP IPV4服务(2点)问题使HO VLAN 2000和VLAN 2001中的主机能够根据这些要求1通过DHCP获得其IP配置。在SW211上,分别…

SharePoint三个主要数据库

三个主要数据库解释&#xff1a; sharepoint_admin_content -- 管理中心数据库 sharepoint_config -- 配置数据库 WSS_content -- 网站内容数据库 数据库中表解释&#xff1a; sharepoint_config.objects :物理对象表,包括站点,数据库,工作流作业等;其中的ID字段&#xff…

CCIE-LAB-第六篇-IPV6+SLLAC

CCIE-LAB-第六篇-IPV6+SLLAC 实际中,思科只会给你5个小时去做下面的全部配置 这个是CCIE-LAB的拓扑图 问题 翻译: 第1.6节:HQ中的IPV6(点)问题在sw101和sw102上为交换机虚拟接口实施Pv6(SVT的SVLAN 2000和Vlan200l根据这些要求SSW10接口VLAN 2000:2001:DB8:1💯1/64接口…