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

基于分布式事务的数据处理方法、装置、设备及存储介质

文献发布时间:2023-06-19 10:08:35


基于分布式事务的数据处理方法、装置、设备及存储介质

技术领域

本申请涉及数据处理技术领域,具体而言,涉及一种基于分布式事务的数据处理方法、装置、设备及存储介质。

背景技术

将全部业务混在一块的单体应用架构在信息化建设初期发挥了举足轻重的作用,伴随着业务规模越来越大,逻辑越来越复杂,单体应用架构的部署成本与变更风险也越来越高,已经无法快速响应需求变更。因此,构建具备微服务架构特征的应用系统成为一种趋势。

但在选择微服务架构解决快速响应需求变更的同时,应用按照业务模块拆分为数量众多且相互独立的服务单元,完成一次用户请求将涉及服务之间的多次远程调用,如何确保服务间远程过程调用产生的多数据源写操作的数据一致性成为亟需解决的问题。现有的分布式事务解决方案通常是二阶段和三阶段提交方法。

但是现有技术中的分布式解决方案在整个执行过程中,所有阶段的参与者都是事务阻塞型,其它参与者访问公共资源将处于阻塞等待状态,严重降低系统的处理性能,均存在同步阻塞的缺陷。

发明内容

本申请的目的在于,针对上述现有技术中的不足,提供一种基于分布式事务的数据处理方法、装置、设备及存储介质,以解决现有技术中分布式事务处理存在同步阻塞的问题。

为实现上述目的,本申请实施例采用的技术方案如下:

第一方面,本申请一实施例提供了一种基于分布式事务的数据处理方法,所述方法包括:

获取客户端发送的事务信息;

根据所述事务信息,解析获取对应的接口标注信息,所述接口标注信息用于指示事务入口;

根据所述接口标注信息,获取对应的代理标注信息;

根据所述代理标注信息,获取远程待同步信息。

可选地,所述接口标注信息包括下述一项或多项:事务的传播特性、事务的隔离级别、事务的只读属性;

所述代理标注信息包括下述一项或多项:服务的提供者标识、服务的使用者标识。

可选地,所述获取客户端发送的事务信息之前,还包括:

获取针对远程调用接口的注解操作,在远程调用接口上写入所述代理标注信息;

响应于事务调用的方法编辑操作,在所述事务调用的方法程序内写入所述接口标注信息。

可选地,所述获取客户端发送的事务信息,包括:

接收所述客户端发送的未完成事务信息,并在本地存储所述未完成事务信息。

可选地,所述远程待同步信息包括远程被调用方法:接口全类名、方法名称、参数类型、参数名称、方法返回类型;

所述根据所述代理标注信息,获取远程待同步信息之后,还包括:

根据所述远程待同步信息、所述代理标注信息,生成全局唯一的主事务标识、从事务标识,并将所述未完成事务信息存储至线程上下文环境;

根据所述线程上下文环境执行所述未完成事务对应的后置处理流程,在执行完毕后更新所述未完成事务信息的状态为事务完成信息;

将所述事务完成信息写入远程事务日志记录和本地事务日志记录。

可选地,所述方法还包括:

按照预设周期轮询所述远程事务日志记录和所述本地事务日志记录,完成数据同步。

可选地,所述接收所述客户端发送的未完成事务信息,并在本地存储所述未完成事务信息之后,还包括:

获取客户端传输的与所述未完成事务信息基于同一事务的事务完成信息;

根据所述未完成事务信息验证所述事务完成信息的有效性。

第二方面,本申请另一实施例提供了一种基于分布式事务的数据处理装置,所述装置包括:获取模块和解析模块,其中:

所述获取模块,用于获取客户端发送的事务信息;

所述解析模块,用于根据所述事务信息,解析获取对应的接口标注信息,所述接口标注信息用于指示事务入口;

所述获取模块,具体用于根据所述接口标注信息,获取对应的代理标注信息;根据所述代理标注信息,获取远程待同步信息。

可选地,所述装置还包括:写入模块,其中:

所述获取模块,具体用于获取针对远程调用接口的注解操作,在远程调用接口上写入所述代理标注信息;

所述写入模块,用于响应于事务调用的方法编辑操作,在所述事务调用的方法程序内写入所述接口标注信息。

可选地,所述远程待同步信息包括远程被调用方法:接口全类名、方法名称、参数类型、参数名称、方法返回类型;所述装置还包括:存储模块,用于接收所述客户端发送的未完成事务信息,并在本地存储所述未完成事务信息。

可选地,所述装置还包括:生成模块和更新模块,其中:

所述生成模块,用于根据所述远程待同步信息、所述代理标注信息,生成全局唯一的主事务标识、从事务标识,并将所述未完成事务信息存储至线程上下文环境;

所述更新模块,用于根据所述线程上下文环境执行所述未完成事务对应的后置处理流程,在执行完毕后更新所述未完成事务信息的状态为事务完成信息;

所述写入模块,具体用于将所述事务完成信息写入远程事务日志记录和本地事务日志记录。

可选地,所述装置还包括:同步模块,用于按照预设周期轮询所述远程事务日志记录和所述本地事务日志记录,完成数据同步。

可选地,所述装置还包括:验证模块,其中:

所述获取模块,具体用于获取客户端传输的与所述未完成事务信息基于同一事务的事务完成信息。

所述验证模块,用于根据所述未完成事务信息验证所述事务完成信息的有效性。

第三方面,本申请另一实施例提供了一种基于分布式事务的数据处理设备,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的机器可读指令,当基于分布式事务的数据处理设备运行时,所述处理器与所述存储介质之间通过总线通信,所述处理器执行所述机器可读指令,以执行如上述第一方面任一所述方法的步骤。

第四方面,本申请另一实施例提供了一种存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如上述第一方面任一所述方法的步骤。

本申请的有益效果是:采用本申请提供的基于分布式事务的数据处理方法,可以通过预先对接口标注信息的方式,在获取客户端发送的事务信息后,根据事务信息解析获取对应的接口标注信息,随后根据接口标注信息获取对应的代理标注信息,根据代理标注信息获取远程待同步信息,这样的处理方法可以直接通过在相应的接口上通过标注注解的方式标注事务入口信息,即可实现对分布式处理进行分布,无需编写代码,在整个处理过程中的步骤均为异步处理,从而避免了同步阻塞的问题。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本申请一实施例提供的基于分布式事务的数据处理方法的流程示意图;

图2为本申请一实施例提供的分布式事务的数据处理框架构建过程的流程示意图;

图3为本申请另一实施例提供的基于分布式事务的数据处理方法的流程示意图;

图4为本申请另一实施例提供的基于分布式事务的数据处理方法的流程示意图;

图5为本申请一实施例提供的基于分布式事务的数据处理装置的结构示意图;

图6为本申请另一实施例提供的基于分布式事务的数据处理装置的结构示意图;

图7为本申请一实施例提供的基于分布式事务的数据处理设备的结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。

通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。

另外,本申请中使用的流程图示出了根据本申请的一些实施例实现的操作。应该理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。

在本申请的一个实施例中,基于分布式事务的数据处理方法可以应用于包括客户端和应用端的应用程序的分布式事务处理场景中,客户端对应的接口标注信息为被调用方的代理标注信息,应用端对应的接口标注信息为调用方的标注信息,用于指示事务入口,这样的设置方式使得客户端和应用端可以直接通过对接口进行标注的方式就可以使用本申请提供的方法,并且本申请提供的方法中各步骤均为异步处理,因此避免了同步阻塞和数据不一致的问题;应当理解上述场景仅为示例性命名,本申请提供的方法还可以应用于包括客户端和应用端的网页或小程序上的分布式事务处理场景中,具体应用场景可以根据用户需要灵活调整,并不以上述实施例给出的为限。

如下结合多个具体的应用示例,对本申请实施例所提供的一种基于分布式事务的数据处理方法进行解释说明。图1为本申请一实施例提供的一种基于分布式事务的数据处理方法的流程示意图,应用于预设的分布式事务管理器中,预设的分布式管理器例如可以为基于spring框架构建的,预设的分布式管理器可以包括:分布式事务消息接收器、分布式事务消息执行器、分布式事务执行结果处理器、分布式事务自动补偿机制功能模块。如图1所示,该方法包括:

S101:获取客户端发送的事务信息。

示例地,在本申请的一个实施例中,例如可以接收客户端发送的未完成事务信息(prepare消息),并在本地存储未完成事务信息。

其中,客户端的事务信息例如可以为客户端的用户通过登陆客户端上的应用程序后发起的,例如用户在登陆客户端上的购物应用程序后,若在购物应用程序上点击购买,则此时发起的事务信息即为购买事务信息。

S102:根据事务信息,解析获取对应的接口标注信息。

其中,接口标注信息用于指示事务入口。

可选地,接口标注信息可以包括下述一项或多项:事务的传播特性、事务的隔离级别、事务的只读属性;在本申请的一个实施例中,例如可以采用全局事务GloableTransactional注解的方式对标注接口信息进行标注。

S103:根据接口标注信息,获取对应的代理标注信息。

其中,通过spring框架中的拦截器拦截具有标注信息的接口,随后根据接口标注信息获取对应的代理标注信息,随后通知本地事务执行结果器开启对应的分布式事务的处理过程。

可选地,代理标注信息包括下述一项或多项:服务的提供者标识、服务的使用者标识;在本申请的一个实施例中,例如可以采用分布式事务AsyncFeignClient注解的方式对代理标注信息进行标注。

这样的接口标注方式可以直接通过在相应的接口上通过标注注解的方式标注事务入口信息,并根据事务入口信息获取对应的代理标注信息,即可实现对分布式处理进行分布,无需编写代码,从而简化了流程,提高了搭建效率。

示例地,在本申请的一个实施例中,代理标注信息和接口标注信息均为预先写入的,写入方式例如可以为在S102之前,获取针对远程调用接口的注解操作,在远程调用接口上写入代理标注信息;响应于事务调用的方法编辑操作,在事务调用的方法程序内写入接口标注信息。

在本申请的一个实施例中,各应用程序可以根据预设的分布式管理器对该应用程序对应的分布式事务的数据处理框架进行构建,图2为本申请一实施例提供的分布式事务的数据处理框架构建过程的流程示意图,如图2所示,构建步骤如下:

1010:启动分布式事务管理器。

其中,分布式事务管理器包含分布式事务消息接收器、分布式事务消息执行器、分布式事务执行结果处理器、分布式事务自动补偿机制的功能。

1020:依赖分布式事务客户端的类库,在被调用的远程接口上标识分布式事务代理标注信息。

示例地,在本申请的一个实施例中,例如可以通过spring框架中的Feign调用远程接口,其中,分布式事务客户端类库中包含记录本地事务日志、分布式事务申明式客户端、本地事务执行结果处理器、分布式事务应用标识的功能。

1030:编写分布式事务调用的方法。

示例地,在一些可能的实施例中,调用方法可以为操作本地数据库进行写操作,调用远程调用方法。

1040:在分布式事务调用的方法上标记分布式事务应用注解。

S104:根据代理标注信息,获取远程待同步信息。

即本申请提供的方法的业务处理流程为:在获取客户端事务信息后,通过接口标注信息指示分布式事务入口,从而实现分布式事务的松耦合处理机制,在该分布式事务入口中,引入分布式事务核心处理,即根据接口标注信息获取对应的代理标注信息,其中核心处理的业务流程为通过对接口标注信息的分析,确定指定路径下标记有AsyncFeignClient注解的接口,并获取该接口的代理标注信息,为该接口中的所有方法生成代理,代理将实现获取被调用的远程方法的接口全类名、方法名称、参数类型、参数名称、方法返回类型。

采用本申请提供的基于分布式事务的数据处理方法,可以通过预先对接口标注信息的方式,在获取客户端发送的事务信息后,根据事务信息解析获取对应的接口标注信息,随后根据接口标注信息获取对应的代理标注信息,根据代理标注信息获取远程待同步信息,这样的处理方法可以直接通过在相应的接口上通过标注注解的方式标注事务入口信息,即可实现对分布式处理进行分布,无需编写代码,在整个处理过程中的步骤均为异步处理,从而避免了同步阻塞和数据不一致的问题。

可选地,在上述实施例的基础上,本申请实施例还可提供一种基于分布式事务的数据处理方法,如下结合附图对上述方法中基于分布式事务的数据处理的实现过程进行示例说明。图3为本申请另一实施例提供的一种基于分布式事务的数据处理方法的流程示意图,远程待同步信息包括远程被调用方法:接口全类名、方法名称、参数类型、参数名称、方法返回类型;如图3所示,S104之后,该方法还可包括:

S105:根据远程待同步信息、代理标注信息,生成全局唯一的主事务标识、从事务标识,并将未完成事务信息存储至线程上下文环境。

示例地,在本申请的一个实施例中,例如可以获取注解中的应用端的服务提供者和客户端的服务消费的名称,生成全局唯一的主事务标识(Identity document,id)和从事务标识,并构建未完成事务信息对应的事务prepare消息,将该消息存储至线程上下文环境,此时的消息处于客户端未确认状态。

S106:根据线程上下文环境执行未完成事务对应的后置处理流程,在执行完毕后更新未完成事务信息的状态为事务完成信息(commit消息)。

示例地,在本申请的一个实施例中,首先将线程上下文环境中的未完成事务信息发送至消息事务管理器,其次获取注解的事务的传播特性、事务的隔离级别、事务的只读属性,采用编程式方式设置事务的属性,并注册事务的同步后置处理流程,处理流程包括更新prepare消息状态为消费端已确认,写入数据库中,这样本地事务与记录事务日志处于同一事务中,成功执行事务之后,发送事务完成commit消息到事务管理器。

示例地,prepare消息与commit消息的数据结构均可以为包括:主事务ID、从事务ID、服务提供者名称、服务消费者名称、接口全类名、方法名称、参数类型、参数名称、方法返回类型、方法调用参数值、消息状态、创建时间;其中,prepare的消息状态为消费端未确认,即未完成事务信息的状态,commit的消息状态为消费端已确认,即事务完成信息的状态。

S107:将事务完成信息写入远程事务日志记录和本地事务日志记录。

示例地,在本申请的一个实施例中,本地事务日志记录中各日志记录的数据结构可以包括:事务日志唯一标识、主事务ID、从事务ID、服务提供者名称、服务消费者名称、接口全类名、方法名称、参数类型、参数名称、方法返回类型、方法调用参数值、创建时间;远程事务日志记录中各日志记录的数据结构可以包括:事务日志唯一标识、主事务ID、从事务ID、创建时间。

其中,将事务完成信息写入远程事务日志记录和本地事务日志记录,是指执行本地事务日志记录的过程中,记录一条事务日志,这两个过程处于执行同一事务的过程,确保远程事务日志记录与本地事务日志记录的同一事务的执行结果一致,要么同时成功,要么同时失败。

分布式事务执行结果处理器基于spring的事务同步管理器注册事务执行完成后的后置方法,该后置方法将根据消息执行器对未完成事务信息的执行状态,将执行状态写入远程事务日志记录,若执行成功,则远程事务日志的状态为服务端已提交,若执行失败,远程事务日志的状态为服务消费端(客户端)已提交,从而实现向分布式事务管理器发送提交commit消息,确保本地事务日志记录中的日志记录与发送commit消息的执行结果一致,要么同时成功,要么同时失败。

示例地,在本申请的一个实施例中,可以按照预设周期轮询所述远程事务日志记录和所述本地事务日志记录,完成数据同步。例如可以为定时轮询远程事务日志记录和本地驶入日志记录的各日志的执行状态,当监测到存在日志的执行状态为失败,根据该日志中事务的标识信息查询本地事务信息,重新发起远程方法调用处理异常事务执行结果。其中,重新发起的次数例如可以为预设次数,超过预设重新发起次数后,根据远程事务日志记录和本地事务日志记录对异常事务进行人工补偿,从而在保证数据最终的一致性的情况下,防止不断失败后重新发起导致管理器存在运行压力的问题。

可选地,在上述实施例的基础上,本申请实施例还可提供一种基于分布式事务的数据处理方法,如下结合附图对上述方法中基于分布式事务的数据处理的实现过程进行示例说明。图4为本申请另一实施例提供的一种基于分布式事务的数据处理方法的流程示意图,如图4所示,S101之后,该方法还可包括:

S108:获取客户端传输的与所述未完成事务信息基于同一事务的事务完成信息。

示例地,在本申请的一个实施例中,分布式事务消息接收器接负责收客户端发送的未完成事务消息(prepare消息)和事务完成消息(commit消息)。

S109:根据所述未完成事务信息验证所述事务完成信息的有效性。

其中,为了防止commit消息的重复消费导致事务重复提交,造成数据的不一致,在本申请的一个实施例中,可以将接收到的prepare消息存放在本地内存中,获取到当commit消息时,可以使用prepare消息对commit消息进行有效性校验,同时写入远程事务日志记录,并根据commit消息的内容,基于轮询的负载均衡算法执行相应的远程方法调用;正常情况下应该是先获取到prepare消息后,再获取到commit消息,为确保各消息的顺序到达,分布式事务消息接收器支持纠错两种消息的到达顺序,可以对commit消息优先于prepare消息到达的情况进行纠正处理,防止由于校验造成有效消息的丢失,造成数据的不一致的问题。

采用本申请提供的基于分布式事务的数据处理方法,可以通过预设分布式事务管理器的方式,通过对各应用程序的客户端类库的以来对接口和代理接口进行预先标注,得到各应用程序对应的分布式事务管理器,随后通过该应用程序对应的分布式事务管理器,在该应用程序的应用过程中实现分布式事务实现,即通过预先对接口标注信息的方式,在获取客户端发送的事务信息后,根据事务信息解析获取对应的接口标注信息,随后根据接口标注信息获取对应的代理标注信息,根据代理标注信息获取远程待同步信息,这样的处理方法可以直接通过在相应的接口上通过标注注解的方式标注事务入口信息,即可实现对分布式处理进行分布,无需编写代码,在整个处理过程中的步骤均为异步处理,从而避免了同步阻塞的问题,并且本申请提供的方法还可以通过分布式事务补偿机制,确保分布式事务的数据的最终一致性,从而解决了数据可能不一致的问题。

下述结合附图对本申请所提供的基于分布式事务的数据处理装置进行解释说明,该基于分布式事务的数据处理装置可执行上述图1-图4任一基于分布式事务的数据处理方法,其具体实现以及有益效果参照上述,如下不再赘述。

图5为本申请一实施例提供的基于分布式事务的数据处理装置的结构示意图,如图5所示,该装置包括:获取模块201和解析模块202,其中:

获取模块201,用于获取客户端发送的事务信息。

解析模块202,用于根据事务信息,解析获取对应的接口标注信息,接口标注信息用于指示事务入口。

获取模块201,具体用于根据接口标注信息,获取对应的代理标注信息;根据代理标注信息,获取远程待同步信息。

图6为本申请一实施例提供的基于分布式事务的数据处理装置的结构示意图,如图6所示,该装置还包括:写入模块203,其中:

获取模块201,具体用于获取针对远程调用接口的注解操作,在远程调用接口上写入代理标注信息。

写入模块203,用于响应于事务调用的方法编辑操作,在事务调用的方法程序内写入接口标注信息。

如图6所示,远程待同步信息包括远程被调用方法:接口全类名、方法名称、参数类型、参数名称、方法返回类型;该装置还包括:存储模块204,用于接收客户端发送的未完成事务信息,并在本地存储未完成事务信息。

如图6所示,该装置还包括:生成模块205和更新模块206,其中:

生成模块205,用于根据远程待同步信息、代理标注信息,生成全局唯一的主事务标识、从事务标识,并将未完成事务信息存储至线程上下文环境。

更新模块206,用于根据线程上下文环境执行未完成事务对应的后置处理流程,在执行完毕后更新未完成事务信息的状态为事务完成信息。

写入模块203,具体用于将事务完成信息写入远程事务日志记录和本地事务日志记录。

如图6所示,该装置还包括:同步模块207,用于按照预设周期轮询远程事务日志记录和本地事务日志记录,完成数据同步。

如图6所示,该装置还包括:验证模块208,其中:

获取模块201,具体用于获取客户端传输的与未完成事务信息基于同一事务的事务完成信息。

验证模块208,用于根据未完成事务信息验证事务完成信息的有效性。

上述装置用于执行前述实施例提供的方法,其实现原理和技术效果类似,在此不再赘述。

以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(Application Specific Integrated Circuit,简称ASIC),或,一个或多个微处理器(digital singnal processor,简称DSP),或,一个或者多个现场可编程门阵列(Field Programmable Gate Array,简称FPGA)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(CentralProcessing Unit,简称CPU)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system-on-a-chip,简称SOC)的形式实现。

图7为本申请一实施例提供的基于分布式事务的数据处理设备的结构示意图,该基于分布式事务的数据处理设备可以集成于终端设备或者终端设备的芯片。

该基于分布式事务的数据处理设备包括:处理器501、存储介质502和总线503。

处理器501用于存储程序,处理器501调用存储介质502存储的程序,以执行上述图1-图4对应的方法实施例。具体实现方式和技术效果类似,这里不再赘述。

可选地,本申请还提供一种程序产品,例如存储介质,该存储介质上存储有计算机程序,包括程序,该程序在被处理器运行时执行上述方法对应的实施例。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本申请各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取存储器(英文:Random Access Memory,简称:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

相关技术
  • 基于分布式事务的数据处理方法、装置、设备及存储介质
  • 一种分布式事务数据同步方法、装置、设备及可读存储介质
技术分类

06120112437312