CN113971181A - 基于异地多活系统的数据同步方法及装置 - Google Patents
基于异地多活系统的数据同步方法及装置 Download PDFInfo
- Publication number
- CN113971181A CN113971181A CN202111299131.0A CN202111299131A CN113971181A CN 113971181 A CN113971181 A CN 113971181A CN 202111299131 A CN202111299131 A CN 202111299131A CN 113971181 A CN113971181 A CN 113971181A
- Authority
- CN
- China
- Prior art keywords
- data
- vector clock
- synchronization
- target service
- initial
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/215—Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Synchronisation In Digital Transmission Systems (AREA)
Abstract
本申请实施例提供的基于异地多活系统的数据同步方法及装置,通过获取对目标业务的第一操作指令,并确定当前同步周期的初始向量时钟;更新初始向量时钟得到第一向量时钟,并根据第一向量时钟和第一操作指令对目标业务的初始数据执行第一操作,得到目标业务的第一操作数据;接收异地多活系统的其他业务设备发送的第二同步信息,第二同步信息包括第二向量时钟和第二操作的变量数据,根据第二同步信息对目标业务的第一操作数据和第一向量时钟分别进行同步,得到当前同步周期目标业务的同步数据和同步向量时钟。本方案中利用了向量时钟来对不同业务设备执行的操作所得到的数据进行标记,以有效提升异地多活系统的数据同步效率。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种基于异地多活系统的数据同步方法及装置。
背景技术
随着互联网行业的飞速发展,利用异地多活系统对业务进行布设成为主流趋势。一般来说,在异地多活系统包括有设置在不同地理区域的多个业务设备,基于用户所在的地理区域,用户发起的业务访问或业务请求将被发送至对应地理区域的业务设备中以进行处理。
为了避免用户跨区域进行业务访问,各业务设备需要定时进行数据同步,以保证数据一致性。现有技术中,为了避免数据同步过程中发生并发冲突,各业务设备将对业务访问涉及的数据进行数据拆分,以保证每个业务设备中业务操作数据不相同,避免后续数据同步过程中出现并发冲突。
但是,这样的处理方式需要对业务自身进行修改,而由于异地多活系统中的业务逻辑较为复杂,这样的处理方式容易造成业务数据的遗漏,且实现效率不高,准确性较差。因此,如何提供一种高效且简单的数据同步方法成为难题。
发明内容
本申请实施例提供一种基于异地多活系统的数据同步方法及装置,以用于为异地多活系统提供高效的数据同步方法。
第一方面,本申请提供了一种基于异地多活系统的数据同步方法,所述异地多活系统包括分别处于多个地理区域的多个业务设备,所述数据同步方法由所述多个业务设备中的目标业务设备执行;
所述数据同步方法,包括:
获取对目标业务的第一操作指令,并确定当前同步周期的初始向量时钟;
更新所述初始向量时钟得到第一向量时钟,并根据所述第一向量时钟和所述第一操作指令对所述目标业务的初始数据执行第一操作,得到目标业务的第一操作数据;
接收异地多活系统的其他业务设备发送的第二同步信息,所述第二同步信息包括第二向量时钟和第二操作的变量数据,所述第二向量时钟为所述其他业务设备对所述初始向量时钟进行更新得到的,所述第二操作的变量数据用于表示所述其他业务设备的目标业务的数据在第二操作前和所述第二操作后的变化量;
根据所述第二同步信息对所述目标业务的第一操作数据和所述第一向量时钟分别进行同步,得到当前同步周期所述目标业务的同步数据和同步向量时钟,所述当前同步周期的同步向量时钟将作为下一同步周期的初始向量时钟。
可选实施方式中,所述第一操作指令包括操作类型;
所述更新所述初始向量时钟得到第一向量时钟,包括:
根据所述第一操作指令的操作类型,对所述初始向量时钟中目标业务设备的逻辑时钟进行更新,更新后的向量时钟则为所述第一向量时钟。
可选实施方式中,所述根据所述第一操作指令的操作类型,对所述初始向量时钟中目标业务设备的逻辑时钟进行更新,包括:
若所述操作类型为赋值操作,则对将所述初始向量时钟中目标业务设备的逻辑时钟加一,以作为所述第一向量时钟中目标业务设备的逻辑时钟,得到所述第一向量时钟;
若所述操作类型为删除操作,则将所述初始向量时钟中目标业务设备的逻辑时钟直接作为所述第一向量时钟中目标业务设备的逻辑时钟,得到所述第一向量时钟。
可选实施方式中,根据所述第二同步信息对所述第一向量时钟进行同步,得到当前同步周期的同步向量时钟,包括:
根据所述第二同步信息中所述第二向量时钟在所述其他业务设备对应的逻辑时钟,对所述第一向量时钟在所述其他业务设备对应的逻辑时钟进行覆盖,以得到所述当前同步周期的同步向量时钟。
可选实施方式中,所述初始数据包括至少一个初始三元组数据,每一个初始三元组数据中包括有数据值、执行设备标识、以及执行设备在对创建初始三元组数据时的逻辑时钟;
所述第一操作指令还包括操作值;
所述根据所述第一向量时钟和所述第一操作指令对所述目标业务的初始数据执行第一操作,得到目标业务的第一操作数据,包括:
若所述操作类型为赋值操作,则根据所述操作值、目标业务设备标识、以及所述第一向量时钟中目标业务设备的逻辑时钟,生成赋值三元组数据,所述赋值三元组数据和所述初始数据中的初始三元组数据将构成所述目标业务的第一操作数据;
若所述操作类型为删除操作,则根据所述操作值在所述各初始三元组数据的各数据值中找到待删除数据值,删除所述初始数据中待删除数据值对应的初始三元组数据,所述初始数据中剩余的初始三元组数据则为所述目标业务的第一操作数据。
可选实施方式中,所述第二操作的变量数据,包括变量数据的变化类型,以及所述变量三元组数据;
其中,所述变化类型包括删除类型或赋值类型;
所述变量三元组数据包括第二操作的操作值,其他业务设备标识,所述第二向量时钟中其他业务设备的逻辑时钟;
根据所述第二同步信息对所述目标业务的第一操作数据进行同步,得到当前同步周期所述目标业务的同步数据,包括:
若所述第二同步信息中的第二操作的变量数据的变化类型为赋值类型,则所述第二同步信息中变量数据的变量三元组数据和所述第一操作数据中的三元组数据,构成当前同步周期所述目标业务的同步数据;
若所述第二同步信息中的第二操作的变量数据的变化类型为删除类型,则在所述第一操作数据的各三元组数据中删除与变量三元组数据相同的三元组数据,所述第一操作数据中剩余的三元组数据则构成当前同步周期所述目标业务的同步数据。
可选实施方式中,所述得到目标业务的第一操作数据之后,还包括:
确定所述第一操作的变量数据,并根据所述第一操作的变量数据和所述第一向量时钟生成第一同步信息;所述第一操作的变量数据用于表示所述目标业务设备的目标业务的数据在第一操作前和所述第一操作后的变化量;
将所述第一同步信息发送至所述其他业务设备,以供所述其他业务设备根据所述第一同步信息对所述目标业务的第二操作数据和所述第二向量时钟分别进行同步,得到当前同步周期所述目标业务的同步数据和同步向量时钟,所述当前同步周期的同步向量时钟将作为下一同步周期的初始向量时钟;
其中,所述第二操作数据是所述其他业务设备根据所述第二向量时钟和第二操作指令对所述目标业务的初始数据执行第二操作得到的。
可选实施方式中,所述确定所述第一操作的变量数据,包括:
确定所述初始数据的初始三元组数据和所述第一操作数据的各三元组数据之间的变量三元组数据;其中,所述变量三元组数据包括第一操作的操作值,目标业务设备标识,所述第一向量时钟中目标业务设备的逻辑时钟;
根据第一操作指令中的操作类型,确定变量数据的变化类型。
第二方面,本申请提供了一种业务设备,所述业务设备属于异地多活系统,所述异地多活系统包括分别处于不同地理区域的不同业务设备,所述数据同步方法由所述多个业务设备中的目标业务设备执行;
所述业务设备,包括:
收发模块,用于获取对目标业务的第一操作指令;
同步处理模块,用于确定当前同步周期的初始向量时钟,并更新所述初始向量时钟得到第一向量时钟;
执行模块,用于根据所述第一向量时钟和所述第一操作指令对所述目标业务的初始数据执行第一操作,得到目标业务的第一操作数据;
所述收发模块,还用于接收异地多活系统的其他业务设备发送的第二同步信息,所述第二同步信息包括第二向量时钟和第二操作的变量数据,所述第二向量时钟为所述其他业务设备对所述初始向量时钟进行更新得到的,所述第二操作的变量数据用于表示所述其他业务设备的目标业务的数据在第二操作前和所述第二操作后的变化量;
同步处理模块,用于根据所述第二同步信息对所述目标业务的第一操作数据和所述第一向量时钟分别进行同步,得到当前同步周期所述目标业务的同步数据和同步向量时钟,所述当前同步周期的同步向量时钟将作为下一同步周期的初始向量时钟。
可选实施方式中,所述第一操作指令包括操作类型;
同步处理模块,具体用于根据所述第一操作指令的操作类型,对所述初始向量时钟中目标业务设备的逻辑时钟进行更新,更新后的向量时钟则为所述第一向量时钟。
可选实施方式中,所述同步处理模块,具体用于:
若所述操作类型为赋值操作,则对将所述初始向量时钟中目标业务设备的逻辑时钟加一,以作为所述第一向量时钟中目标业务设备的逻辑时钟,得到所述第一向量时钟;
若所述操作类型为删除操作,则将所述初始向量时钟中目标业务设备的逻辑时钟直接作为所述第一向量时钟中目标业务设备的逻辑时钟,得到所述第一向量时钟。
可选实施方式中,所述同步处理模块,用于根据所述第二同步信息中所述第二向量时钟在所述其他业务设备对应的逻辑时钟,对所述第一向量时钟在所述其他业务设备对应的逻辑时钟进行覆盖,以得到所述当前同步周期的同步向量时钟。
可选实施方式中,所述初始数据包括至少一个初始三元组数据,每一个初始三元组数据中包括有数据值、执行设备标识、以及执行设备在对创建初始三元组数据时的逻辑时钟;
所述第一操作指令还包括操作值;
所述执行模块,具体用于:
若所述操作类型为赋值操作,则根据所述操作值、目标业务设备标识、以及所述第一向量时钟中目标业务设备的逻辑时钟,生成赋值三元组数据,所述赋值三元组数据和所述初始数据中的初始三元组数据将构成所述目标业务的第一操作数据;
若所述操作类型为删除操作,则根据所述操作值在所述各初始三元组数据的各数据值中找到待删除数据值,删除所述初始数据中待删除数据值对应的初始三元组数据,所述初始数据中剩余的初始三元组数据则为所述目标业务的第一操作数据。
可选实施方式中,所述第二操作的变量数据,包括变量数据的变化类型,以及所述变量三元组数据;
其中,所述变化类型包括删除类型或赋值类型;
所述变量三元组数据包括第二操作的操作值,其他业务设备标识,所述第二向量时钟中其他业务设备的逻辑时钟;
同步处理模块,具体用于若所述第二同步信息中的第二操作的变量数据的变化类型为赋值类型,则所述第二同步信息中变量数据的变量三元组数据和所述第一操作数据中的三元组数据,构成当前同步周期所述目标业务的同步数据;
若所述第二同步信息中的第二操作的变量数据的变化类型为删除类型,则在所述第一操作数据的各三元组数据中删除与变量三元组数据相同的三元组数据,所述第一操作数据中剩余的三元组数据则构成当前同步周期所述目标业务的同步数据。
可选实施例中,所述得到目标业务的第一操作数据之后,同步处理模块,还用于:
确定所述第一操作的变量数据,并根据所述第一操作的变量数据和所述第一向量时钟生成第一同步信息;所述第一操作的变量数据用于表示所述目标业务设备的目标业务的数据在第一操作前和所述第一操作后的变化量;
所述收发模块,还用于将所述第一同步信息发送至所述其他业务设备,以供所述其他业务设备根据所述第一同步信息对所述目标业务的第二操作数据和所述第二向量时钟分别进行同步,得到当前同步周期所述目标业务的同步数据和同步向量时钟,所述当前同步周期的同步向量时钟将作为下一同步周期的初始向量时钟;
其中,所述第二操作数据是所述其他业务设备根据所述第二向量时钟和第二操作指令对所述目标业务的初始数据执行第二操作得到的。
可选实施方式中,所述同步处理模块,还用于:
确定所述初始数据的初始三元组数据和所述第一操作数据的各三元组数据之间的变量三元组数据;其中,所述变量三元组数据包括第一操作的操作值,目标业务设备标识,所述第一向量时钟中目标业务设备的逻辑时钟;根据第一操作指令中的操作类型,确定变量数据的变化类型。
第三方面,本申请提供了一种电子设备,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如第一方面所述的方法。
第四方面,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如第一方面的所述的方法。
第五方面,本申请提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现第一方面的所述的方法。
本申请实施例提供基于异地多活.系统的数据同步方法及装置,目标业务设备通过获取对目标业务的第一操作指令,并确定当前同步周期的初始向量时钟;更新所述初始向量时钟得到第一向量时钟,并根据所述第一向量时钟和所述第一操作指令对所述目标业务的初始数据执行第一操作,得到目标业务的第一操作数据;接收异地多活系统的其他业务设备发送的第二同步信息,所述第二同步信息包括第二向量时钟和第二操作的变量数据,所述第二向量时钟为所述其他业务设备对所述初始向量时钟进行更新得到的,所述第二操作的变量数据用于表示所述其他业务设备的目标业务的数据在第二操作前和所述第二操作后的变化量;根据所述第二同步信息对所述目标业务的第一操作数据和所述第一向量时钟分别进行同步,得到当前同步周期所述目标业务的同步数据和同步向量时钟,所述当前同步周期的同步向量时钟将作为下一同步周期的初始向量时钟。本方案中利用了向量时钟来对不同业务设备执行的操作所得到的数据进行标记,以使得在对各业务设备进行数据同步时,可基于数据的向量时钟标记对出现冲突的操作进行有效处理和解决,有效提升异地多活系统的数据同步效率。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1为现有技术中异地多活系统的数据同步过程的示意图;
图2为本申请所基于的一种网络架构的示意图;
图3是本申请提供的一种基于异地多活系统的数据同步方法的流程示意图;
图4为本申请实施例提供的一种基于异地多活系统的数据同步方法处理并发赋值冲突时的流程示意图;
图5为本申请实施例提供的另一种基于异地多活系统的数据同步方法处理并发赋值冲突时的流程示意图;
图6为本申请实施例提供的一种基于异地多活系统的数据同步方法处理并发赋值删除冲突时的流程示意图;
图7为本申请实施例提供的另一种基于异地多活系统的数据同步方法处理并发赋值删除冲突时的流程示意图;
图8为本申请实施例提供的一种业务设备的结构示意图;
图9为本发明实施例提供的电子设备的结构示意图。
通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的系统和方法的例子。
随着互联网行业的飞速发展,利用异地多活系统对业务进行布设成为主流趋势。一般来说,在异地多活系统包括有设置在不同地理区域的多个业务设备,基于用户所在的地理区域,用户发起的业务访问或业务请求将被发送至对应地理区域的业务设备中以进行处理。
为了避免用户跨区域进行业务访问,各业务设备需要定时进行数据同步,以保证数据一致性。
但是,由于异地多活系统中各业务设备是同时处于业务数据处理状态的,在某一时刻可能出现业务并发冲突的情况,这将导致各业务设备之间的数据一致性遭到破坏。图1为现有技术中异地多活系统的数据同步过程的示意图,如图1所示的,在异地多活系统中包括有业务设备A和业务设备B。
在time为0的t0时刻,业务设备A和业务设备B中的数据是一致的,其均为“s=a”。
而在time为1的t1时刻,业务设备A根据接收到的业务请求获得其中的操作指令,即“set s=b”,业务设备A将执行操作指令,此时其内的数据将变为“s=b”。与此同时的,业务设备B根据接收的业务请求获得其中的另一操作指令,即“del s”,业务设备B将执行操作指令,此时其内的数据将变为“s=NULL”。
在time为2的t2时刻,业务设备A和业务设备B将会触发一次数据同步处理。其中,业务设备A将接收到来自业务设备B的同步信息,即“del s”,业务设备A将执行“del s”,得到“s=NULL”的同步结果;而业务设备B将接收到来自业务设备A的同步信息,即“s=b”,业务设备B将执行“s=b”,得到“s=b”的同步结果。
显然的,由于在t1时刻,业务设备A和业务设备B出现了并发冲突,即针对同一数据进行了不同的操作,且该两个操作之间具有一定的矛盾性。这也使得在该情况下数据同步
对数据“s”来说,分别执行了具有一定冲突的操作指令,使得在数据同步后出现数据不一致的问题。
面对这种问题,在现有技术中,各业务设备将对业务访问涉及的数据进行数据拆分,即数据可表示为:A-s以及B-s。在执行业务请求时,业务设备仅对具有自身标识的业务进行处理,而对不具有自身标识的业务将不进行处理。
但是,这样的处理方式需要对业务数据自身进行修改,而由于异地多活系统中的业务逻辑较为复杂,这样的处理方式容易造成业务逻辑的遗漏,且实现效率不高。因此,如何提供一种高效且简单的数据同步方法成为难题。
针对上述问题,本申请实施例利用了向量时钟来对不同业务设备执行的操作所得到的数据进行标记,以使得在对各业务设备进行数据同步时,可基于数据的向量时钟标记对出现冲突的操作进行有效处理和解决,有效提升异地多活系统的数据同步效率。
具体的,针对异地多活系统中的目标设备来说,其首先会获取对目标业务的第一操作指令,并确定当前同步周期的初始向量时钟;更新所述初始向量时钟得到第一向量时钟,并根据所述第一向量时钟和所述第一操作指令对所述目标业务的初始数据执行第一操作,得到目标业务的第一操作数据。在同步触发时,目标业务设备将接收异地多活系统的其他业务设备发送的第二同步信息,所述第二同步信息包括第二向量时钟和第二操作的变量数据,所述第二向量时钟为所述其他业务设备对所述初始向量时钟进行更新得到的,所述第二操作的变量数据用于表示所述其他业务设备的目标业务的数据在第二操作前和所述第二操作后的变化量。最后,目标业务设备会根据所述第二同步信息对所述目标业务的第一操作数据和所述第一向量时钟分别进行同步,得到当前同步周期所述目标业务的同步数据和同步向量时钟,所述当前同步周期的同步向量时钟将作为下一同步周期的初始向量时钟。
通过这样的方式,能够有效针对业务设备中每一次对目标业务的操作所得到的数据中将记录有该操作的向量时钟,在同步时,接收到其他业务设备发送的同步信息中也将记录有其他业务设备执行操作时的向量时钟,而通过该两个向量时钟对数据进行同步处理能够有效的对不同业务设备在操作同一目标业务的数据时操作的先后顺序和操作范围进行有效区分,从而有效解决如前述图1所提及的并发冲突的问题。
下面将结合不同实现方式对本申请提供的方法进行说明。
参考图2,图2为本申请所基于的一种网络架构的示意图,该图2所示网络架构,具体可包括异地多活系统1以及用户端2;
其中,异地多活系统1具体可包括多个业务设备,这些业务设备11将设置在不同的地理区域,各业务设备可同时为多个用户端2提供服务。
而用户端2具体可为可用于执行业务请求发送或触发业务操作的硬件设备,其包括但不限于台式电脑、平板电脑、云计算平台。
在本申请中,对于异地多活系统1中的每个业务设备来说,为了提高业务处理效率,其本地设置有数据库,以便于快速响应用户端2发起的业务访问请求。
一般来说,用户端2将基于用户所在位置访问与该位置相应地理区域的业务设备。但是,为了避免部分业务设备暂停运行而导致的用户跨区访问失败的情况,在每个业务设备的数据库中需要存储有全地理区域的业务的数据。此时,异地多活系统1需要按照预设时间周期或实时的对各业务设备之间的数据进行数据同步处理,以保证各业务设备的数据库中的业务数据的一致性。在这一过程中,各业务设备将分别采用本申请提供的数据同步方法执行相应处理,以实现彼此之间的数据同步。
而为了便于说明,本申请将以目标业务设备为执行主体并结合附图,对本案中的基于异地多活系统的数据同步方法进行描述。而对于其他业务设备来说,其实现基于异地多活系统的数据同步方法与目标业务设备所使用的数据同步方法类似,本申请对其不再进行赘述。
实施例一
图3是本申请提供的一种基于异地多活系统的数据同步方法的流程示意图。其中,在本申请实施例中异地多活系统包括分别处于多个地理区域的多个业务设备,图3所示流程的执行主体为多个业务设备中的目标业务设备。
如图3所示的,该数据同步方法,包括:
步骤301、获取对目标业务的第一操作指令,并确定当前同步周期的初始向量时钟。
步骤302、更新所述初始向量时钟得到第一向量时钟,并根据所述第一向量时钟和所述第一操作指令对所述目标业务的初始数据执行第一操作,得到目标业务的第一操作数据。
步骤303、接收异地多活系统的其他业务设备发送的第二同步信息,所述第二同步信息包括第二向量时钟和第二操作的变量数据,所述第二向量时钟为所述其他业务设备对所述初始向量时钟进行更新得到的,所述第二操作的变量数据用于表示所述其他业务设备的目标业务的数据在第二操作前和所述第二操作后的变化量。
步骤304、根据所述第二同步信息对所述目标业务的第一操作数据和所述第一向量时钟分别进行同步,得到当前同步周期所述目标业务的同步数据和同步向量时钟,所述当前同步周期的同步向量时钟将作为下一同步周期的初始向量时钟。
本申请提供的基于异地多活系统的数据同步方法具体可应用在异地多活系统中的任一业务设备中。而本实施例将以目标业务设备为执行主体进行说明。
需要说明的是,在本申请实施方式中,其他业务设备是指异地多活系统中除目标业务设备以外的设备,该其他业务设备的数量可为至少一个,本申请中以其他业务设备的数量为1个举例。针对其他业务设备的数量为多个的情况,其数据同步过程与本身请实施例类似,本申请将不对其进行赘述。
此外,针对异地多活系统中的各业务设备均需采用本申请实施例提供的数据同步方法进行数据同步,从而避免同步时出现的数据并发冲突问题。
在本申请实施例中,在步骤301中,目标业务设备首先会与用户端进行交互并从用户端获取包括业务访问请求或业务处理请求在内的请求。这些请求中一般保卡有本次请求的请求业务,即目标业务,以及本次需要对该请求业务进行的操作,即第一操作指令。
而向量时钟是一种可记录事件发生逻辑的矩阵集合。在向量时钟中将记录有各业务设备在最后一次进行操作的逻辑时钟。在步骤301中,目标业务设备还将对当前同步周期的初始向量时钟进行更新。其中当前同步周期的初始向量时钟是指在完成前一同步周期的数据同步处理后,目标业务设备在前一同步周期所得到的同步向量时钟。
由于接收到了第一操作指令并需要执行该第一操作指令,目标业务设备在步骤302中会对初始向量时钟进行一次更新,以得到第一向量时钟。随后,目标业务设备会利用第一向量时钟和第一操作指令对目标业务的初始数据进行处理,以得到目标业务的第一操作数据。其中,初始数据是指在前一同步周期得到的同步数据。
在步骤303中,目标业务设备会获取来自其他业务设备发送的第二同步信息。可知的是,为了避免并发冲突,该第二同步信息是根据第二向量时钟和第二操作的变量数据生成的。
其中,与第一向量时钟类似的是,第二向量时钟是其他业务设备在获取对目标业务的第二操作指令之后对初始向量时钟更新而得到的。特别的,其他业务设备中的初始向量时钟与目标业务设备中的初始向量时钟完全相同。
而第二操作的变量数据则用于表示所述其他业务设备的目标业务的数据在第二操作前和所述第二操作后的变化量。举例来说,如第二操作为删除操作,那么变量数据可表示经第二操作后的被删除的目标业务的数据;又例如,第二操作为赋值操作,那么变量数据可表示经第二操作赋值之后的目标业务的当前数据。
在步骤304中,目标业务设备会利用得到的第二同步信息对前述的第一操作数据进行同步,得到当前同步周期的目标业务的同步数据,以作为下一同步周期的目标业务的初始数据。同时,目标业务设备还会利用第二同步信息对第一同步向量时钟进行更新,以得到当前同步周期的同步向量时钟,并作为下一同步周期的初始向量时钟进行使用。在同步时,由于第二同步信息中的变量数据中和所述第一操作数据中均记录有操作时的向量时钟,因此,对其二者进行数据同步更新将不会出现并发赋值冲突或并发赋值和删除冲突等数据同步冲突的问题。
在上述实施例的基础上,在本申请实施方式中由于对目标业务的操作指令的操作类型是不同,而在不同的操作类型下,目标业务设备将采用不同的方式对向量时钟进行更新。因此,在可选实施方式中,第一操作指令包括操作类型;步骤302中的更新所述初始向量时钟得到第一向量时钟,具体可包括:根据所述第一操作指令的操作类型,对所述初始向量时钟中目标业务设备的逻辑时钟进行更新,更新后的向量时钟则为所述第一向量时钟。
向量时钟一般用于表示数值的创建时刻。第一操作指令中操作类型为赋值操作,其中,赋值操作是指为目标业务赋予数值的操作,这也意味着目标业务中将有新的数值被创建和存储。在该情况下,目标业务设备可对将所述初始向量时钟中目标业务设备的逻辑时钟加一,以作为所述第一向量时钟中目标业务设备的逻辑时钟,得到所述第一向量时钟。
具体来说,对于向量时钟来说,其由不同业务设备的逻辑时钟构成,即向量时钟表示为[VA,VB]。其中的“VA”所对应的数值为业务设备A对应的逻辑时钟,相应的,“VB”所对应的数值为业务设备B对应的逻辑时钟。
举例来说,假设初始向量时钟表示为[0,1],其中的“0”作为目标业务设备的在初始向量时钟中的逻辑时钟,其中的“1”作为其他业务设备的在初始向量时钟中的逻辑时钟,此时,若目标业务设备获取到第一操作指令的操作类型为赋值操作,那么目标业务设备会对初始向量时钟中的逻辑时钟加一得到“1”,并和其他业务设备的在初始向量时钟中的逻辑时钟构成第一向量时钟,即[1,1]。
相应的,在第一操作指令中操作类型表示删除操作时,其表示着第一操作指令是用于将目标业务中当前被赋予的数值进行删除的指令。由于第一操作指令所删除的数值是一个在历史时刻被创建和存储的数值,即本次第一操作不会在目标业务中创建新的数据。在该情况下,目标业务设备将所述初始向量时钟中目标业务设备的逻辑时钟直接作为所述第一向量时钟中目标业务设备的逻辑时钟,得到所述第一向量时钟。
举例来说,依旧假设初始向量时钟表示为[0,1],其中的“0”作为目标业务设备的在初始向量时钟中的逻辑时钟,其中的“1”作为其他业务设备的在初始向量时钟中的逻辑时钟,此时,若目标业务设备获取到第一操作指令的操作类型为删除操作,那么目标业务设备会直接将初始向量时钟中的逻辑时钟“0”,和其他业务设备的在初始向量时钟中的逻辑时钟构成第一向量时钟,即[0,1]。
当然的,对第一向量时钟的更新时基于第二向量时钟来进行的。在可选实施方式中,目标业务设备将根据所述第二同步信息中所述第二向量时钟在所述其他业务设备对应的逻辑时钟,对所述第一向量时钟在所述其他业务设备对应的逻辑时钟进行覆盖,以得到所述当前同步周期的同步向量时钟。
举例来说,假设第一向量时钟表示为[1,1],其中的“1”作为目标业务设备的在第一向量时钟中的逻辑时钟,其中的“1”作为其他业务设备的在第一向量时钟中的逻辑时钟,此时,若目标业务设备获取第二同步信息的第二向量时钟表示为[0,2],那么目标业务设备会确定其他业务设备在第二向量时钟中的逻辑时钟,即“2”。然后,目标业务设备会将第二向量时钟中的逻辑时钟“2”,和目标业务设备的在第一向量时钟中的逻辑时钟构成同步向量时钟,即[1,2]。
需要说明的是,在每一次数据同步完成后,不同业务设备的同步向量时钟均相同。在上述示例中,目标业务设备和其他业务设备的初始向量时钟为[0,1]。经各自进行的第一操作和第二操作后,目标业务设备的第一向量时钟为[1,1],其他业务设备的第二向量时钟为[0,2]。
在数据同步时,目标业务设备将根据第二向量时钟[0,2]对第一向量时钟[1,1]进行更新,得到同步向量时钟[1,2];而其他业务设备将根据第一向量时钟[1,1]对第二向量时钟[0,2]进行更新,得到同步向量时钟[1,2]。至此,目标业务设备和其他业务设备在当前同步周期得到相同的同步向量时钟,且该同步向量时钟将作为目标业务设备和其他业务设备在下一同步周期的初始向量时钟。
上述向量时钟进行更新的方式能够保证各业务设备中的向量时钟保持一致,有利于各业务设备根据各自的向量时钟对各自目标业务的数据进行有效处理。
在上述各实施方式的基础上,本申请实施方式中,对于目标业务的数据来说,可基于三元组数据的形式来存储,而由不同元组成的三元组数据也构成了目标业务的不同数据元素。而为了保证数据同步时不出现冲突的情况,三元组数据中将包括有基于向量时钟的元素,以用于对每次操作所得到数值进行区分。
在可选实施方式中,所述初始数据包括至少一个初始三元组数据,每一个初始三元组数据中包括有数据值、执行设备标识、以及执行设备在对创建初始三元组数据时的逻辑时钟;所述第一操作指令还包括操作值;
在不同操作类型下,第一操作所得到的结果也是不同的:
若所述操作类型为赋值操作,步骤301中的根据所述第一向量时钟和所述第一操作指令对所述目标业务的初始数据执行第一操作,得到目标业务的第一操作数据,具体包括:
根据所述操作值、目标业务设备标识、以及所述第一向量时钟中目标业务设备的逻辑时钟,生成赋值三元组数据,所述赋值三元组数据和所述初始数据中的初始三元组数据将构成所述目标业务的第一操作数据。
具体的,假设初始数据表示为{a,1,A}{b,1,B},其所表示的含义为:在业务设备A(目标业务设备)的逻辑时钟为1的时刻,业务设备A将目标业务赋值为a,以及在业务设备B的逻辑时钟为1的时刻,业务设备B将目标业务赋值为b;初始向量时钟表示为[1,1]。
若业务设备A(目标业务设备)获取得到第一操作指令,该第一操作指令为赋值操作,且其操作为将目标业务赋值为c。目标业务设备会对初始向量时钟进行更新,得到第一向量时钟[2,1](其更新过程可参见前述实施方式)。
此时,业务设备A将根据第一操作指令中的操作值“c”,目标业务设备标识“A”,以及第一向量时钟中目标业务设备的逻辑时钟“2”,生成赋值三元组数据{c,2,A},并且该赋值三元组数据{c,2,A}和初始数据中的初始三元组数据{a,1,A}{b,1,B}将构成所述目标业务的第一操作数据,即第一操作数据包括:{a,1,A}{b,1,B}{c,2,A}。
若所述操作类型为删除操作,步骤301中的根据所述第一向量时钟和所述第一操作指令对所述目标业务的初始数据执行第一操作,得到目标业务的第一操作数据,具体包括:
根据所述操作值在所述各初始三元组数据的各数据值中找到待删除数据值,删除所述初始数据中待删除数据值对应的初始三元组数据,所述初始数据中剩余的初始三元组数据则为所述目标业务的第一操作数据。
具体的,假设初始数据表示为{a,1,A}{b,1,B},其所表示的含义为:在业务设备A(目标业务设备)的逻辑时钟为1的时刻,业务设备A将目标业务赋值为a,以及在业务设备B的逻辑时钟为1的时刻,业务设备B将目标业务赋值为b;初始向量时钟表示为[1,1]。
若业务设备A(目标业务设备)获取得到第一操作指令,该第一操作指令为删除操作,且其操作为删除目标业务中赋值为b的数据。目标业务设备会对初始向量时钟进行更新,得到第一向量时钟[1,1](其更新过程可参见前述实施方式)。
此时,业务设备A将根据第一操作指令中的操作值“b”直接在各初始三元组数据{a,1,A}{b,1,B}的各数据值中找到待删除数据值“b”,删除所述初始数据中待删除数据值对应的初始三元组数据,即{b,1,B},初始数据中剩余的初始三元组数据则为所述目标业务的第一操作数据,即第一操作数据为{a,1,A}。
上述各实施方式描述了如何基于不同的第一操作指令并结合向量时钟对目标业务设备中的目标业务的初始数据进行第一操作,以得到第一操作数据。在上述各实施方式的基础上,下面将基于获取的来自其他业务设备发送的不同类型的第二同步信息,如何对前述得到的第一操作数据进行数据同步进行说明。
可选实施方式中,第二操作的变量数据包括变量数据的变化类型,以及所述变量三元组数据;其中,所述变化类型包括删除类型或赋值类型;所述变量三元组数据包括第二操作的操作值,其他业务设备标识,所述第二向量时钟中其他业务设备的逻辑时钟。
其中,在第二同步信息中的第二操作的变量数据所指示的变化类型为赋值类型时,步骤304中的目标业务设备根据所述第二同步信息对所述目标业务的第一操作数据进行同步,得到当前同步周期所述目标业务的同步数据,具体可包括:目标业务设备将第二同步信息中变量数据的变量三元组数据和所述第一操作数据中的三元组数据,构成当前同步周期所述目标业务的同步数据。
举例来说,假设初始数据表示为{a,1,A}{b,1,B},而初始向量时钟表示为[1,1]。在当前同步周期内,如前述实施方式所示的,业务设备A(目标业务设备)执行了第一操作指令(赋值操作)得到了第一操作数据{a,1,A}{b,1,B}{c,2,A},第一向量时钟表示[2,1]。而业务设备B(其他业务设备)将执行表示为赋值操作的第二操作指令(如将目标业务赋值为d),并得到第二操作数据{a,1,A}{b,1,B}{d,2,B},第二向量时钟表示[1,2]。
数据同步触发时,业务设备A(目标业务设备)将接收到来自业务设备B(其他业务设备)发送的第二同步信息,其中该第二同步信息中将包括有变量数据的变量三元组数据“{d,2,B}”以及变量数据的变化类型“赋值类型”。基于变量数据的变化类型为赋值类型,业务设备A(目标业务设备)会将变量三元组数据{d,2,B}和其原有的第一操作数据中的三元组数据{a,1,A}{b,1,B}{c,2,A}进行合并,得到当前同步周期所述目标业务的同步数据{a,1,A}{b,1,B}{c,2,A}{d,2,B}。同时,对第一向量时钟[2,1]进行更新得到同步向量时钟[2,2]。
其中,在第二同步信息中的第二操作的变量数据所指示的变化类型为删除类型时,步骤304中的目标业务设备根据所述第二同步信息对所述目标业务的第一操作数据进行同步,得到当前同步周期所述目标业务的同步数据,具体可包括:目标业务设备在所述第一操作数据的各三元组数据中删除与变量三元组数据相同的三元组数据,所述第一操作数据中剩余的三元组数据则构成当前同步周期所述目标业务的同步数据。
举例来说,依旧假设初始数据表示为{a,1,A}{b,1,B},而初始向量时钟表示为[1,1]。在当前同步周期内,如前述实施方式所示的,业务设备A(目标业务设备)执行了第一操作指令(赋值操作)得到了第一操作数据{a,1,A}{b,1,B}{c,2,A},第一向量时钟表示[2,1]。而业务设备B(其他业务设备)将执行表示为删除操作的第二操作指令(如删除目标业务中赋值为b的数据),并得到第二操作数据{a,1,A},第二向量时钟表示[1,1]。
数据同步触发时,业务设备A(目标业务设备)将接收到来自业务设备B(其他业务设备)发送的第二同步信息,其中该第二同步信息中将包括有变量数据的变量三元组数据“{b,1,B}”以及变量数据的变化类型“删除类型”。基于变量数据的变化类型为删除类型,业务设备A(目标业务设备)会从其当前的各三元组数据中找到与变量三元组数据{b,1,B}一致的那个三元组数据,并删除该三元组数据{b,1,B}。第一操作数据中剩余的三元组数据则为同步数据,即当前同步周期所述目标业务的同步数据{a,1,A}。同时,对第一向量时钟[2,1]进行更新得到同步向量时钟[2,1]。
当然,在上述各实施方式的基础上,目标业务设备也会将包括有第一操作的变量数据和变量数据的变化类型的第一同步信息发送至其他业务设备,以供该其他业务设备采用与目标业务设备相同的方式进行数据同步,以保证不同业务设备在同一同步周期所得到的同步数据和同步向量时钟时完全相同的。
基于此,可选实施方式中,目标业务设备在得到目标业务的第一操作数据之后,还包括:确定所述第一操作的变量数据,并根据所述第一操作的变量数据和所述第一向量时钟生成第一同步信息;所述第一操作的变量数据用于表示所述目标业务设备的目标业务的数据在第一操作前和所述第一操作后的变化量;将所述第一同步信息发送至所述其他业务设备,以供所述其他业务设备根据所述第一同步信息对所述目标业务的第二操作数据和所述第二向量时钟分别进行同步,得到当前同步周期所述目标业务的同步数据和同步向量时钟,所述当前同步周期的同步向量时钟将作为下一同步周期的初始向量时钟;其中,所述第二操作数据是所述其他业务设备根据所述第二向量时钟和第二操作指令对所述目标业务的初始数据执行第二操作得到的。
进一步的,目标业务设备需要确定第一操作的变量数据,即确定所述初始数据的初始三元组数据和所述第一操作数据的各三元组数据之间的变量三元组数据;其中,所述变量三元组数据包括第一操作的操作值,目标业务设备标识,所述第一向量时钟中目标业务设备的逻辑时钟;根据第一操作指令中的操作类型,确定变量数据的变化类型。
举例来说,假设初始数据表示为{a,1,A}{b,1,B},而初始向量时钟表示为[1,1]。在当前同步周期内,如前述实施方式所示的,业务设备A(目标业务设备)执行了第一操作指令(赋值操作)得到了第一操作数据{a,1,A}{b,1,B}{c,2,A},第一向量时钟表示[2,1]。
其中的初始三元组数据和所述第一操作数据的各三元组数据之间的变量三元组数据为{c,2,A},由于第一操作为赋值操作,此时,变量数据的变化类型为赋值类型。此时,目标业务设备确定出的第一同步信息为:{c,2,A}、赋值类型、[2,1]。该第一同步信息将被发送至其他业务设备,以供其进行数据同步处理。
为了更好的描述本申请,下面将以不同示例为例对本申请提供的数据同步方法进行进一步说明。
图4为本申请实施例提供的一种基于异地多活系统的数据同步方法处理并发赋值冲突时的流程示意图。其图4数据处理是基于set类型的。
如图4所示的,在异地多活系统中包括有业务设备A和业务设备B。其中,以业务设备A作为目标业务设备,而业务设备B作为其他业务设备。
在t0时刻(当前同步周期的初始时刻),业务设备A和业务设备B中目标业务的初始数据均为空值,而初始向量时钟表示为[0,0]。
在t1时刻,业务设备A接收到第一操作指令“add a(赋值为a)”,同时,业务设备B接收到了第二操作指令“add b(赋值为b)”。
此时,由于第一操作指令和第二操作指令均为赋值操作,业务设备A会将其初始向量时钟[0,0]更新为[1,0],而业务设备B会将其初始向量时钟[0,0]更新为[0,1]。同时,业务设备A执行该第一操作指令,得到第一操作数据{a,1,A};业务设备B执行该第二操作指令,得到第二操作数据{b,1,B}。
在t2时刻,业务设备A和业务设备B同时触发了数据同步处理,基于本申请提供的数据同步方法,此时,业务设备A会向业务设备B发送第一同步信息:{a,1,A},赋值类型,[1,0];业务设备B会向业务设备A发送第二同步信息:{b,1,B},赋值类型,[0,1]。
对于业务设备A来说,由于第二同步信息中的变量数据的变化类型为赋值类型,其会将变量数据{b,1,B}添加至数据集中,以使第一操作数据和变量数据的集合构成同步数据,即{a,1,A}{b,1,B},同时,业务设备A会根据第二向量时钟[0,1]对其第一向量时钟[1,0]进行更新得到同步向量时钟[1,1]。
与此同时的,对于业务设备B来说,由于第一同步信息中的变量数据的变化类型为赋值类型,其会将变量数据{a,1,A}添加至数据集中,以使第二操作数据和变量数据的集合构成同步数据,即{a,1,A}{b,1,B},同时,业务设备B会根据第一向量时钟[1,0]对其第二向量时钟[0,1]进行更新得到同步向量时钟[1,1]。
至此完成本次同步周期的数据同步处理,而业务设备A和业务设备B将得到完全相同的同步数据和同步向量时钟,该同步数据和同步向量时钟也将作为下一同步周期的初始数据和初始向量时钟。
图5为本申请实施例提供的另一种基于异地多活系统的数据同步方法处理并发赋值冲突时的流程示意图。其图5数据处理是基于String类型的。
与图4所示方式不同的是,图5方式在数据的三元组数据中还可额外记录有时间戳,以使得数据得到更好的记录和冲突的处理。
如图5所示的,在异地多活系统中包括有业务设备A和业务设备B。其中,以业务设备A作为目标业务设备,而业务设备B作为其他业务设备。
在t0时刻(当前同步周期的初始时刻),业务设备A和业务设备B中目标业务的初始数据均为空值,而初始向量时钟表示为[0,0]。
在t1时刻,业务设备A接收到第一操作指令“set key=a(将Key赋值为a)”,由于第一操作指令为赋值操作,业务设备A会将其初始向量时钟[0,0]更新为[1,0],业务设备A执行该第一操作指令,得到第一操作数据key={a,(1,A),t1};
在t2时刻,业务设备B接收到了第二操作指令“set key=b(将Key赋值为b)”,由于第二操作指令均为赋值操作,业务设备B会将其初始向量时钟[0,0]更新为[0,1]。同时,业务设备B执行该第二操作指令,得到第二操作数据key={b,(1,B),t2}。
在t3时刻,业务设备A和业务设备B同时触发了数据同步处理,此时,由于第一操作数据和第二操作数据中均包括有时间戳,而通过比对时间戳可知,第二操作指令的执行时间晚于第一操作指令的执行时间,此时,最后的同步数据中key应被赋值为b。
同步时,业务设备A会向业务设备B发送第一同步信息:key={a,(1,A),t1},赋值类型,[1,0];业务设备B会向业务设备A发送第二同步信息:key={b,(1,B),t2},赋值类型,[0,1]。
对于业务设备A来说,由于第二同步信息中的变量数据的变化类型为赋值类型,其会将变量数据key={b,(1,B),t2}添加至数据集中,以使第一操作数据和变量数据的集合构成同步数据,即key={a,(1,A),t1}以及key={b,(1,B),t2},由于在string类型数据中,同一元素key不可能具有两个取值,而此时业务设备A将以时间戳较晚的那个数据作为key的取值,并对其逻辑时钟进行更新最后得到key={b,(1,A),(1,B),t2}。
同时,业务设备A会根据第二向量时钟[0,1]对其第一向量时钟[1,0]进行更新得到同步向量时钟[1,1]。
与此同时的,对于业务设备B来说,由于第一同步信息中的变量数据的变化类型为赋值类型,其会将变量数据key={a,(1,A),t1}添加至数据集中,以使第二操作数据和变量数据的集合构成同步数据,即key={a,(1,A),t1}以及key={b,(1,B),t2},由于在string类型数据中,同一元素key不可能具有两个取值,而此时业务设备B将以时间戳较晚的那个数据作为key的取值,并对其逻辑时钟进行更新最后得到key={b,(1,A),(1,B),t2}。
同时,业务设备B会根据第一向量时钟[1,0]对其第二向量时钟[0,1]进行更新得到同步向量时钟[1,1]。
至此完成本次同步周期的数据同步处理,而业务设备A和业务设备B将得到完全相同的同步数据和同步向量时钟,该同步数据和同步向量时钟也将作为下一同步周期的初始数据和初始向量时钟。
图6为本申请实施例提供的一种基于异地多活系统的数据同步方法处理并发赋值删除冲突时的流程示意图。其图6数据处理是基于set类型的。
如图6所示的,在异地多活系统中包括有业务设备A和业务设备B。其中,以业务设备A作为目标业务设备,而业务设备B作为其他业务设备。
在t0时刻(当前同步周期的初始时刻),业务设备A和业务设备B中目标业务的初始数据均为{a,1,A}{b,1,B}{b,2,A},而初始向量时钟表示为[2,1]。
在t1时刻,业务设备A接收到第一操作指令“add b(赋值为b)”,同时,业务设备B接收到了第二操作指令“rem b(删除b)”。
此时,由于第一操作指令为赋值操作,第二操作指令为删除操作,业务设备A会将其初始向量时钟[2,1]更新为[3,1],而业务设备B会将其初始向量时钟[2,1]更新为[2,1]。
同时,业务设备A执行该第一操作指令,得到第一操作数据{a,1,A}{b,1,B}{b,2,A}{b,3,A};业务设备B执行该第二操作指令,得到第二操作数据{a,1,A}。
在t2时刻,业务设备A和业务设备B同时触发了数据同步处理,基于本申请提供的数据同步方法,此时,业务设备A会向业务设备B发送第一同步信息:{b,3,A},赋值类型,[3,1];业务设备B会向业务设备A发送第二同步信息:{b,1,B}{b,2,A},删除类型,[2,1]。
对于业务设备A来说,由于第二同步信息中的变量数据的变化类型为删除类型,其会将变量数据{b,1,B}{b,2,A}从第一操作数据的数据集中删除,得到同步数据,即{a,1,A}{b,3,A},同时,业务设备A会根据第二向量时钟[2,1]对其第一向量时钟[3,1]进行更新得到同步向量时钟[3,1]。
与此同时的,对于业务设备B来说,由于第一同步信息中的变量数据的变化类型为赋值类型,其会将变量数据{b,3,A}添加至数据集中,以使第二操作数据和变量数据的集合构成同步数据,即{a,1,A}{b,3,A},同时,业务设备B会根据第一向量时钟[3,1]对其第二向量时钟[2,1]进行更新得到同步向量时钟[3,1]。
至此完成本次同步周期的数据同步处理,而业务设备A和业务设备B将得到完全相同的同步数据和同步向量时钟,该同步数据和同步向量时钟也将作为下一同步周期的初始数据和初始向量时钟。
图7为本申请实施例提供的另一种基于异地多活系统的数据同步方法处理并发赋值删除冲突时的流程示意图。其图7数据处理是基于String类型的。
与图6所示方式不同的是,图7方式在数据的三元组数据中还可额外记录有时间戳,以使得数据得到更好的记录和冲突的处理。
如图7所示的,在异地多活系统中包括有业务设备A和业务设备B。其中,以业务设备A作为目标业务设备,而业务设备B作为其他业务设备。
在t3时刻(当前同步周期的初始时刻),业务设备A和业务设备B中目标业务的初始数据均为key={b,(1,A),(1,B),t2},而初始向量时钟表示为[1,1]。
在t4时刻,业务设备A接收到第一操作指令“set key=c(将Key赋值为c)”,由于第一操作指令为赋值操作,业务设备A会将其初始向量时钟[1,1]更新为[2,1],业务设备A执行该第一操作指令,得到第一操作数据key={c,(2,A),(1,B),t4};
在t5时刻,业务设备B接收到了第二操作指令“del key(将Key赋值删除)”,由于第二操作指令为删除操作,业务设备B会将其初始向量时钟[1,1]更新为[1,1]。同时,业务设备B执行该第二操作指令,得到第二操作数据key={}。
在t6时刻,业务设备A和业务设备B同时触发了数据同步处理,此时,业务设备A会向业务设备B发送第一同步信息:key={c,(2,A),t4},赋值类型,[2,1];业务设备B会向业务设备A发送第二同步信息:key={b,(1,A),(1,B),t5},删除类型,[1,1]。
对于业务设备A来说,由于第二同步信息中的变量数据的变化类型为删除类型,其会将变量数据key={b,(1,A),(1,B),t2}从第一操作数据的数据集中删除,以得到同步数据,即key={c,(2,A),t4}。
同时,业务设备A会根据第二向量时钟[1,1]对其第一向量时钟[2,1]进行更新得到同步向量时钟[2,1]。
与此同时的,对于业务设备B来说,由于第一同步信息中的变量数据的变化类型为赋值类型,其会将变量数据key={c,(2,A),t4}添加至数据集中,以使第二操作数据和变量数据的集合构成同步数据,即key={c,(2,A),t4}。
同时,业务设备B会根据第一向量时钟[2,1]对其第二向量时钟[1,1]进行更新得到同步向量时钟[2,1]。
至此完成本次同步周期的数据同步处理,而业务设备A和业务设备B将得到完全相同的同步数据和同步向量时钟,该同步数据和同步向量时钟也将作为下一同步周期的初始数据和初始向量时钟。
通过上述提供的方法能够有效针对业务设备中每一次对目标业务的操作所得到的数据中将记录有该操作的向量时钟,在同步时,接收到其他业务设备发送的同步信息中也将记录有其他业务设备执行操作时的向量时钟,而通过该两个向量时钟对数据进行同步处理能够有效的对不同业务设备在操作同一目标业务的数据时操作的先后顺序和操作范围进行有效区分,从而有效解决如前述图1所提及的并发冲突的问题。
实施例二
对应于上文实施例的基于异地多活系统的数据同步方法,图8为本申请实施例提供的一种业务设备的结构示意图,该业务设备属于异地多活系统,所述异地多活系统包括分别处于不同地理区域的不同业务设备,所述数据同步方法由所述多个业务设备中的目标业务设备执行;如图8所示,该业务设备包括:收发模块10、同步处理模块20以及执行模块30。
收发模块10,用于获取对目标业务的第一操作指令;
同步处理模块20,用于确定当前同步周期的初始向量时钟,并更新所述初始向量时钟得到第一向量时钟;
执行模块30,用于根据所述第一向量时钟和所述第一操作指令对所述目标业务的初始数据执行第一操作,得到目标业务的第一操作数据;
所述收发模块10,还用于接收异地多活系统的其他业务设备发送的第二同步信息,所述第二同步信息包括第二向量时钟和第二操作的变量数据,所述第二向量时钟为所述其他业务设备对所述初始向量时钟进行更新得到的,所述第二操作的变量数据用于表示所述其他业务设备的目标业务的数据在第二操作前和所述第二操作后的变化量;
同步处理模块20,用于根据所述第二同步信息对所述目标业务的第一操作数据和所述第一向量时钟分别进行同步,得到当前同步周期所述目标业务的同步数据和同步向量时钟,所述当前同步周期的同步向量时钟将作为下一同步周期的初始向量时钟。
可选实施方式中,所述第一操作指令包括操作类型;
同步处理模块20,具体用于根据所述第一操作指令的操作类型,对所述初始向量时钟中目标业务设备的逻辑时钟进行更新,更新后的向量时钟则为所述第一向量时钟。
可选实施方式中,所述同步处理模块20,具体用于:
若所述操作类型为赋值操作,则对将所述初始向量时钟中目标业务设备的逻辑时钟加一,以作为所述第一向量时钟中目标业务设备的逻辑时钟,得到所述第一向量时钟;
若所述操作类型为删除操作,则将所述初始向量时钟中目标业务设备的逻辑时钟直接作为所述第一向量时钟中目标业务设备的逻辑时钟,得到所述第一向量时钟。
可选实施方式中,所述同步处理模块20,用于根据所述第二同步信息中所述第二向量时钟在所述其他业务设备对应的逻辑时钟,对所述第一向量时钟在所述其他业务设备对应的逻辑时钟进行覆盖,以得到所述当前同步周期的同步向量时钟。
可选实施方式中,所述初始数据包括至少一个初始三元组数据,每一个初始三元组数据中包括有数据值、执行设备标识、以及执行设备在对创建初始三元组数据时的逻辑时钟;
所述第一操作指令还包括操作值;
所述执行模块30,具体用于:
若所述操作类型为赋值操作,则根据所述操作值、目标业务设备标识、以及所述第一向量时钟中目标业务设备的逻辑时钟,生成赋值三元组数据,所述赋值三元组数据和所述初始数据中的初始三元组数据将构成所述目标业务的第一操作数据;
若所述操作类型为删除操作,则根据所述操作值在所述各初始三元组数据的各数据值中找到待删除数据值,删除所述初始数据中待删除数据值对应的初始三元组数据,所述初始数据中剩余的初始三元组数据则为所述目标业务的第一操作数据。
可选实施方式中,所述第二操作的变量数据,包括变量数据的变化类型,以及所述变量三元组数据;
其中,所述变化类型包括删除类型或赋值类型;
所述变量三元组数据包括第二操作的操作值,其他业务设备标识,所述第二向量时钟中其他业务设备的逻辑时钟;
同步处理模块20,具体用于若所述第二同步信息中的第二操作的变量数据的变化类型为赋值类型,则所述第二同步信息中变量数据的变量三元组数据和所述第一操作数据中的三元组数据,构成当前同步周期所述目标业务的同步数据;
若所述第二同步信息中的第二操作的变量数据的变化类型为删除类型,则在所述第一操作数据的各三元组数据中删除与变量三元组数据相同的三元组数据,所述第一操作数据中剩余的三元组数据则构成当前同步周期所述目标业务的同步数据。
可选实施例中,所述得到目标业务的第一操作数据之后,同步处理模块20,还用于:
确定所述第一操作的变量数据,并根据所述第一操作的变量数据和所述第一向量时钟生成第一同步信息;所述第一操作的变量数据用于表示所述目标业务设备的目标业务的数据在第一操作前和所述第一操作后的变化量;
所述收发模块10,还用于将所述第一同步信息发送至所述其他业务设备,以供所述其他业务设备根据所述第一同步信息对所述目标业务的第二操作数据和所述第二向量时钟分别进行同步,得到当前同步周期所述目标业务的同步数据和同步向量时钟,所述当前同步周期的同步向量时钟将作为下一同步周期的初始向量时钟;
其中,所述第二操作数据是所述其他业务设备根据所述第二向量时钟和第二操作指令对所述目标业务的初始数据执行第二操作得到的。
可选实施方式中,所述同步处理模块20,还用于:
确定所述初始数据的初始三元组数据和所述第一操作数据的各三元组数据之间的变量三元组数据;其中,所述变量三元组数据包括第一操作的操作值,目标业务设备标识,所述第一向量时钟中目标业务设备的逻辑时钟;根据第一操作指令中的操作类型,确定变量数据的变化类型。
本申请实施例提供基于异地多活系统的业务设备,其中通过获取对目标业务的第一操作指令,并确定当前同步周期的初始向量时钟;更新所述初始向量时钟得到第一向量时钟,并根据所述第一向量时钟和所述第一操作指令对所述目标业务的初始数据执行第一操作,得到目标业务的第一操作数据;接收异地多活系统的其他业务设备发送的第二同步信息,所述第二同步信息包括第二向量时钟和第二操作的变量数据,所述第二向量时钟为所述其他业务设备对所述初始向量时钟进行更新得到的,所述第二操作的变量数据用于表示所述其他业务设备的目标业务的数据在第二操作前和所述第二操作后的变化量;根据所述第二同步信息对所述目标业务的第一操作数据和所述第一向量时钟分别进行同步,得到当前同步周期所述目标业务的同步数据和同步向量时钟,所述当前同步周期的同步向量时钟将作为下一同步周期的初始向量时钟。本方案中利用了向量时钟来对不同业务设备执行的操作所得到的数据进行标记,以使得在对各业务设备进行数据同步时,可基于数据的向量时钟标记对出现冲突的操作进行有效处理和解决,有效提升异地多活系统的数据同步效率。
实施例三
图9为本发明实施例提供的电子设备的结构示意图,如图9所示,本发明实施例还提供一种电子设备1400,包括:存储器1401,处理器1402以及计算机程序。
其中,计算机程序存储在存储器1401中,并被配置为由处理器1402执行以实现本发明任意一个实施例提供的基于异地多活系统的数据同步方法。相关说明可以对应参见附图中的步骤所对应的相关描述和效果进行理解,此处不做过多赘述。
其中,本实施例中,存储器1401和处理器1402通过总线连接。
实施例四
本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行以实现本发明任意一个实施例提供的基于异地多活系统的数据同步方法。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,系统或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。
用于实施本发明的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程问答系统的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本发明的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、系统或设备使用或与指令执行系统、系统或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、系统或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
此外,本申请提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现前所述的基于异地多活系统的数据同步方法。
此外,虽然采用特定次序描绘了各操作,但是这应当理解为要求这样操作以所示出的特定次序或以顺序次序执行,或者要求所有图示的操作应被执行以取得期望的结果。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实现中。相反地,在单个实现的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实现中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。
Claims (12)
1.一种基于异地多活系统的数据同步方法,其特征在于,所述异地多活系统包括分别处于多个地理区域的多个业务设备,所述数据同步方法由所述多个业务设备中的目标业务设备执行;
所述数据同步方法,包括:
获取对目标业务的第一操作指令,并确定当前同步周期的初始向量时钟;
更新所述初始向量时钟得到第一向量时钟,并根据所述第一向量时钟和所述第一操作指令对所述目标业务的初始数据执行第一操作,得到目标业务的第一操作数据;
接收异地多活系统的其他业务设备发送的第二同步信息,所述第二同步信息包括第二向量时钟和第二操作的变量数据,所述第二向量时钟为所述其他业务设备对所述初始向量时钟进行更新得到的,所述第二操作的变量数据用于表示所述其他业务设备的目标业务的数据在第二操作前和所述第二操作后的变化量;
根据所述第二同步信息对所述目标业务的第一操作数据和所述第一向量时钟分别进行同步,得到当前同步周期所述目标业务的同步数据和同步向量时钟,所述当前同步周期的同步向量时钟将作为下一同步周期的初始向量时钟。
2.根据权利要求1所述的数据同步方法,其特征在于,所述第一操作指令包括操作类型;
所述更新所述初始向量时钟得到第一向量时钟,包括:
根据所述第一操作指令的操作类型,对所述初始向量时钟中目标业务设备的逻辑时钟进行更新,更新后的向量时钟则为所述第一向量时钟。
3.根据权利要求2所述的数据同步方法,其特征在于,所述根据所述第一操作指令的操作类型,对所述初始向量时钟中目标业务设备的逻辑时钟进行更新,包括:
若所述操作类型为赋值操作,则对将所述初始向量时钟中目标业务设备的逻辑时钟加一,以作为所述第一向量时钟中目标业务设备的逻辑时钟,得到所述第一向量时钟;
若所述操作类型为删除操作,则将所述初始向量时钟中目标业务设备的逻辑时钟直接作为所述第一向量时钟中目标业务设备的逻辑时钟,得到所述第一向量时钟。
4.根据权利要求2所述的数据同步方法,其特征在于,根据所述第二同步信息对所述第一向量时钟进行同步,得到当前同步周期的同步向量时钟,包括:
根据所述第二同步信息中所述第二向量时钟在所述其他业务设备对应的逻辑时钟,对所述第一向量时钟在所述其他业务设备对应的逻辑时钟进行覆盖,以得到所述当前同步周期的同步向量时钟。
5.根据权利要求2-4任一项所述的数据同步方法,其特征在于,所述初始数据包括至少一个初始三元组数据,每一个初始三元组数据中包括有数据值、执行设备标识、以及执行设备在对创建初始三元组数据时的逻辑时钟;
所述第一操作指令还包括操作值;
所述根据所述第一向量时钟和所述第一操作指令对所述目标业务的初始数据执行第一操作,得到目标业务的第一操作数据,包括:
若所述操作类型为赋值操作,则根据所述操作值、目标业务设备标识、以及所述第一向量时钟中目标业务设备的逻辑时钟,生成赋值三元组数据,所述赋值三元组数据和所述初始数据中的初始三元组数据将构成所述目标业务的第一操作数据;
若所述操作类型为删除操作,则根据所述操作值在所述各初始三元组数据的各数据值中找到待删除数据值,删除所述初始数据中待删除数据值对应的初始三元组数据,所述初始数据中剩余的初始三元组数据则为所述目标业务的第一操作数据。
6.根据权利要求5所述的数据同步方法,其特征在于,所述第二操作的变量数据包括变量数据的变化类型,以及所述变量三元组数据;
其中,所述变化类型包括删除类型或赋值类型;
所述变量三元组数据包括第二操作的操作值,其他业务设备标识,所述第二向量时钟中其他业务设备的逻辑时钟;
根据所述第二同步信息对所述目标业务的第一操作数据进行同步,得到当前同步周期所述目标业务的同步数据,包括:
若所述第二同步信息中的第二操作的变量数据的变化类型为赋值类型,则所述第二同步信息中变量数据的变量三元组数据和所述第一操作数据中的三元组数据,构成当前同步周期所述目标业务的同步数据;
若所述第二同步信息中的第二操作的变量数据的变化类型为删除类型,则在所述第一操作数据的各三元组数据中删除与变量三元组数据相同的三元组数据,所述第一操作数据中剩余的三元组数据则构成当前同步周期所述目标业务的同步数据。
7.根据权利要求1所述的数据同步方法,其特征在于,所述得到目标业务的第一操作数据之后,还包括:
确定所述第一操作的变量数据,并根据所述第一操作的变量数据和所述第一向量时钟生成第一同步信息;所述第一操作的变量数据用于表示所述目标业务设备的目标业务的数据在第一操作前和所述第一操作后的变化量;
将所述第一同步信息发送至所述其他业务设备,以供所述其他业务设备根据所述第一同步信息对所述目标业务的第二操作数据和所述第二向量时钟分别进行同步,得到当前同步周期所述目标业务的同步数据和同步向量时钟,所述当前同步周期的同步向量时钟将作为下一同步周期的初始向量时钟;
其中,所述第二操作数据是所述其他业务设备根据所述第二向量时钟和第二操作指令对所述目标业务的初始数据执行第二操作得到的。
8.根据权利要求7所述的数据同步方法,其特征在于,所述确定所述第一操作的变量数据,包括:
确定所述初始数据的初始三元组数据和所述第一操作数据的各三元组数据之间的变量三元组数据;其中,所述变量三元组数据包括第一操作的操作值,目标业务设备标识,所述第一向量时钟中目标业务设备的逻辑时钟;
根据第一操作指令中的操作类型,确定变量数据的变化类型。
9.一种业务设备,其特征用于,所述业务设备属于异地多活系统,所述异地多活系统包括分别处于不同地理区域的不同业务设备,所述数据同步方法由所述多个业务设备中的目标业务设备执行;
所述业务设备,包括:
收发模块,用于获取对目标业务的第一操作指令;
同步处理模块,用于确定当前同步周期的初始向量时钟,并更新所述初始向量时钟得到第一向量时钟;
执行模块,用于根据所述第一向量时钟和所述第一操作指令对所述目标业务的初始数据执行第一操作,得到目标业务的第一操作数据;
所述收发模块,还用于接收异地多活系统的其他业务设备发送的第二同步信息,所述第二同步信息包括第二向量时钟和第二操作的变量数据,所述第二向量时钟为所述其他业务设备对所述初始向量时钟进行更新得到的,所述第二操作的变量数据用于表示所述其他业务设备的目标业务的数据在第二操作前和所述第二操作后的变化量;
同步处理模块,用于根据所述第二同步信息对所述目标业务的第一操作数据和所述第一向量时钟分别进行同步,得到当前同步周期所述目标业务的同步数据和同步向量时钟,所述当前同步周期的同步向量时钟将作为下一同步周期的初始向量时钟。
10.一种电子设备,其特征在于,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如权利要求1-8任一项所述的方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如权利要求1-8任一项所述的方法。
12.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1-8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111299131.0A CN113971181A (zh) | 2021-11-04 | 2021-11-04 | 基于异地多活系统的数据同步方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111299131.0A CN113971181A (zh) | 2021-11-04 | 2021-11-04 | 基于异地多活系统的数据同步方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113971181A true CN113971181A (zh) | 2022-01-25 |
Family
ID=79589606
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111299131.0A Pending CN113971181A (zh) | 2021-11-04 | 2021-11-04 | 基于异地多活系统的数据同步方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113971181A (zh) |
-
2021
- 2021-11-04 CN CN202111299131.0A patent/CN113971181A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109492013B (zh) | 应用于数据库集群的数据处理方法、装置和系统 | |
CN111399764B (zh) | 数据存储方法、读取方法、装置、设备及存储介质 | |
CN113204598B (zh) | 一种数据同步方法、系统及存储介质 | |
CN105608126A (zh) | 一种建立海量数据库二级索引的方法和装置 | |
CN114443294B (zh) | 大数据服务组件部署方法、系统、终端及存储介质 | |
CN113672692B (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN110099128B (zh) | 一种认证数据同步方法及装置 | |
US8892535B2 (en) | Database management method | |
CN111090803A (zh) | 一种数据处理方法、装置、电子设备和存储介质 | |
CN113971181A (zh) | 基于异地多活系统的数据同步方法及装置 | |
CN111427950A (zh) | 数据发送、接收方法及相应的装置、设备、存储介质 | |
CN113590643B (zh) | 基于双轨数据库的数据同步方法、装置、设备和存储介质 | |
CN111966650B (zh) | 一种运维大数据共享数据表的处理方法、装置及存储介质 | |
CN110569231B (zh) | 数据迁移方法、装置、设备和介质 | |
JP2004265081A (ja) | 情報処理方法及び装置 | |
CN113392074B (zh) | 一种采用内存文档的物联网设备安全管理方法 | |
CN114116672B (zh) | 数据同步方法及相关装置 | |
CN113449035B (zh) | 数据同步方法、装置、计算机设备及可读存储介质 | |
CN114827275B (zh) | 一种联邦租户的管理平台和联邦租户的资源管理方法 | |
CN109582288B (zh) | 一种生产配置回流的方法、系统和存储介质 | |
CN111666338B (zh) | 数据复制方法、控制节点及电子设备 | |
CN117608921A (zh) | 云数据库的备份方法、恢复方法及相关设备 | |
CN116245639A (zh) | 一种更新交易状态的方法、装置、设备及介质 | |
CN115062000A (zh) | 数据隔离方法、装置、计算机设备和存储介质 | |
CN117472928A (zh) | 数据库管理方法、装置、电子设备及计算机存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |