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

一种处理分布式数据库事务的方法

文献发布时间:2024-04-18 19:59:31


一种处理分布式数据库事务的方法

技术领域

本发明公开一种方法,涉及分布式数据库技术领域,具体地说是一种处理分布式数据库事务的方法。

背景技术

而随着微服务架构的普及,大型业务系统往往由若干个子系统构成,这些子系统又拥有各自独立的数据库。往往一个业务流程需要由多个子系统共同完成,而且这些操作可能需要在一个事务中完成。在微服务系统中,这些业务场景普遍存在,此时,需要在数据库之上支持跨数据库的事务即分布式事务,进行业务的处理。但现有的分布式事务处理存在不规范等问题,容易导致的数据库异常问题等情况的发生。

发明内容

本发明针对现有技术的问题,提供一种处理分布式数据库事务的方法,减轻事务对数据库的压力,更好的保证事务处理的安全性、数据的幂等性,提高事务处理的效率,可应用于大部分分布式数据库。

本发明提出的具体方案是:

本发明提供一种处理分布式数据库事务的方法,通过消息中间件协助上游系统和下游系统进行分布式事务处理,包括:

通过上游系统处理上游任务前向消息中间件发送消息,通过消息中间件记录上游任务,上游系统处理完成上游任务后,向消息中间件发送请求,所述请求包含Commit命令,通过消息中间件根据Commit命令向下游系统投递消息,触发下游任务执行,直至分布式事务处理完成。

进一步,所述的一种处理分布式数据库事务的方法中所述通过消息中间件记录上游任务,包括:

通过消息中间件接收上游系统发送的有关上游任务的消息,将所述消息持久化,并向上游系统返回一个确认应答,

收到确认应答后,上游系统开始处理上游任务。

进一步,所述的一种处理分布式数据库事务的方法中若上游系统处理完成上游任务失败,则向消息中间件发送Rollback请求,通过消息中间件放弃向下游系统投递消息,不触发下游任务执行。

进一步,所述的一种处理分布式数据库事务的方法中通过上游系统建立本地消息表,将上游任务记录在本地消息表中,再向消息中间件发送消息,提示有上游任务,通过消息中间件建立失败消息表,记录失败的上游任务,下游系统向消息中间件定期校对失败消息表获知失败的上游任务。

本发明还提供一种处理分布式数据库事务的装置,包括上游任务管理模块、消息管理模块和下游任务管理模块,

所述装置利用消息中间件协助上游系统和下游系统进行分布式事务处理,其中上游任务管理模块处理上游任务前向消息中间件发送消息,消息管理模块通过消息中间件记录上游任务,上游任务管理模块处理完成上游任务后,向消息中间件发送请求,所述请求包含Commit命令,消息管理模块通过消息中间件根据Commit命令向下游系统投递消息,触发下游任务执行,直至分布式事务处理完成。

进一步,所述的一种处理分布式数据库事务的装置中所述消息管理模块通过消息中间件记录上游任务,包括:

通过消息中间件接收上游任务管理模块发送的有关上游任务的消息,将所述消息持久化,并向下游任务管理模块返回一个确认应答,

收到确认应答后,下游任务管理模块开始处理上游任务。

进一步,所述的一种处理分布式数据库事务的装置中若上游任务管理模块处理完成上游任务失败,则向消息管理模块发送Rollback请求,消息管理模块通过消息中间件放弃向下游系统投递消息,不触发下游任务执行。

进一步,所述的一种处理分布式数据库事务的装置中上游任务管理模块建立本地消息表,将上游任务记录在本地消息表中,再向消息管理模块发送消息,提示有上游任务,消息管理模块通过消息中间件建立失败消息表,记录失败的上游任务,下游任务管理模块向消息管理模块定期校对失败消息表获知失败的上游任务。

本发明的有益之处是:

本发明提供一种处理分布式数据库事务的方法,与现有技术相比,利用消息中间件可以帮助解决分布式事务的一致性难题,提供高效稳定的数据一致性,同时提高了系统的可扩展性和性能,实现了消耗成本较低。并且保证了数据库操作的一致性,数据库数据的幂等性,在复杂连续的数据库操作中,能够规避大部分数据库异常问题,保正数据的安全性。

附图说明

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

图1是本发明方法流程示意图。

图2是本发明方法中回滚情况流程示意图。

图3是本发明方法中重试机制与定期校对流程示意图。

具体实施方式

下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定。

本发明提供一种处理分布式数据库事务的方法,通过消息中间件协助上游系统和下游系统进行分布式事务处理,包括:

通过上游系统处理上游任务前向消息中间件发送消息,通过消息中间件记录上游任务,上游系统处理完成上游任务后,向消息中间件发送请求,所述请求包含Commit命令,通过消息中间件根据Commit命令向下游系统投递消息,触发下游任务执行,直至分布式事务处理完成。

本发明方法通过引入消息中间件等方式,对原有分布式处理方式进行改良,提高了分布式事务处理的效率,保证了事务的安全性和数据的幂等性,扩大了分布式事务的应用场景,易于理解和学习。

具体应用中,在本发明方法的一些实施例中,进行分布式事务处理时,可参考如下:

假设有上游系统A和下游系统B,分别可以处理上游任务A和下游任务B。此时系统A中存在一个业务流程,需要将上游任务A和下游任务B在同一个事务中处理。

在系统A处理任务A前,向消息中间件发送一条消息,消息中间件收到后将该条消息持久化,但并不投递。此时下游系统B仍然不知道该条消息的存在;

消息中间件持久化成功后,便向系统A返回一个确认应答;

系统A收到确认应答后,则可以开始处理任务A;任务A处理完成后,向消息中间件发送Commit请求,该请求发送完成后,对系统A而言,该事务的处理过程就结束了,此时它可以处理别的任务了。

消息中间件收到Commit指令后,便向系统B投递该消息,从而触发任务B的执行,当任务B执行完成后,系统B向消息中间件返回一个确认应答,告诉消息中间件该消息已经成功消费,此时,这个分布式事务完成。

若commit消息在传输途中丢失,从而消息中间件并不会向系统B投递这条消息,从而系统就会出现不一致性。这个问题由消息中间件的事务回查机制完成。

进一步地,若上游系统A处理完成上游任务失败,则向消息中间件发送Rollback请求,系统A发完之后便可以认为回滚已经完成,它便可以去做其他的事情。消息中间件收到回滚请求后,直接将该消息丢弃,而不投递给系统B,从而不会触发系统B的任务B。

若对于不支持事务型消息的消息中间件,如果要实现分布式事务的话,在上述方案的基础上,可以增加如下操作,能够通过重试机制+定期校对实现分布式事务:

通过上游系统建立本地消息表,将上游任务记录在本地消息表中,再向消息中间件发送消息,提示有上游任务,通过消息中间件建立失败消息表,记录失败的上游任务,下游系统向消息中间件定期校对失败消息表获知失败的上游任务。

其中上游系统在完成任务后,向消息中间件同步地发送一条消息,确保消息中间件成功持久化这条消息,然后上游系统可以做别的事情。

消息中间件收到消息后负责将该消息同步投递给相应的下游系统,并触发下游系统的任务执行;当下游系统处理成功后,向消息中间件反馈确认应答,消息中间件便可以将该条消息删除,从而该事务完成。

本发明还提供一种处理分布式数据库事务的装置,包括上游任务管理模块、消息管理模块和下游任务管理模块,

所述装置利用消息中间件协助上游系统和下游系统进行分布式事务处理,其中上游任务管理模块处理上游任务前向消息中间件发送消息,消息管理模块通过消息中间件记录上游任务,上游任务管理模块处理完成上游任务后,向消息中间件发送请求,所述请求包含Commit命令,消息管理模块通过消息中间件根据Commit命令向下游系统投递消息,触发下游任务执行,直至分布式事务处理完成。

上述装置内的各模块间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。

同样地,本发明装置利用消息中间件可以帮助解决分布式事务的一致性难题,提供高效稳定的数据一致性,同时提高了系统的可扩展性和性能,实现了消耗成本较低。并且保证了数据库操作的一致性,数据库数据的幂等性,在复杂连续的数据库操作中,能够规避大部分数据库异常问题,保正数据的安全性。

需要说明的是,上述各流程和各装置结构中不是所有的步骤和模块都是必须的,可以根据实际的需要忽略某些步骤或模块。各步骤的执行顺序不是固定的,可以根据需要进行调整。上述各实施例中描述的系统结构可以是物理结构,也可以是逻辑结构,即,有些模块可能由同一物理实体实现,或者,有些模块可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。

以上所述实施例仅是为充分说明本发明而所举的较佳的实施例,本发明的保护范围不限于此。本技术领域的技术人员在本发明基础上所作的等同替代或变换,均在本发明的保护范围之内。本发明的保护范围以权利要求书为准。

技术分类

06120116525115