掌桥专利:专业的专利平台
掌桥专利
首页

基于分布式系统的数据处理方法、装置及存储介质

文献发布时间:2023-06-19 13:49:36


基于分布式系统的数据处理方法、装置及存储介质

技术领域

本申请涉及通信技术,尤其涉及一种基于分布式系统的数据处理方法、装置及存储介质。

背景技术

传统大型单体企业架构向微服务架构转型的过程中,通过将单体系统根据业务价值划分为一个个可独立部署的微服务,以达到高可用、灵活伸缩、敏捷开发的目的。然而,由于微服务架构下服务的数据库独立部署,服务间的数据如何保持一致成为转型过程中的一大难题。

现有的大多数分布式事务的解决方案是根据特定场景定制的,对原有系统的侵入性较强,维护成本较高。

发明内容

本申请提供一种基于分布式系统的数据处理方法、装置及存储介质,能够在不侵入已有系统的情况下,解决多个复杂系统之间相互调用和执行数据交互结果,保持最终一致性问题,降低了维护成本。

第一方面,本申请提供了一种基于分布式系统的数据处理方法,该方法包括:接收第一节点发送的第一消息,第一消息中包括第一节点对第一节点对应的第一数据库中的数据进行修改的修改信息;向至少一个第二节点分别发送修改信息,修改信息用于指示至少一个第二节点对各自对应的第二数据库中的数据进行更新。

可选的,包括:向至少一个第二节点分别发送第二消息,第二消息用于通知第二节点第一数据库中的数据进行了修改;接收至少一个第二节点发送的第三消息;根据第三消息向至少一个第二节点发送修改信息。

可选的,方法还包括:确定至少一个第二节点对各自对应的第二数据库中的数据与修改信息是否一致;若不一致,则向至少一个第二节点发送第四消息,第四消息用于指示第二节点对第二数据库进行回滚操作。

可选的,确定至少一个第二节点对各自对应的第二数据库中的数据与修改信息是否一致,包括:获取至少一个第二节点各自对应的标识值;判断至少一个第二节点对应的标识值是否为预设值;若至少一个第二节点对应的标识值为设置,则确定至少一个第二节点对各自对应的第二数据库中的数据与修改信息一致。

可选的,向至少一个第二节点分别发送修改信息之前,方法还包括:将至少一个第二节点各自对应的标识值加1;向至少一个第二节点分别发送修改信息之后,方法还包括:接收第二节点发送的第五消息,第五消息为第二节点对第二数据库中的数据修改成功后发送的;根据第五消息,将第二节点对应的标识值减1。

可选的,接收第一节点发送的第一消息之后,方法还包括:将修改信息存储至远程字典服务Redis中。

第二方面,本申请提供了一种基于分布式系统的数据处理装置,该装置包括:

接收模块,用于接收第一节点发送的第一消息,第一消息中包括第一节点对第一节点对应的第一数据库中的数据进行修改的修改信息。

发送模块,用于向至少一个第二节点分别发送修改信息,修改信息用于指示至少一个第二节点对各自对应的第二数据库中的数据进行更新。

可选的,发送模块,具体用于向至少一个第二节点分别发送第二消息,第二消息用于通知第二节点第一数据库中的数据进行了修改;收至少一个第二节点发送的第三消息;根据第三消息向至少一个第二节点发送修改信息。

可选的,发送模块,还用于确定至少一个第二节点对各自对应的第二数据库中的数据与第一数据库中的数据是否一致;若不一致,则分别向第一节点和至少一个第二节点发送第四消息,第四消息用于指示第一节点对第一数据库进行回滚操作,并用于指示第二节点对第二数据库进行回滚操作。

可选的,发送模块,具体用于获取至少一个第二节点各自对应的标识值;判断至少一个第二节点对应的标识值是否均相同;若至少一个第二节点对应的标识值均相同,则确定至少一个第二节点对各自对应的第二数据库中的数据与第一数据库中的数据一致。

可选的,发送模块,还用于将至少一个第二节点各自对应的标识值加1;向至少一个第二节点分别发送修改信息之后,方法还包括:接收第二节点发送的第五消息,第五消息为第二节点对第二数据库中的数据修改成功后发送的;根据第五消息,将第二节点对应的标识值减1。

可选的,接收模块,还用于将修改信息存储至远程字典服务Redis中。

第三方面,本申请提供了一种电子设备,包括:至少一个处理器;以及与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行如第一方面或第一方面的可选方式的方法。

第四方面,本申请提供了一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,计算机执行指令被处理器执行时用于实现如第一方面或第一方面的可选方式的方法。

第五方面,本申请提供了一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现如第一方面或第一方面的可选方式的方法。

本申请提供的基于分布式系统的数据处理方法、装置及存储介质,该方法通过接收第一节点发送的包括第一节点对第一节点对应的第一数据库中的数据进行修改的修改信息第一消息,并向至少一个第二节点分别发送用于指示至少一个第二节点对各自对应的第二数据库中的数据进行更新修改信息,能够在不侵入已有系统的情况下,解决多个复杂系统之间相互调用和执行数据交互结果,保持最终一致性问题,降低了维护成本。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本申请提供的一种基于分布式系统的数据处理方法的应用场景的示意图;

图2为本申请提供的一种信令图;

图3为本申请提供的一种基于分布式系统的数据处理方法的流程示意图;

图4为本申请提供的另一种基于分布式系统的数据处理方法的流程示意图;

图5为本申请提供的一种基于分布式系统的数据处理装置的结构示意图;

图6为本申请提供的电子设备的一种结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

图1为本申请提供的一种基于分布式系统的数据处理方法的应用场景的示意图,如图1所示,该方法应用于与由多个服务器构成的分布式系统中。

多个服务器中包括一个第一节点11、至少一个第二节点12和服务器13。

可选的,服务器13部署有远程字典服务(Remote Dictionary Server,Redis)。Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的应用程序接口(Application ProgrammingInterface,API)。

第一节点11和第二节点12均与服务器13电连接。

分布式系统中的第一节点11,用于在成功执行完本地事务后,修改其对应的第一数据库中的数据后,向服务器13发送第一消息,该第一消息包括相应修改信息的第一消息。

服务器13,用于接收第一消息,并向至少一个第二节点12分别发送相应的修改信息。

第二节点12,用于根据接收到的修改信息,对其对应的第二数据库中的数据进行更新。

可选的,服务器13还用于向至少一个第二节点分别发送第二消息,以通知第二节点第一数据库中的数据进行了修改。

第二节点12,还用于向服务器发送第三消息,以获取相应的修改信息。

相应的,服务器13还用于接收至少一个第二节点发送的第三消息;根据第三消息向至少一个第二节点发送修改信息。

可选的,服务器13还用于确定至少一个第二节点各自对应的第二数据库中的数据与修改信息是否一致;若不一致,则向至少一个第二节点发送第四消息。

第二节点12,还用于对第二数据库进行回滚操作。

可选的,服务器13具体用于获取至少一个第二节点各自对应的标识值;判断至少一个第二节点对应的标识值是否为预设值;若至少一个第二节点对应的标识值为预设值,则确定至少一个第二节点各自对应的第二数据库中的数据与修改信息一致。

可选的,服务器13还用于将至少一个第二节点各自对应的标识值加1。

第二节点12,还用于在对第二数据库中的数据修改成功后,向服务器13发送第五消息,即第二节点12在成功执行完其本地事务后,向服务器13发送第五消息。

服务器13,还用于根据第五消息,将第二节点对应的标识值减1。

图2为本申请提供的一种信令图,本申请提供的分布式系统能够执行如图2所示的方法。

第一节点对应的系统A先执行本地事务,如果本地事务执行成功,则向部署有Redis中间件的服务器发送第一消息,第一消息包括第一节点对第一节点对应的第一数据库中的数据进行修改的修改信息。

部署有Redis中间件的服务器接收到第一消息后,控制第二节点对应的系统B所对应的opKey值加1,并向第二节点对应的系统B发送包括该修改信息。

第二节点对应的系统B接收到该修改信息后,执行相应的本地事务。当本地事务执行成功后,则向部署有Redis中间件的服务器发送信息,以指示部署有Redis中间件的服务器控制第二节点对应的系统B所对应的opKey值减1,使该opKey值恢复初始值,示例性的,初始值为0。

可选的,部署有Redis中间件的服务器在对该opKey值执行减1操作后,进一步接收系统B发送的查询信息,并查询opKey值是否恢复初始值,如果opKey值没有恢复初始值,并向系统B反馈当前的opKey值,或者,向系统B发送指示信息,指示系统B执行回滚操作。

可选的,如果opKey值没有恢复初始值,部署有Redis中间件的服务器接收到系统A发送的查询opKey值的信息后,还向系统A反馈当前的opKey值,或者,向系统A发送指示信息,指示系统A执行回滚操作。

图3为本申请提供的一种基于分布式系统的数据处理方法的流程示意图,该方法应用于服务器,如图3所示,该方法包括:

S301、接收第一节点发送的第一消息。

其中,第一消息中包括第一节点对第一节点对应的第一数据库中的数据进行修改的修改信息。第一消息为第一节点在成功执行其本地事务后,生成的消息。

例如,第一节点执行的本地事务中包括删除第一数据库地址A中的数据,则当第一节点成功删除了其对应的第一数据库中的地址A存储的数据后,向服务器发送第一消息,该第一消息包括第一节点成功删除地址A存储的数据。

S302、向至少一个第二节点分别发送修改信息。

其中,修改信息用于指示至少一个第二节点对各自对应的第二数据库中的数据进行更新。

具体的,修改信息用于指示至少一个第二节点根据第一节点对其对应的第一数据库中的数据进行的修改,更新其其对应的第二数据库中的数据。

可以理解的是,第二数据库和第一数据库为不同的数据库。

下面结合一个示例,对S301和S302做进一步详细说明。

假设用户A通过分布式系统向用后B转账1000元。首先,用户A通过控制其对应的第一节点对用户A对应的数据库1执行相应操作,从其对应的账户中扣除1000元。第一节点成功执行该事务后,将包括该事务对应的修改信息的第一消息发送给服务器。服务器接收到该第一消息后,向用户B对应的第二节点发送修改信息,指示该第二节点对用户B对应的数据库2执行相应的操作,以向用户B对应的账户中添加1000元。

本申请实施例,通过接收第一节点发送的包括第一节点对第一节点对应的第一数据库中的数据进行修改的修改信息第一消息,并向至少一个第二节点分别发送用于指示至少一个第二节点对各自对应的第二数据库中的数据进行更新修改信息,能够在不侵入已有系统的情况下,解决多个复杂系统之间相互调用和执行数据交互结果,保持最终一致性问题,降低运维成本。

分布式系统中,往往存在多个节点。图4为本申请提供的另一种基于分布式系统的数据处理方法的流程示意图,该方法适用于多个节点的情况,该方法应用于服务器,服务器包括Redis,如图4所示,该方法包括:

S401、接收第一节点发送的第一消息。

其中,第一消息中包括第一节点对第一节点对应的第一数据库中的数据进行修改的修改信息。

第一消息为第一节点在成功执行其本地事务后,生成的消息。

例如,第一节点执行的本地事务中包括删除第一数据库地址A中的数据,则当第一节点成功删除了其对应的第一数据库中的地址A存储的数据后,向服务器发送第一消息,该第一消息包括第一节点成功删除地址A存储的数据。

可选的,接收第一节点发送的第一消息之后,方法还包括:将修改信息存储至Redis中。

该方法,通过轻量级缓存组件Redis实现分布式事务最终一致性,解耦对现有系统的侵入性,降低了运维成本。

S402、向至少一个第二节点分别发送第二消息。

其中,第二消息用于通知第二节点第一数据库中的数据进行了修改。

当然,在一些应用场景中,在S401之后也可以直接执行S403。即服务器接收到第一节点发送的第一消息后,不通知任一第二节点。当第二节点执行其相应的本地事务时,主动询问服务器,获取相应的修改信息。

S403、接收至少一个第二节点发送的第三消息。

第二节点向服务器发送第三消息,用于获取其需要的修改信息。

示例性的,第三消息中可以包括第二节点执行其本地任务时需要的修改信息所对应的标识信息。

S404、根据第三消息向至少一个第二节点发送修改信息。

可选的,当服务器中包括第三消息指示的修改信息时,服务器则将该修改信息发送给第二节点;当服务器中不包括第三消息指示的修改信息时,服务器则可以向第二节点发送提示信息,提示第二节点对应的用户,未能找到其需要的修改信息。

当多个第二节点向服务器发送第三消息以获取相应的修改信息时,服务器则根据每个第三消息确定相应的修改信息并分发给对应的第二节点。不同第二节点对应的修改信息可能相同也可能不同。

示例性的,假设用户A通过分布式系统向用户B、用户C以及用户D群发等值红包。首先,用户A通过控制其对应的第一节点对用户A对应的数据库1执行相应操作,从其对应的账户中扣除300元。第一节点成功执行该事务后,将包括该事务执行信息的第一消息发送给服务器。服务器接收到该第一消息后,向用户B对应的第二节点发送修改信息1,指示该第二节点对用户B对应的数据库2执行相应的操作,以向用户B对应的账户中添加100元;向用户C对应的第二节点发送修改信息2,指示该第二节点对用户C对应的数据库3执行相应的操作,以向用户C对应的账户中添加100元;向用户D对应的第二节点发送修改信息3,指示该第二节点对用户D对应的数据库4执行相应的操作,以向用户D对应的账户中添加100元。

可选的,向至少一个第二节点分别发送修改信息之前,方法还包括:将至少一个第二节点各自对应的标识值加1。

示例性的,服务器接收到第一消息后,在向至少一个第二节点分别发送修改信息之前,将该第二节点对应的opKey值加1,得到新的opKey值。

通过设置标示值能够记录服务器收到的第一消息。

需要说明的是,当存在多个第二节点时,每个第二节点分别对应一个opKey,示例性的,第二节点A对应opKey1,第二节点B对应opKey2,第二节点C对应opKey2。

可选的,向至少一个第二节点分别发送修改信息之后,方法还包括:接收第二节点发送的第五消息,第五消息为第二节点对第二数据库中的数据修改成功后发送的;根据第五消息,将第二节点对应的标识值减1。

其中,第二节点可以是对第二数据库中的数据修改成功后立即发送第五消息,以通知服务器;也可以是在其对第二数据库中的数据修改成功,并根据修改后的第二数据库执行完相应事务后,才向服务器发送第五消息,以便通过服务器通知分布式系统中的其它节点,第二数据库最新的状态。

通过在第二节点对第二数据库中的数据修改成功后,将第二节点对应的标识值减1,能够标识第一节点和第二节点对一个的数据库以实现同步,并且,在第二节点成功修改完成第二数据库后,将标识值减1,使标识值恢复初始值,以便记录新的信息。

可选的,方法还包括:确定至少一个第二节点对各自对应的第二数据库中的数据与修改信息是否一致;若不一致,则向至少一个第二节点发送第四消息,第四消息用于指示第二节点对第二数据库进行回滚操作。

可以理解的是,如果任意第二节点各自对应的第二数据库中的数据与其对应的修改信息不一致,则表明第一节点和第二节点未能成功实现数据同步。则通过回滚操作将该第二节点恢复至前一个状态,即恢复至未进行此次数据同步之前的状态。

在一种可能的实现方式中,确定至少一个第二节点对各自对应的第二数据库中的数据与修改信息是否一致,包括:获取至少一个第二节点各自对应的标识值;判断至少一个第二节点对应的标识值是否为预设值;若至少一个第二节点对应的标识值为预设值,则确定至少一个第二节点对各自对应的第二数据库中的数据与修改信息是否一致。

示例性的,获取任一第二节点对应的opKey值,若该opKey值恢复为初始值,则确定该第二节点成功执行了与修改信息相关的事务,换言之,该第二节点对应的第二数据库中的数据与其对应的修改信息一致。

本申请实施例,在上述实施例的基础上,进一步结合轻量级缓存组件Redis,通过向至少一个第二节点分别发送第二消息,接收至少一个第二节点发送的第三消息,根据第三消息向至少一个第二节点发送修改信息,能够根据第二节点的需求向其发送相应的修改信息,减少了第一节点和第二节点之间不必要的通信过程,提高了数据通信的有效性;进一步的,还可以在向至少一个第二节点分别发送修改信息之前,方法还包括:将至少一个第二节点各自对应的标识值加1;向至少一个第二节点分别发送修改信息之后,方法还包括:接收第二节点发送的第五消息,第五消息为第二节点对第二数据库中的数据修改成功后发送的;根据第五消息,将第二节点对应的标识值减1,对其接收到的消息做相应得到标记;进一步,还通过确定至少一个第二节点对各自对应的第二数据库中的数据与修改信息是否一致;若不一致,则向至少一个第二节点发送第四消息,第四消息用于指示第二节点对第二数据库进行回滚操作,进而能够通过轻量级缓存组件Redis实现分布式事务最终一致性,降低对现有系统的侵入性,降低了运维成本。

图5为本申请提供的一种基于分布式系统的数据处理装置的结构示意图,如图5所示,该装置包括:

接收模块51,用于接收第一节点发送的第一消息,第一消息中包括第一节点对第一节点对应的第一数据库中的数据进行修改的修改信息。

发送模块52,用于至少一个第二节点分别发送修改信息,修改信息用于指示至少一个第二节点对各自对应的第二数据库中的数据进行更新。

可选的,发送模块52,具体用于向至少一个第二节点分别发送第二消息,第二消息用于通知第二节点第一数据库中的数据进行了修改;收至少一个第二节点发送的第三消息;根据第三消息向至少一个第二节点发送修改信息。

可选的,发送模块52,还用于确定至少一个第二节点对各自对应的第二数据库中的数据与第一数据库中的数据是否一致;若不一致,则分别向第一节点和至少一个第二节点发送第四消息,第四消息用于指示第一节点对第一数据库进行回滚操作,并用于指示第二节点对第二数据库进行回滚操作。

可选的,发送模块52,具体用于获取至少一个第二节点各自对应的标识值;判断至少一个第二节点对应的标识值是否均相同;若至少一个第二节点对应的标识值均相同,则确定至少一个第二节点对各自对应的第二数据库中的数据与第一数据库中的数据一致。

可选的,发送模块52,还用于将至少一个第二节点各自对应的标识值加1;向至少一个第二节点分别发送修改信息之后,方法还包括:接收第二节点发送的第五消息,第五消息为第二节点对第二数据库中的数据修改成功后发送的;根据第五消息,将第二节点对应的标识值减1。

可选的,接收模块51,还用于将修改信息存储至Redis中。

该基于分布式系统的数据处理方法装置可以执行上述的基于分布式系统的数据处理方法,其内容和效果可参考方法实施例部分,对此不再赘述。

图6为本申请提供的电子设备的一种结构示意图,如图6所示,本实施例的电子设备包括:处理器61、存储器62;处理器61与存储器62通信连接。存储器62用于存储计算机程序。处理器61用于调用存储器62中存储的计算机程序,以实现上述实施例中的方法。

可选地,该电子设备还包括:收发器63,用于与其他设备实现通信。

该电子设备可以执行上述的基于分布式系统的数据处理方法,其内容和效果可参考方法实施例部分,对此不再赘述。

本公开还提供了一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,计算机执行指令被处理器执行时用于实现如上述任一方法实施例中的方法。

该计算机可读存储介质所存储的计算机执行指令被处理器执行时能实现上述基于分布式系统的数据处理方法,其内容和效果可参考方法实施例部分,对此不再赘述。

本公开还提供了一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现如上述任一方法实施例中的方法。

该计算机程序产品被处理器执行时能实现上述基于分布式系统的数据处理方法,其内容和效果可参考方法实施例部分,对此不再赘述。

最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

相关技术
  • 基于分布式系统的数据处理方法、装置及存储介质
  • 分布式系统的数据处理方法、装置及存储介质
技术分类

06120113822534