一种分布式数据同步方法及系统
技术领域
本发明涉及分布式数据同步,具体地,涉及一种分布式数据同步方法及系统。
背景技术
在分布式数据备份系统中,多个业务系统需要共享一整套会发生变化数据集。对于单个业务系统而言,其仅能读写整套数据集中的一个子集,每个业务系统可以修改自己负责的子集,而多个业务系统的子集可以存在交集。在多个业务系统的子集存在交集的情况下,如果各个业务系统分别提交同一份数据,可能会造成数据之间的冲突。现有技术中,为了避免发生数据的冲突,需要控制在同一时刻只能由一个业务系统提交数据,因此影响了系统的工作效率。
发明内容
本发明的目的是提供一种分布式数据同步方法及系统,以提高数据的容灾性能,并提升系统资源的利用率。
本发明提供了一种分布式数据同步方法,该方法包括:第一客户端与中心服务器进行数据记录同步;第二客户端从所述中心服务器同步数据记录。
优选地,该方法还包括:在第一客户端与中心服务器进行数据记录同步之前,所述中心服务器向所述第一客户端和所述第二客户端广播配置信息。
优选地,在所述第一客户端初次提交数据记录至所述中心服务器的情况下,所述第一客户端与中心服务器进行数据记录同步包括:所述第一客户端提交数据记录至所述中心服务器;所述中心服务器确定所述第一客户端初次提交数据记录之后,所述中心服务器初始化数据记录版本号并将所述数据记录版本号发送至所述第一客户端,所述服务器将该数据记录版本号作为所述中心服务器的数据记录版本号存储,所述第一客户端将该数据记录版本号作为所述第一客户端的数据记录版本号和所述中心服务器的数据记录版本号存储。
优选地,在所述第一客户端非初次提交数据记录至所述中心服务器的情况下,所述第一客户端与中心服务器进行数据记录同步包括:如果所述第一客户端的数据记录版本号和所述中心服务器的数据记录版本号相同且数据记录被修改,则所述第一客户端将所述第一客户端的数据记录版本号加一,并将被修改的数据记录提交至所述中心服务器,所述中心服务器将所述中心服务器的数据记录版本号加一后发送至所述第一客户端;如果所述第一客户端的数据记录版本号和所述中心服务器的数据记录版本号相同且数据记录未被修改,则所述第一客户端不向所述中心服务器提交数据记录;如果所述第一客户端的数据记录版本号低于所述中心服务器的数据记录版本号且数据记录未被修改,则所述第一客户端从所述中心服务器同步数据记录;如果所述第一客户端的数据记录版本号低于所述中心服务器的数据记录版本号且数据记录被修改,则所述第一客户端和/或所述中心服务器按照配置的策略进行操作。
优选地,该方法还包括:所述第一客户端从所述中心服务器下载所述中心服务器的数据记录版本号和所述中心服务器的数据记录摘要,所述第一客户端计算所述第一客户端的数据记录摘要;如果第一客户端的数据记录摘要与所述服务器的数据记录摘要一致,则判定数据记录未被修改;如果第一客户端的数据记录摘要与所述服务器的数据记录摘要不一致,则判定数据记录被修改。
优选地,所述第一客户端以特定时间间隔或实时地与中心服务器进行数据记录同步。
优选地,第二客户端从所述中心服务器同步数据记录包括:所述第二客户端从所述中心服务器下载所述中心服务器的数据记录版本号,在所述第二客户端的数据记录版本号低于所述中心服务器的数据记录版本号的情况下,所述第二客户端从所述中心服务器同步数据记录。
优选地,所述第二客户端以特定时间间隔从所述中心服务器同步数据记录。
本发明提供了一种分布式数据同步系统,该系统包括客户端和中心服务器;所述客户端包括第一同步模块,所述中心服务器包括第二同步模块;所述第一同步模块与所述第二同步模块进行数据记录同步。
优选地,所述中心服务器还包括广播模块,用于在所述第一同步模块与所述第二同步模块进行数据记录同步之前向所述客户端广播配置信息。
优选地,所述第二同步还包括第二判定模块、第二数据记录版本号处理模块和第二存储模块;所述第二判定模块,用于判定所述第一同步模块是否初次提交数据记录;所述第二数据记录版本号处理模块,用于在第二判定模块判定所述第一同步模块初次提交数据记录的情况下,初始化数据记录版本号,并将所述数据记录版本号发送至第一同步模块;所述第二存储模块,用于将初始化的数据记录版本号作为所述中心服务器的数据记录版本号存储。
优选地,其特征在于,所述第一同步模块包括第一判定模块、第一数据记录版本号处理模块、数据记录提交模块、数据记录更新模块、第一策略执行模块和第一存储模块;所述第一判定模块,用于在所述第一同步模块不是初次提交数据记录的情况下,判定所述客户端的数据记录版本号和所述中心服务器的数据记录版本号是否相同且数据记录是否被修改;第一数据记录版本号处理模块,用于在所述第一同步模块不是初次提交数据记录的情况下,将所述客户端的数据记录版本号加一;所述数据记录提交模块,用于所述客户端的数据记录版本号和所述中心服务器的数据记录版本号相同且数据记录被修改的情况下,将被修改的数据记录提交至所述第二同步模块;在所述客户端的数据记录版本号和所述中心服务器的数据记录版本号相同且数据记录未被修改的情况下,不向所述中心服务器提交数据记录;所述数据记录更新模块,用于在所述客户端的数据记录版本号低于所述中心服务器的数据记录版本号且数据记录未被修改的情况下,从所述第二同步模块同步数据记录;第一策略执行模块,用于所述客户端的数据记录版本号低于所述中心服务器的数据记录版本号且数据记录被修改的情况下,按照策略进行操作;所述第二数据记录版本号处理模块,用于在第二判定模块所述第一同步模块不是初次提交数据记录的情况下,将所述数据记录版本号发送至第一同步模块;所述第一存储模块,用于将初始化的数据记录版本号作为所述第一客户端的数据记录版本号和所述中心服务器的数据记录版本号存储,并将加一后的所述客户端的数据记录版本号存储。
优选地,其特征在于,第二同步模块,还包括第二数据记录摘要计算模块,用于计算所述中心服务器的数据记录摘要;第一同步模块还包括下载模块和第一数据记录摘要计算模块,所述下载模块用于从所述第二同步模块下载所述中心服务器的数据记录版本号和所述中心服务器的数据记录摘要,所述第一数据记录摘要计算模块用于计算所述客户端的数据记录摘要;所述第一判定模块,用于在客户端的数据记录摘要与所述服务器的数据记录摘要一致的情况下,判定数据记录未被修改;在客户端的数据记录摘要与所述服务器的数据记录摘要不一致的情况下,判定数据记录被修改。
优选地,所述第一同步模块以特定时间间隔或实时地与第二同步模块进行数据记录同步。
优选地,所述第二同步模块还包括第二策略执行模块,用于所述客户端的数据记录版本号低于所述中心服务器的数据记录版本号的情况下,按照策略进行操作。
本发明通过对数据记录进行同步,使得不同的客户端可以同时对同一数据块中的记录进行修改,采用基于策略文件配置的方式实现权限和数据范围的划分以及冲突的处理,并且在数据上传和下载的过程中,仅仅上传和下载修改的部分,提高了系统资源的利用率。本发明还支持在线和离线多种方式同步数据并支持自动、定时等多种触发方式进行数据同步。
附图说明
附图是用来提供对本发明的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本发明,但并不构成对本发明的限制。在附图中:
图1是本发明提供的数据同步流程示意图;
图2是本发明提供的分布式数据同步系统示意图。
具体实施方式
以下结合附图对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。
为了实现分布式的数据备份,本发明提供了一种分布式数据同步方法,在该同步方法中涉及中心服务器以及若干个客户端。客户端的数量可以根据需要进行设置,在本发明提供的实施例中,以两个客户端作为示例,即第一客户端和第二客户端。需要说明的是,在正常的数据备份的过程中,第一客户端和第二客户端是不同的数据库系统,在故障恢复的过程中,第一客户端和第二客户端可以是相同的数据库系统。
本发明提供的分布式数据同步方法,包括:第一客户端与中心服务器进行数据记录同步;第二客户端从所述中心服务器同步数据记录。具体而言,第一客户端可以根据自身的判断,必要的情况下,就可以将数据记录提交到中心服务器,由中心服务器进行备份;数据记录可以是数据表中每一行中记载的数据信息。需要说明的是,为了保证服务器和客户端的配置一致,分布式数据同步系统在进行数据记录备份之前,可以向各个客户端广播系统配置表。系统配置表的结构如下:
表1系统配置表
ID |
SYS_NAME |
IP_ADDR |
ALLOW_SERVICES |
AVAILABLE |
ENC_METHOD |
MAC_ADDR |
字段的含义如下:
对于第一客户端而言,如果其向中心服务器提供数据记录,中心服务器可以根据该中心服务器存储的数据记录版本号来判定其是否为初次提供数据记录,例如不存在该与第一客户端的数据记录版本号对应的中心服务器数据记录版本号,则判定其初次提供数据记录。可选地,中心服务器可以将该数据记录版本号保存为中心服务器数据记录版本号和第一客户端数据记录版本号;需要说明的是,中心服务器也可以只保存中心服务器数据记录版本号。同样地,第一客户端发现自己未存储数据记录版本号,则认定自己为初次提交数据记录,不对第一客户端的数据记录版本号进行处理。在第一客户端初次提供数据记录的情况下,中心服务器为第一客户端初始化一个数据记录版本号,并将该数据记录版本号发送至第一客户端,供第一客户端存储,作为第一客户端的数据记录版本号和中心服务器的数据记录版本号。如果第一客户端不是初次提交数据记录,则其将数据记录版本号加一,并提交数据记录至中心服务器,如果中心服务器判定第一客户端不是初次提供数据记录,将第一客户端的版本号加一后发送至第一客户端,第一客户端可以存储该数据记录版本号作为中心服务器的数据记录版本号。
第一客户端可以按照一时间间隔或实时地向中心服务器提供数据记录,但在提供数据记录之前,第一客户端需要进行必要性的判断,例如如果所述第一客户端的数据记录版本号和所述中心服务器的数据记录版本号相同且数据记录被修改,则将被修改的数据记录提交至所述中心服务器;如果所述第一客户端的数据记录版本号和所述中心服务器的数据记录版本号相同且数据记录未被修改,则所述第一客户端不向所述中心服务器提交数据记录;如果所述第一客户端的数据记录版本号低于所述中心服务器的数据记录版本号,则在数据记录修改的情况下,所述第一客户端从所述中心服务器同步数据记录;在在数据记录未修改的情况下,所述第一客户端或所述中心服务器按照配置的策略修改。由于中心服务的数据记录版本号不会低于客户端的数据记录版本号,因此只要第一客户端的数据记录版本号不同于所述中心服务器的数据记录版本号,就可以进行数据记录更新。第一客户端可以定期或实时地从中心服务器下载数据记录版本号。
在判断数据记录是否被修改时,可以根据第一客户端的数据记录记录摘要与所述服务器的数据记录记录摘要是否一致来判断,如果一致,则数据记录未被修改,否则数据记录被修改。可选地,第一客户端的数据记录的摘要可以由第一客户端自己计算,而中心服务器的数据记录的摘要可以由中心服务器计算,第一客户端可以下载该数据记录摘要。
对于第二客户端而言,其可以从中心服务器同步第一客户端上传到中心服务器的的数据记录,此时,该第二客户端可以向中心服务器请求更新数据记录,从而使得第一客户端和第二客户端共有的数据记录保持一致。在进行数据记录更新后,第二客户端自身的数据记录摘要以及数据记录版本号均与中心服务器的数据记录摘要和数据记录版本号保持一致。
为了便于在同步过程中的处理,客户端和中心服务器均可以保存版本信息表,不过中心服务器的数据记录版本信息表只需要保存记录摘要信息和版本信息,而客户端的数据记录版本信息表除了保存记录摘要信息和版本信息之外,还要保存数据记录提交、数据记录更新操作等等信息。数据记录版本信息表如下所述:
表2数据记录版本信息表
DVN_BASE_DIGEST |
DVN_SERVER_DIGEST |
DVN_CLIENT_VERSION |
DVN_SERVER_VERSION |
数据记录版本信息表中各字段的含义如下:
图1示出了客户端与中心服务器进行数据记录同步的示意流程图。首先客户端判断是否为初次提交数据记录,如果是的话,就将数据记录发送到中心服务器而不对数据记录版本号进行处理,而中心服务器接收到之后发现没有数据记录版本号,则认定为初次提交,然后初始化版本号并发送给客户端。如果客户端判断不是初次提交数据记录,则判断客户端的版本号和中心服务器的版本号是否相同,如果不同的话,可以分为两种情况,一种情况是客户端没有对数据记录进行修改,则可以直接从中心服务器更新该数据记录,另一种情况是客户端对该数据记录进行了修改,则可以按照策略进行处理;如果相同的话,则判断数据记录是否被修改,如果没有修改,则结束流程,如果数据记录被修改,则将数据记录版本号加一,并将数据记录提交至中心服务器。策略可以包括:例如客户端从中心服务器更新数据记录而放弃提交数据记录,或者客户端从中心服务器更新数据记录并将自己的修改与更新的数据记录进行合并后再提交数据记录到中心服务器;由于本发明中客户端之间可以进行异步操作,所以可能发生不同的客户端在不知道其它客户端对数据记录修改的情况下,同时或几乎同时将对相同版本的数据记录的修改提交到中心服务器,此时服务器也可以应用策略,例如可以根据客户端的优先级来决定接受高优先级客户端提供的数据记录而拒绝低优先级客户端提供的客户记录,或者按照时间先后顺序依次更新数据记录(即最后保存后到达的数据记录),或者查看客户端的数据记录版本,拒绝数据记录版本低于中心服务器的数据记录版本的客户端提供的数据记录(即在客户端的数据记录版本与中心服务器的数据记录版本不同的情况下,客户端需要先从中心服务器进行数据记录同步)等等。上述方案中,客户端为了判定自己是否进行了修改,在客户端的数据记录版本号和中心服务器的数据版本号不同的情况下,可以保留与中心服务器的数据记录版本号相同的情况下的服务器数据记录摘要从而便于比较;也可以通过其他方式实现,例如客户端保存标志位,在修改了自身的数据记录的情况下,可以将该标志位置1,在完成同步之后,将该标志位复位。
相应地,本发明提供了一种分布式数据同步系统,如图2所示,该系统包括客户端和中心服务器;所述客户端包括第一同步模块,所述中心服务器包括第二同步模块;所述第一同步模块与所述第二同步模块进行数据记录同步。为了便于配置,中心服务器还包括广播模块,用于在所述第一同步模块与所述第二同步模块进行数据记录同步之前向客户端广播配置信息。
在数据记录同步的过程中,需要对是否初次提交数据记录进行判断,因此第一同步模块包含了第一判定模块,第二同步模块包含了第二判定模块。第一判定模块可以根据是否存在数据记录版本号来判断是否为初次提交数据记录,并且还可以进一步判断客户端的数据记录版本号和服务器的数据记录版本号是否相同以及数据记录是否被修改。第二判定模块,可以判断是否为初次提交数据记录。第二同步模块还包括第二数据记录版本号处理模块,其在第二判定模块判定第一同步模块初次提交数据记录的情况下,初始化数据记录版本号,并将所述数据记录版本号发送至第一同步模块。第二同步模块还包括第二存储模块,用于将初始化的数据记录版本号作为所述中心服务器的数据记录版本号存储。可替换地,第二存储模块可以同时将初始化的数据记录版本号存储为客户端的数据记录版本号和中心服务器的数据记录版本号存储。第一同步模块还包括第一数据记录版本号处理模块、数据记录提交模块和数据记录更新模块。第一数据记录版本号处理模块,用于在所述第一同步模块不是初次提交数据记录的情况下,将所述客户端的数据记录版本号加一;所述数据记录提交模块,用于所述客户端的数据记录版本号和所述中心服务器的数据记录版本号相同且数据记录被修改的情况下,将被修改的数据记录提交至所述第二同步模块;在所述客户端的数据记录版本号和所述中心服务器的数据记录版本号相同且数据记录未被修改的情况下,不向所述中心服务器提交数据记录;所述数据记录更新模块,用于在所述客户端的数据记录版本号低于所述中心服务器的数据记录版本号且数据记录未被修改的情况下,从所述第二同步模块同步数据记录;第一策略执行模块,用于所述客户端的数据记录版本号低于所述中心服务器的数据记录版本号且数据记录被修改的情况下,按照策略进行操作。第二数据记录版本号处理模块,还用于在第一判定模块所述第一同步模块不是初次提交数据记录的情况下,将所述数据记录版本号发送至第一同步模块。第一同步模块还包括第一存储模块,用于将初始化的数据记录版本号作为所述第一客户端的数据记录版本号和所述中心服务器的数据记录版本号存储,并将加一后的所述客户端的数据记录版本号存储。优选地,第一存储模块还存储从中心服务器下载的中心服务器数据记录版本号。
第二同步模块,还包括第二数据记录摘要计算模块,用于计算所述中心服务器的数据记录摘要;第一同步模块还包括下载模块和第一数据记录摘要计算模块,所述下载模块用于从所述第二同步模块下载所述中心服务器的数据记录版本号和所述中心服务器的数据记录摘要,所述第一数据记录摘要计算模块用于计算所述客户端的数据记录摘要;第一判定模块在客户端的数据记录记录的摘要与所述服务器的数据记录记录的摘要一致的情况下,判定数据记录未被修改;在客户端的数据记录记录的摘要与所述服务器的数据记录记录的摘要不一致的情况下,判定数据记录被修改。所述第二同步模块还包括第二策略执行模块,用于所述客户端的数据记录版本号低于所述中心服务器的数据记录版本号的情况下,按照策略进行操作。第一客户端自己的数据记录记录摘要可以自行计算,中心服务器的数据记录记录可以由中心服务器发送或由客户端请求得到。客户端提交数据记录时,可以定时提交或实时提交,而客户端更新数据记录时,可以定时从中心服务器更新数据记录。
中心服务器可以与多个客户端进行通信,可以为每个客户端保留特定的存储区域以供保存客户端提交的数据记录以及将保存的数据记录下发给相应的客户端。
以上结合附图详细描述了本发明的优选实施方式,但是,本发明并不限于上述实施方式中的具体细节,在本发明的技术构思范围内,可以对本发明的技术方案进行多种简单变型,这些简单变型均属于本发明的保护范围。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本发明对各种可能的组合方式不再另行说明。
此外,本发明的各种不同的实施方式之间也可以进行任意组合,只要其不违背本发明的思想,其同样应当视为本发明所公开的内容。