本发明涉及适应低质量通信链路的高可用软件系统内数据同步方法。
背景技术:
着信息化程度的不断提高,企业对信息系统的依赖程度越来越高,业务系统的连续性和灾难保护的重要性也越来越突出。对某个软件系统而言,为提高该软件系统的高可用特性,一般采用多实例的部署方式,即在多个地点部署该软件系统实例,多个实例之间同步状态数据,主用实例故障时其他实例接替提供服务。在该模式下,多实例间的数同步是否完整成为了实例间接替能否成功的关键。
当前,多实例间的同步方式包括以下几种:
1、基于存储设备之间的同步或异步同步。该方式通过存储设备捕捉软件系统的io情况,将每次写数据通过存储之间的链路实时同步至备用软件系统使用的存储。使用该方式,要求存储之间有高速的网络带宽,并且若采用实时同步,还对存储间的高速网络通信时延有很高的要求。该方法无法适应低带宽、高时延、多抖动的网络环境。
2、基于数据库间的同步或异步同步。该方式通过数据库之间的同步工具实现两个数据库之间的数据同步或异步备份,该方式同样需要对每个数据库的写操作进行同步,对通信网络带宽要求较高,若采用实时方式,还需要有很低的通信时延。该方法无法适应低带宽、高时延、多抖动的网络环境。
3、基于内存同步的同步。内存同步主要采用同步方式,同步多个实例内的内存数据,对网络实时性和带宽要求非常高,无法适应低带宽、高时延、多抖动的网络环境
4、上述几种组合同步。多种备份方式组合的使用,可提高多实例软件系统间的高可用能力,但无法改变多种方式对网络的带宽或实时性要求较高的情况。
一般而言,实际应用中,上述所说得多实例是指双实例。
技术实现要素:
发明目的:解决通过低质量通信链路互联的软件系统双实例之间的数据同步,进而实现软件系统更高的高可用特性。
技术方案:本发明提供了适应低质量通信链路的高可用软件系统内数据同步方法,所述软件系统采用双实例方式,其中一个为主用软件系统,另一个为备用软件系统,分别部署于两个不同的数据中心,所述主用软件系统在第一数据中心,所述备用软件系统在第二数据中心;
所述主用软件系统和备用软件系统之间均设置影子系统,主用软件系统对应的是第一影子系统,备用软件系统对应的是第二影子系统;
所述主用软件系统对应的第一影子系统监视主用软件系统,获取主用软件系统处理某一个任务结束后最终变化数据集(packagea),打上时间信息,即时戳信息,发送至备用软件系统对应的第二影子系统,因仅同步最终变化数据,不同步中间变化数据,相比现有方法,可大幅降低同步数据量,进而降低对两个不同中心间网络带宽的要求;
所述备用软件系统对应的第二影子系统接收第一影子系统的数据,若因网络抖动导致数据包不正常,则重传,直到完全正确接收第一影子系统传递而来的某一个任务对应的最终变化数据集(packagea),然后对比时戳信息,依照最新的数据修改备用软件系统的对应的数据信息,历史信息保留。若备用软件系统运行不正常,可自动回滚数据,确保备份系统接替主用系统后的可用性;该方式可保证备份软件系统所修改数据一致性,网络抖动(高时延、间歇断开等网络条件)不会影响到备份软件系统数据同步某一任务变化数据的一致性;综上,本发明可适应通过低质量通信链路互联的数据中心间的系统双实例高可用。
所述主用软件系统在线承担任务,第一影子系统以任务为单位,实时同步主用软件系统空间中的内存数据、数据库数据和磁盘数据至第一影子系统的临时空间;当所述任务处理完毕,影子系统在临时空间中,将所述任务涉及的数据进行归并、去重,形成任务最终变化数据,同时打上时戳信息,并将任务最终变化数据通过低质量通信链路发送至备用软件系统;
所述第二影子系统用于接收第一影子系统发送来的任务最终变化数据,第二影子系统检测接收的数据的完整性,当确认已完整接收任务最终变化数据后,对比时戳信息,依照最新时戳信息在备用软件系统的影子系统的临时空间中恢复数据,包括内存数据、数据库数据和磁盘数据,数据恢复完毕后,将恢复的数据发送至备用软件系统空间,实现实例间的数据同步,若同步后运行不成功,则根据时戳信息,回滚至最近运行状态,保证系统的可用性。
所述第一影子系统依托于第一影子空间运行,第二影子系统依托于第二影子空间运行,所述第一影子空间和第二影子空间,相对于主用软件系统和备用软件系统所依托的运行资源是独立的,占有独立的软件进程,有独立的cpu运行空间、内存空间和磁盘空间。
所述主用软件系统接到任务后,开始执行任务,具体执行如下步骤:
步骤a1,任务调度,为所述任务分配任务id,所述任务id贯穿任务执行整个过程,执行过程中的内存数据变化、数据库数据变化、磁盘数据变化均与所述任务id关联;
步骤a2,执行任务,按照主用软件系统功能设计逻辑,执行相关任务;
步骤a3,判断是否存在内存变化,若有内存变化,则将变化内存同步至第一影子系统的临时内存空间,再执行步骤a4;若无内存变化,直接执行步骤a4;
步骤a4,判断是否存在数据库变化,如有变化,则将变化数据库数据同步至影子系统的临时数据库空间,数据库空间存于内存或磁盘之上,再执行步骤a5;若无变化,直接执行步骤a5;
步骤a5,判断是否存在磁盘数据变化,若有变化,则将变化磁盘数据同步至影子系统的临时硬盘空间,再执行步骤a6;若无变化,直接执行步骤a6;
步骤a6,判断是否完成任务,若未完成,则跳转至步骤a2,若完成,则结束。
在步骤a6中,当完成任务后,第一影子系统开始执行处理过程,具体包括如下步骤:
步骤b1,内存数据整理,形成所述任务最终变化的内存数据,同时打上时戳信息;
步骤b2,数据库数据整理,形成所述任务最终变化的数据库数据,同时打上时戳信息;
步骤b3,磁盘数据整理,形成所述任务最终变化的磁盘数据,同时打上时戳信息;
步骤b4,单次任务结果数据同步,向第二数据中心中的第二影子系统发送同步数据。
所述第二影子系统用于接收同步数据,具体包括如下步骤:
步骤c1,单次任务结果数据接收,接收第一数据中心传递过来的任务最终结果数据;
步骤c2,判断是否接收完毕,若接收未完成或者完整性校验不通过,则继续接收,若完成,则继续下一步骤;
步骤c3,内存数据恢复,从同步过来的数据中恢复内存数据至临时内存空间;
步骤c4,数据库数据恢复,从同步过来的数据中恢复数据库数据至临时数据库空间,数据库空间存于内存或磁盘之上;
步骤c5,磁盘数据恢复,从同步过来的磁盘数据中恢复磁盘数据至临时磁盘空间;
步骤c6,对比步骤c3~c5中解析出来的时戳信息,若为最新数据,则进行步骤c7,若不是最新数据,则保留本地堆栈中,若堆栈溢出,则删除,且同一任务id对应同一时戳的内存数据、数据库数据和磁盘数据同步删除;
步骤c7,向备用软件系统发送数据,将恢复的内存数据、数据库数据和磁盘数据分别发送至备用软件系统。
所述备用软件系统用于接收同步数据,具体包括如下步骤:
步骤d1,接收同步数据,接收第二影子系统传递过来的数据;
步骤d2,判断是否接收完成,若未完成,则继续接收,若完成,则执行下一步;
步骤d3,内存数据恢复,备用软件系统同步内存数据;
步骤d4,数据库数据恢复,备用软件系统同步数据库数据;
步骤d5,磁盘数据恢复,备用软件系统同步磁盘数据。
如果第一数据中心中主用软件系统故障后恢复,则其降为备用软件系统,第二数据中心的备用软件系统升为主用软件系统,数据同步方法与上述方法一致;也可根据使用要求,手动指定主用软件系统,数据同步方法保持一致。
第二数据中心的备用软件系统升为主用软件系统后,若系统运行不正常,则通过第二影子系统,回滚至上一个数据同步状态,若连续回滚超过设定的次数或者间隔时间(是指时戳信息中相对当前的间隔时间),则直接回滚至初始态,保证系统正常运行。·
所述主用软件系统和备用软件系统之间同步的数据为一个任务的最终变化数据,不涉及中间变化数据;备用软件系统在接收完一条完整的任务最终变化数据后,才更新数据,同时若数据更新后,备用软件系统运行不成功,则回滚数据,确保备用软件系统可用。
基于上述方法,可在以低带宽、高抖动、高时延为特征的网络条件下,实现软件系统两个实例之间数据的可靠同步,并且可确保同步数据与软件系统处理逻辑一致,保证实例间平稳接替。
本发明的创新点是关注与于主用系统和备用系统之间的数据同步模式,一般方式是主同步,备份系统原样同步;本发明的方法是,一方面监视主用系统,将完成某一处理事项后的最终数据变量提取出来,发送至备份系统,另一方面,备份系统在完全接受主用系统数后,再开始修改本地数据,这样可保证修改数据的一致性,同时若数据同步后备份系统运行不成功,可自动回滚至前一个状态,保证备份系统的可用性,最后,因仅两个系统之间仅同步任务处理的最终数据,中间数据不用同步,从而降低同步数据量,降低网络带宽,而备份系统仅在将某一任务变化数据接收完毕之后再修改本地数据,若网络抖动,将不断重传,直到接收完毕,因此对网络抖动不敏感。
有益效果:与现有技术相比,本发明具有以下优点:
1、以任务为单位,在软件系统多实例之间同步该任务的最终数据,降低同步数据量,从而降低对网络带宽的要求;
2、备用软件系统在任务最终数据传输完毕后,再恢复和同步数据,可保证同步数据的一致性,并可适应网络的抖动、高时延等条件。
3、软件系统实例之间的数据同步通过影子系统实现,可降低数据同步对软件系统主干任务的影响,可保证软件系统对外服务的能力。本发明提出一种同步单一任务最终数据的多实例间异步数据同步方法,因仅同步最终数据,可大大降低对网络的带宽的要求;因为采用异步同步方式,数据传递完整后才恢复数据,可保证数据最终的一致性,进而保证多实例可正确接替服务,并可适应高抖动、高时延的网络条件;因同步数据重携带时戳信息,支持数据的回滚操作,可最大化保证备份系统接替服务后,系统的可用性。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
图1软件系统实例间数据流转示意图
图2软件系统实例数据同步处理
具体实施方式
如图2所示,软件系统采用双实例部署,其中主用软件系统部署于第一数据中心1,备用软件系统部署于第二数据中心2。
在第一数据中心1中,为主用软件系统设置第一影子系统1,设置相对独立的运行空间,分别为图1中所述的第一数据中心1中的主用空间和影子空间。主用软件系统接到任务后,开始执行任务,主要步骤如下:
1、任务调度,为该任务分配任务id,该id贯穿任务执行整个过程,执行过程中的内存数据变化、数据库数据变化、磁盘数据变化均与该id关联;
2、执行任务,按照软件系统的需要,执行相关任务;
3、判断是否存在内存变化,若有,则将变化内存同步至影子系统的临时内存空间,若无,则继续;
4、判断是否存在数据库变化,如有,则将变化数据库数据同步至影子系统的临时数据库空间,若无,则继续;
5、判断是否存在磁盘数据变化,若有,则将变化磁盘数据同步至影子系统的临时硬盘空间,若无,则继续;
6、判断是否完成任务,若未完成,则跳转至步骤2,若完成,则结束。
第一影子系统1在主用软件系统完成一项任务后开始执行处理过程,主要步骤如下:
1、内存数据整理,形成该任务最终变化的内存数据,同时打上时间标签(时戳信息);
2、数据库数据整理,形成该任务最终变化的数据库数据,同时打上时间标签(时戳信息);
3、磁盘数据整理,形成该任务最终变化的磁盘数据,同时打上时间标签(时戳信息);
4、单次任务结果数据同步,向第二数据中心2中的第二影子系统2发送同步数据。
在第二数据中心2中,为备用软件系统设置第二影子系统2,设置相对独立的运行空间,分别为图1中所述的第二数据中心2中的备用空间和影子空间。第二影子系统2负责接收同步数据,主要步骤如下:
1、单次任务结果数据接收,接收第一数据中心1传递过来的任务最终结果数据;
2、判断是否接收完毕,若接收未完成或者完整性校验不通过,则继续接收,若完成,则继续;
3、内存数据恢复,从同步过来的数据中恢复内存数据至临时内存空间;
4、数据库数据恢复,从同步过来的数据中恢复数据库数据至临时数据库空间;
5、磁盘数据恢复,从同步过来的磁盘数据中恢复磁盘数据至临时磁盘空间;
6、对比3~5中解析出来的时戳信息,若为最新数据,则进行步骤7,若不是最新数据,则保留本地堆栈中,若堆栈溢出,则删除,且同一任务id对应同一时戳的内存数据、数据库数据和磁盘数据同步删除。
7、向备用软件系统发送数据,将恢复的内存数据、数据库数据和磁盘数据分别发送至备用系统。
备用软件系统接收同步数据,主要步骤如下:
1、接收同步数据,接收第二影子系统2传递过来的数据;
2、判断是否接收完成,若未完成,则继续接收,若完成,则执行下一步;
3、内存数据恢复,备用软件系统同步内存数据;
4、数据库数据恢复,备用软件系统同步数据库数据;
5、磁盘数据恢复,备用软件系统同步磁盘数据。
第二数据中心的备用软件系统升为主用软件系统后,若系统运行不正常,则通过第二影子系统,回滚至上一个数据同步状态,若连续回滚超过设定的次数或者间隔时间(是指时戳中相对当前的间隔时间),则直接回滚至初始态,保证系统正常运行
经过上述步骤,备用软件系统完成了一次主用软件系统任务的数据同步,且保证了该任务数据一致且完整,当主用软件系统故障时,备用软件系统可顺利接替提供服务;若第一数据中心中主用软件系统故障后恢复,则其降为备用软件系统,第二数据中心的备用软件系统升为主用软件系统。
实施例
为更好描述本发明,本实施例中,设定主用软件系统需要完成图像处理任务,主用软件典型任务处理逻辑如下:
a)外部输入图像picture1,生成任务id=34654;
b)内存变量temp1表示近一小时处理的任务个数,加1,则temp1=9;内存变量temp2表示最近出现处理的特征值,根据picture1数据,temp2变化,temp2=456732;
c)磁盘空间c1存储输入图像,c1=picture1,磁盘空间c2存储合成后的图像,不变化;
d)数据库参数t1存储输入图像最近的本地图像,不变化;
e)开始第一轮图像处理任务,找到最像的图像picture2,暂存于内存中,创建零时变量temp3=picture2,特征值temp2=458832;将picture1与picture2合成为图像picture3,存储磁盘空间,c2=picture3;数据库参数t1为picture2的存储编号,t1=55654;
f)开始第二轮图像处理任务,在另一个库中,找到最像的图像picture4,暂存于内存中,创建零时变量temp4=picture4,经比较picture4相较于picture2更接近picture1,故内存变量temp3删除,特征值temp2=458032;将picture1与picture4合成为图像picture5,存储磁盘空间,c2=picture5;数据库参数t1修改为picture4的存储编号,t1=65664;
g)任务完成。
与主用软件系统对应,第一影子系统在第一影子空间记录了主用软件系统参数的变化情况:
a)id=34654任务,内存方面:temp1变为9;temp2变化包括456732、458832、458032;temp3被创立,temp3=picture2,后被删除;temp4被创立,temp4=picture4。
b)id=34654任务,磁盘方面:c1=picture1;c2变化包括picture3、picture5。
c)id=34654任务,数据库方面:t1变化包括55654、65664。
d)id=34654任务完成后,经去重等操作,得到数据变化情况:temp1=9;temp2=458032;temp4属于临时变量,无意义;c1=picture1;c2=picture5;t1=65664。
e)将id=34654任务对应的数据变化量打成包,发送至第二影子系统,包括数据temp1=9,temp2=458032,c1=picture1,c2=picture5,t1=65664,同时携带有时间信息;同时监测发送情况,若接收到第二影子系统接收确认信号,则结束本项任务,否则重发。
第二影子系统接收第一影子系统传递的数据,主要操作如下:
a)接收第一影子系统发送的某一任务变化数据,检验是否接收完毕,若完毕,则向第一影子系统发送确认信号,否则继续接收。
b)解析接收完毕的变化数据,得到id=34654对应的变化数据,temp1=9,temp2=458032,c1=picture1,c2=picture5,t1=65664,在第二影子空间内恢复,及内存中temp1=9,temp2=458032,磁盘中c1=picture1,c2=picture5,数据库中t1=65664;
c)第二影子系统将数据恢复至备份软件系统,同时保留备份软件需要变化的变量当前数据;
d)第二影子系统确认备份软件系统数据变化正确,则完成,否则重复步骤c);
e)备份软件系统接替运行,发现当前同步数据后,因权限问题,运行状态不正常,则通知第二影子系统,发送保留的前一个状态数据,实现数据回滚操作;
f)回滚完成后,备份软件系统运行正常,对外提供服务正常。
本发明提供了适应低质量通信链路的高可用软件系统内数据同步方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。