一种分布式事务框架集成方法、系统、设备和介质
文献发布时间:2023-06-19 19:23:34
技术领域
本发明涉及分布式技术领域,具体涉及一种分布式事务框架集成方法、系统、设备和介质。
背景技术
随着单体架构系统逐步向微服务架构演进,分布式事务问题日益凸显。在并发量不是很高的系统,使用开源分布式事务框架来解决分布式事务问题是一个很好的选择。目前市面上有许多开源分布式事务框架,比较突出的像个人开源的Bytetcc以及阿里开源的seata。但是这些开源分布式事务框架都存在一些缺点。比如:Bytetcc由于是个人开源,没有经过生产实践,引入后项目改造量也大,原来的一个接口,现在要改成try、commit、rollback三个接口;seata经历过阿里内部大量项目的实践,稳定性这块是没有问题的,但是seata的部分模式存在全局锁,完成一次分布式事务需要与服务端交互多次。这些技术问题都会让系统并发能力大大下降,在高并发系统中是无法接受的。为此,有必要研究能够降低对高并发系统性能的影响、维持数据一致性的分布式事务框架。
如中国专利CN114741162A,公开日2022年7月12日,服务编排方法、装置、存储介质和设备。该方法包括:对交易流程信息进行解析,得到微服务序列;在确定微服务序列包含第一微服务和第二微服务的情况下,创建本地事务与分布式事务;按照序位从前到后的顺序,依次执行每个微服务,得到每个微服务的执行状态;对于每个微服务,若微服务的类型为本地服务,将微服务的执行状态保存到本地事务中;若微服务的类型为远程服务,将微服务的执行状态保存到分布式事务中;在每个微服务的执行状态均为执行成功的情况下,将本地事务与分布式事务保存到预设数据库中,并提示用户交易流程执行成功,能够确保本地服务与远程服务之间的事务一致性,以提高业务的处理效率。但是该技术方案并没有解决对高并发系统性能影响大的技术问题。
发明内容
本发明所要解决的技术问题:目前分布式事务框架存在对高并发系统性能影响大的技术问题,提出了一种分布式事务框架集成方法、系统、设备和介质,基于流程编排集成分布式事务框架,相比于现有技术去除了服务端,在解决分布式事务的过程中没有额外的交互,能够大大降低对高并发系统性能的影响。
解决上述技术问题,本发明采用如下技术方案:一种分布式事务框架集成方法,包括以下步骤:
定义配置文件,获取所述配置文件;
解析获取到的配置文件,得到流程模型对象;
根据所述流程模型对象,构建流程节点对象,并将所述流程节点对象按照配置文件中的顺序组装成流程对象;
实例化流程节点动作,按照所述流程节点动作执行流程对象中的流程节点对象;
当所述流程节点对象存在执行失败时,对执行失败的流程节点对象进行回滚操作,直至流程对象中的全部流程节点对象执行成功。
作为优选,所述配置文件为xml格式,所述配置文件包括流程节点以及流程节点组装顺序,所述流程节点中含有正向逻辑和回滚逻辑。
作为优选,解析获取到的配置文件,得到流程模型对象的方法包括:
解析所述配置文件,得到document对象;
根据所述document对象获取到根节点;
创建流程模型配置对象,将所述根节点的属性赋值至流程模型配置对象;
获取根节点下的子节点列表;
创建流程节点模型配置对象,将全部子节点的属性赋值至流程节点模型配置对象中;
赋值后的流程模型配置对象和流程节点模型配置对象构成流程模型对象。
作为优选,按照流程节点动作执行流程对象中的流程节点对象的方法包括:
按照流程节点动作的顺序获取所述流程对象中的流程节点对象,并将流程节点对象压入栈中;
对流程节点对象执行正向逻辑,得出执行成功的节点信息;
通过栈弹出执行成功的节点信息,直到栈中没有节点信息。
作为优选,对执行失败的流程节点对象进行回滚操作的方法包括:
当流程节点对象执行失败后,获取当前栈顶的流程节点对象;
对栈顶的流程节点对象执行回滚逻辑;
判断回滚逻辑是否执行成功,若回滚逻辑执行成功,则回滚操作结束,若回滚逻辑执行失败,则对当前回滚操作进行重试。
作为优选,对当前回滚操作进行重试的方法包括:
对当前回滚逻辑执行失败的流程节点对象重新执行回滚逻辑;
判断回滚逻辑是否执行成功,若回滚逻辑执行成功,则回滚操作结束,若回滚逻辑执行失败,则执行下一步骤;
再次执行回滚逻辑,判断回滚逻辑是否执行成功,若回滚逻辑执行成功,则回滚操作结束,若回滚逻辑执行失败,则执行下一步骤;
第三次执行回滚逻辑,判断回滚逻辑是否执行成功,若回滚逻辑执行成功,则回滚操作结束,若回滚逻辑执行失败,则发出报警信号。
作为优选,所述分布式事务框架集成方法还包括以下步骤:
在按照所述流程节点动作执行流程对象中的流程节点对象之前,在每个流程节点对象前插入一条记录数据,所述记录数据用于记录全部流程节点对象的执行信息;
周期性查询所述记录数据的存在时间,若所述存在时间未超过预设时长,则在全部流程节点对象执行成功后,删除所述记录数据,若所述存在时间超过预设时长,则执行下一步骤;
获取存在时间超过预设时长的记录数据,提取所述记录数据记录的流程节点对象,并对提取出的流程节点对象执行回滚逻辑。
一种分布式事务框架集成系统,用于执行如前述的一种分布式事务框架集成方法,包括:
配置解析模块,用于解析预先定义的配置文件,得到流程模型对象;
流程构建模块,用于根据所述流程模型对象构建流程节点对象,并将所述流程节点对象按照配置文件中的顺序组装成流程对象;
流程执行模块,用于执行流程对象中的流程节点对象;
流程回滚模块,用于对执行失败的流程节点对象进行回滚操作,直至流程对象中的全部流程节点对象执行成功。
作为优选,所述预先定义的配置文件包括流程节点以及流程节点组装顺序,所述流程节点中含有正向逻辑和回滚逻辑。
作为优选,所述流程回滚模块对执行失败的流程节点对象进行回滚操作时,执行以下步骤:
当流程节点对象执行失败后,获取当前流程节点对象;
对当前流程节点对象执行回滚逻辑;
判断回滚逻辑是否执行成功,若回滚逻辑执行成功,则回滚操作结束,若回滚逻辑执行失败,则执行下一步骤;
对当前回滚逻辑执行失败的流程节点对象重新执行回滚逻辑;
判断回滚逻辑是否执行成功,若回滚逻辑执行成功,则回滚操作结束,若回滚逻辑执行失败,则执行下一步骤;
再次执行回滚逻辑,判断回滚逻辑是否执行成功,若回滚逻辑执行成功,则回滚操作结束,若回滚逻辑执行失败,则执行下一步骤;
第三次执行回滚逻辑,判断回滚逻辑是否执行成功,若回滚逻辑执行成功,则回滚操作结束,若回滚逻辑执行失败,则发出报警信号。
作为优选,所述分布式事务框架集成系统还包括延时回滚模块,所述延时回滚模块用于在延时后对数据不一致的流程节点对象进行回滚操作。
一种计算机设备,
所述计算机设备包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如前述的一种分布式事务框架集成方法。
一种计算机可读存储介质,
所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如前述的一种分布式事务框架集成方法。
本发明的有益技术效果包括:采用一种分布式事务框架集成方法、系统、设备和介质,通过流程编排的方法集成分布式事务框架,相比于现有的开源分布式事务框架去除了服务端,作为轻量级框架在解决分布式事务的过程中没有额外的交互,能够大大降低对高并发系统性能的影响,在解决分布式事务问题的同时还考虑了性能的问题,且基于流程编排的分布式事务框架集成简单,引入后项目改造量小,只需新增一个回滚接口;通过重试机制进行重试,三次重试失败后发出报警信号,由人工干预检查异常,保证框架的稳定性;通过延时回滚机制处理流程执行过程中系统宕机的情况,达到最终数据一致的效果。
本发明的其他特点和优点将会在下面的具体实施方式、附图中详细的揭露。
附图说明
下面结合附图对本发明做进一步的说明:
图1为本发明实施例分布式事务框架集成方法流程图。
图2为本发明实施例的解析配置文件得到流程模型对象的方法流程图。
图3为本发明实施例的按照流程节点动作执行流程节点对象的方法流程图。
图4为本发明实施例的对执行失败的流程节点对象进行回滚操作的方法流程图。
图5为本发明实施例的对当前回滚操作进行重试的方法流程图。
图6为本发明实施例一种分布式事务框架集成系统结构示意图。
图7为本发明实施例一种计算机设备的结构示意图。
其中:1、配置解析模块,2、流程构建模块,3、流程执行模块,4、流程回滚模块,5、计算机设备,6、存储器,7、处理器,8、计算机程序。
具体实施方式
下面结合本发明实施例的附图对本发明实施例的技术方案进行解释和说明,但下述实施例仅为本发明的优选实施例,并非全部。基于实施方式中的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得其他实施例,都属于本发明的保护范围。
在下文描述中,出现诸如术语“内”、“外”、“上”、“下”、“左”、“右”等指示方位或者位置关系仅是为了方便描述实施例和简化描述,而不是指示或暗示所指的装置或者元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
在详细说明本实施例技术方案之前,首先对本实施例应用的背景情况进行介绍。
分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。分布式事务处理(TP)系统旨在协助在分布式环境中跨异类的事务识别资源的事务。在分布式事务处理系统的支持下,应用程序可以将不同的活动合并为一个事务性单元,这些活动包括从“消息队列”队列检索消息、将消息存储在Microsoft SQL Server数据库中、将所有现有的消息引用从Oracle Server数据库中移除等等。事务的ACID属性是指:1、原子性(Atomicity),原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生;2、一致性(Consistency),事务必须使数据库从一个一致性状态变换到另外一个一致性状态;3、隔离性(Isolation),事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。4、持久性(Durability),持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。因为分布式事务跨越多个数据库资源,所以强制分布式事务的ACID属性以及维护所有资源上的数据一致性是很重要的。
随着单体架构系统逐步向微服务架构演进,分布式事务问题日益凸显。在并发量不是很高的系统,使用开源分布式事务框架来解决分布式事务问题是一个很好的选择。目前市面上有许多开源分布式事务框架,比较突出的像个人开源的Bytetcc以及阿里开源的seata。但是这些开源分布式事务框架都存在一些缺点。比如:Bytetcc由于是个人开源,没有经过生产实践,引入后项目改造量也大,原来的一个接口,现在要改成try、commit、rollback三个接口;seata经历过阿里内部大量项目的实践,稳定性这块是没有问题的,但是seata的部分模式存在全局锁,完成一次分布式事务需要与服务端交互多次。这些技术问题都会让系统并发能力大大下降,在高并发系统中是无法接受的。因此,亟需开发能够降低对高并发系统性能的影响、维持数据一致性的分布式事务框架。
为此,本申请实施例提供了一种分布式事务框架集成方法,请参阅附图1,包括以下步骤:
步骤A01)定义配置文件,获取配置文件。
可选地,由用户定义配置文件,并在项目启动时基于class path获取到配置文件。其中,class path是指类路径,也就是编译之后的target文件夹下的WEB-INF/class文件夹,配置文件定义后会存放在resources文件夹中,当项目被编译时resources文件夹中的所有配置文件均被放在WEB-INF/class文件夹下,也就是类路径下。
步骤A02)解析获取到的配置文件,得到流程模型对象。
优选地,本实施例通过dom4j框架解析获取到的配置文件。其中,dom4j框架是一个易用的、开源的库,它应用于Java平台,采用了Java集合框架并完全支持DOM接口、SAX接口和JAXP接口,dom4j是jdom的升级品,用于读写XML文件、XPath文件和XSLT文件,这已经是本领域技术人员常用的jar包,Hibernate也用它来读写配置文件。其中,Hibernate是一个开放源代码的对象关系映射框架,它对JDBC(Java数据库连接)进行了非常轻量级的对象封装,它将POJO(Plain Ordinary Java Object,简单的Java对象)与数据库表建立映射关系,是一个全自动的ORM框架,Hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
步骤A03)根据流程模型对象,构建流程节点对象,并将流程节点对象按照配置文件中的顺序组装成流程对象。
进一步的,流程对象是由流程节点对象按照配置文件中的顺序组装成的一条单链表,是一套可运行的流程,包含了流程的各个可运行的节点。
步骤A04)实例化流程节点动作,按照流程节点动作执行流程对象中的流程节点对象。
其中,实例化流程节点动作的操作与现有技术中实例化对象的相关操作相类似,示例地,本实施例通过反射机制实例化流程节点动作。其中,反射机制是Java语言的一种机制,利用反射机制动态的实例化对象(构造函数)、读写属性、调用方法。使用反射机制实例化对象比较灵活,Java代码只需写一遍,在不改变Java源代码的基础之上,可以做到不同对象的实例化。
步骤A05)当流程节点对象存在执行失败时,对执行失败的流程节点对象进行回滚操作,直至流程对象中的全部流程节点对象执行成功,则整个分布式事务正常完成。
通过流程编排的方法集成分布式事务框架,相比于现有的开源分布式事务框架去除了服务端,作为轻量级框架在解决分布式事务的过程中没有额外的交互,能够大大降低对高并发系统性能的影响,在解决分布式事务问题的同时还考虑了性能的问题,且基于流程编排的分布式事务框架集成简单,引入后项目改造量小,只需新增一个回滚接口。
另一方面,本实施例中,配置文件为xml格式,配置文件包括流程节点以及流程节点组装顺序,流程节点中含有正向逻辑和回滚逻辑。
另一方面,本实施例中,请参阅附图2,解析获取到的配置文件,得到流程模型对象的方法包括:
步骤B01)解析获取到的配置文件,得到document对象;
步骤B02)根据document对象获取到根节点;
步骤B03)创建流程模型配置对象,将根节点的属性赋值至流程模型配置对象;
步骤B04)获取根节点下的子节点列表;
步骤B05)创建流程节点模型配置对象,将全部子节点的属性赋值至流程节点模型配置对象中;
步骤B06)赋值后的流程模型配置对象和流程节点模型配置对象构成流程模型对象。
示例地,定义的配置文件代码包括:
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://www.w3school.com.cn process-engine.xsd”> 随后,解析获取到的配置文件,得到流程模型对象的方法包括: 通过dom4j框架解析获取到的配置文件,得到document对象; 根据document对象获取到根节点,即示例配置文件中name为createOrder的节点; 创建流程模型配置对象,将根节点name的属性赋值至流程模型配置对象; 获取根节点下的子节点列表,即示例配置文件中name为stockNode、accountNode以及storageNode的节点; 创建流程节点模型配置对象,将stockNode、accountNode以及storageNode节点的name、class、next、begin属性赋值至流程节点模型配置对象的map数据结构中,name作为Key(键值); 赋值后的流程模型配置对象和流程节点模型配置对象构成流程模型对象。 其中,JavaScript的对象(Object)本质上是键值对的集合(Hash结构),但是只能用字符串作为键,这给它的使用带来了很大的限制。为了解决这个问题,提供了map数据结构。map数据结构类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。 另一方面,本实施例中,请参阅附图3,按照流程节点动作执行流程对象中的流程节点对象的方法包括: 步骤C01)按照流程节点动作的顺序获取流程对象中的流程节点对象,并将流程节点对象压入栈中; 步骤C02)对流程节点对象执行正向逻辑,得出执行成功的节点信息; 步骤C03)通过栈弹出执行成功的节点信息,直到栈中没有节点信息。 另一方面,本实施例中,请参阅附图4,对执行失败的流程节点对象进行回滚操作的方法包括: 步骤D01)当流程节点对象执行失败后,获取当前栈顶的流程节点对象; 步骤D02)对栈顶的流程节点对象执行回滚逻辑; 步骤D03)判断回滚逻辑是否执行成功,若回滚逻辑执行成功,则回滚操作结束,若回滚逻辑执行失败,则对当前回滚操作进行重试。 其中,栈为先进后出的数据结构,所以后执行的流程节点对象会先进行回滚,在执行正向逻辑出现错误时,通过对当前栈顶的流程节点对象自动执行回滚逻辑,确保已经执行过正向逻辑的分支事务数据回滚。 另一方面,本实施例中,请参阅附图5,对当前回滚操作进行重试的方法包括: 步骤E01)对当前回滚逻辑执行失败的流程节点对象重新执行回滚逻辑; 步骤E02)判断回滚逻辑是否执行成功,若回滚逻辑执行成功,则回滚操作结束,若回滚逻辑执行失败,则执行下一步骤; 步骤E03)再次执行回滚逻辑,判断回滚逻辑是否执行成功,若回滚逻辑执行成功,则回滚操作结束,若回滚逻辑执行失败,则执行下一步骤; 步骤E04)第三次执行回滚逻辑,判断回滚逻辑是否执行成功,若回滚逻辑执行成功,则回滚操作结束,若回滚逻辑执行失败,则发出报警信号。 通过重试机制对执行错误的回滚操作进行重试,三次重试失败后发出报警信号,由人工干预检查异常,保证本实施例分布式事务框架的稳定性。 另一方面,本实施例中,分布式事务框架集成方法还包括以下步骤: 在按照流程节点动作执行流程对象中的流程节点对象之前,在每个流程节点对象前插入一条记录数据,记录数据用于记录全部流程节点对象的执行信息; 周期性查询记录数据的存在时间,若存在时间未超过预设时长,则在全部流程节点对象执行成功后,删除记录数据,若存在时间超过预设时长,则执行下一步骤; 获取存在时间超过预设时长的记录数据,提取记录数据记录的流程节点对象,并对提取出的流程节点对象执行回滚逻辑。 延时回滚机制主要用于应对极端场景下,正常流程执行了一部分,或是回滚执行了一部分,系统突然宕机了,导致数据不一致。若记录数据的存在时间未超过预设时长,则说明全部流程节点对象正常执行,没有出现极端场景,所以在全部流程节点对象执行成功后,删除记录数据;若记录数据的存在时间超过预设时长,则说明有流程节点对象没有执行完全,流程中断,所以需要提取记录数据记录的流程节点对象,并对提取出的流程节点对象进行回滚。 可选地,在进行回滚时,可以判断一下记录数据中是否存在对应的回滚记录,若存在回滚记录,则说明流程节点对象已经执行过回滚逻辑,不需要再执行;若不存在回滚记录,则需要进行回滚,获取流程节点对象的执行记录,通过反射机制根据类名实例化类,对于执行正向逻辑时中断的,则对执行成功的流程节点对象进行回滚,对于执行回滚逻辑时中断的,则对剩下未回滚的流程节点对象进行回滚。 优选地,对于记录数据的存储,出于对系统性能影响的考虑,本实施例优选地用redis作为记录数据存储的实现,即在配置文件中声明使用redis存储,示例地:process.engine.store.type : redis。其中,redis是典型的Key-Value类型数据库,它不仅仅支持简单的K/V类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 本实施例通过延时回滚机制处理流程执行过程中系统宕机的情况,达到维持最终数据一致性的效果。 另一方面,本申请实施例还提供了一种分布式事务框架集成系统,用于执行如前述的一种分布式事务框架集成方法,请参阅附图6,包括: 配置解析模块1,用于解析预先定义的配置文件,得到流程模型对象; 流程构建模块2,用于根据流程模型对象构建流程节点对象,并将流程节点对象按照配置文件中的顺序组装成流程对象; 流程执行模块3,用于执行流程对象中的流程节点对象; 流程回滚模块4,用于对执行失败的流程节点对象进行回滚操作,直至流程对象中的全部流程节点对象执行成功。 另一方面,本实施例中,预先定义的配置文件包括流程节点以及流程节点组装顺序,流程节点中含有正向逻辑和回滚逻辑。 另一方面,本实施例中,流程回滚模块4对执行失败的流程节点对象进行回滚操作时,执行以下步骤: 当流程节点对象执行失败后,获取当前流程节点对象; 对当前流程节点对象执行回滚逻辑; 判断回滚逻辑是否执行成功,若回滚逻辑执行成功,则回滚操作结束,若回滚逻辑执行失败,则执行下一步骤; 对当前回滚逻辑执行失败的流程节点对象重新执行回滚逻辑; 判断回滚逻辑是否执行成功,若回滚逻辑执行成功,则回滚操作结束,若回滚逻辑执行失败,则执行下一步骤; 再次执行回滚逻辑,判断回滚逻辑是否执行成功,若回滚逻辑执行成功,则回滚操作结束,若回滚逻辑执行失败,则执行下一步骤; 第三次执行回滚逻辑,判断回滚逻辑是否执行成功,若回滚逻辑执行成功,则回滚操作结束,若回滚逻辑执行失败,则发出报警信号。 另一方面,本实施例中,分布式事务框架集成系统还包括延时回滚模块,延时回滚模块用于在延时后对数据不一致的流程节点对象进行回滚操作。 另一方面,本申请实施例还提供了一种计算机设备,请参阅附图7, 计算机设备5包括存储器6、处理器7以及存储在存储器6中并可在处理器7上运行的计算机程序8,计算机程序8被处理器7执行时实现如前述的一种分布式事务框架集成方法。 其中,处理器7可以是中央处理单元(Central Processing Unit,CPU),处理器7还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者也可以是任何常规的处理器7。 其中,存储器6存储有程序代码,程序代码可以被处理器7执行,使得处理器7执行本说明书上述任一项的一种分布式事务框架集成方法。存储器6在一些实施例中可以是计算机设备5的内部存储单元,比如计算机设备5的硬盘或内存。存储器6在另一些实施例中也可以是计算机设备5的外部存储设备,比如计算机设备5上配备的插接式硬盘、智能存储卡(Smart Media Card,SMC)、安全数字(Secure Digital,SD)卡、闪存卡(Flash Card)等。进一步地,存储器6还可以既包括计算机设备5的内部存储单元也包括外部存储设备。 另一方面,本申请实施例还提供了一种计算机可读存储介质, 计算机可读存储介质存储有计算机程序8,计算机程序8被处理器7执行时实现如前述的一种分布式事务框架集成方法。 其中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,熟悉该本领域的技术人员应该明白本发明包括但不限于附图和上面具体实施方式中描述的内容。任何不偏离本发明的功能和结构原理的修改都将包括在权利要求书的范围中。
- 深网查询接口集成方法、系统、计算设备及存储介质
- 一种用电设备智能控制方法及系统、计算机设备及介质
- 一种镀膜设备的控制方法及系统,镀膜设备及存储介质
- 一种音频播放方法及系统、一种计算设备及存储介质
- 一种录音方法、系统和音频分离方法、设备和存储介质
- 一种以设备为中心的多系统集成框架系统及显示方法
- 一种应用系统接口集成系统、集成方法、设备及存储介质