一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种分布式事务处理方法、装置、设备和存储介质与流程

2022-11-19 10:04:26 来源:中国专利 TAG:


1.本发明涉及计算机技术领域,尤其涉及一种分布式事务处理方法、装置、设备和存储介质。


背景技术:

2.it系统架构向高性能、高可用、高伸缩方向发展导致微服务技术的广泛应用,在微服务架构下分布式事务场景大量出现,如电商、erp、物流系统等领域广泛存在。
3.分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。例如在下单场景下,库存和订单如果不在同一个节点上,就涉及分布式事务。
4.现有的常用的分布式事务的解决方案有:第一种(如附图1)是两阶段提交协议,通过引入协调者来协调参与者的行为,并最终决定这些参与者是否要真正执行事务,包括阶段一:开始向事务涉及到的全部资源发送提交前信息。此时,事务涉及到的资源还有最后一次机会来异常结束事务。如果任意一个资源决定异常结束事务,则整个事务取消,不会进行资源的更新。否则,事务将正常执行,除非发生灾难性的失败。为了防止会发生灾难性的失败,所有资源的更新都会写入到日志中。这些日志是永久性的,因此,这些日志会幸免于难并且在失败之后可以重新对所有资源进行更新。阶段二:只在阶段一没有异常结束的时候才会发生。此时,所有能被定位和单独控制的资源管理器都将开始执行真正的数据更新。在分布式事务两阶段提交协议中,有一个主事务管理器负责充当分布式事务协调器的角色。事务协调器负责整个事务并使之与网络中的其他事务管理器协同工作。为了实现分布式事务,必须使用一种协议在分布式事务的各个参与者之间传递事务上下文信息,iiop便是这种协议。这就要求不同开发商开发的事务参与者必须支持一种标准协议,才能实现分布式的事务。
5.存在的问题是:1、同步阻塞,所有事务参与者在等待其它参与者响应的时候都处于同步阻塞状态,无法进行其他操作。2、单点问题,协调者在这两个阶段中起到非常大的作用,发生故障将会造成很大影响,特别是在阶段二发生故障,所有参与者会一直等待状态,无法完成其他操作。3、数据不一致,在阶段二,如果协调者只发送了部分commit消息,此时网络发生异常,那么只有部分参与者接收到commit消息,也就是说只有部分参与者了提交了事务,使得系统数据不一致。4、太过保守,任意一个节点失败就会导致整个事务失败,没有完善的容错机制。
6.第二种是补偿事务,采用补偿机制,其核心思想是:针对每个操作,都要注册一个与其对应的确认和补偿(撤销)操作。它分为三个阶段:1)try阶段主要是对业务系统做检测及资源预留;2)confirm阶段主要是对业务系统做确认提交,try阶段执行成功并开始执行confirm阶段时,默认confirm阶段是不会出错的。即:只要try成功,confirm一定成功。3)cancel阶段主要是在业务执行错误,需要回滚的状态下执行的业务取消,预留资源释放。例如,假设甲要向乙转账,思路大概是:我们有一个本地方法,里面依次调用。首先在try阶段,
要先调用远程接口把甲和乙的钱给冻结起来。然后在confirm阶段,执行远程调用的转账操作,转账成功进行解冻。最后,如果第二步执行成功,那么转账成功,如果第二步执行失败,则调用远程冻结接口对应的解决方法。存在的问题是第二步和第三步都有可能失败,补偿事务属于应用层的一种补偿方式,所以需要程序员在实现的时候多写很多补偿的代码,在一些场景中,一些业务流程可能用事务补偿不太好定义处理。
7.综上所述,目前解决分布式事务的方案大多数采用强一致性事务处理方案,该方案进行实施需按照事务确认模型的提交、确认、回滚三个步骤分别编写相应业务逻辑处理,存在对业务代码侵入度高,开发复杂度高这些问题,且抽象度较低导致代码复用度不高,每次开发需要将部分代码重复编写一次。存在的另一个问题是运行可靠性较低,每一个事件的执行需要所有的事件节点全部执行成功才能提交成功,对分布式系统意外宕机、网络波动导致的服务断联容错率较低。


技术实现要素:

8.本发明提供的一种分布式事务处理方法及装置,所要解决的技术问题是克服现有技术中事务控制和业务耦合度高,灵活性差的缺陷,提供一种自动化程度高,事务节点可装配的分布式事务解决方案。从而可以灵活配置事务节点模板,专注于业务开发,同时可保障分布式事务数据最终一致性。
9.为实现上述目的,本发明采用以下技术方案:步骤s1,在事件定义,事件流程节点定义和发布订阅关系过程中创建补偿通道;步骤s2,在事件发布阶段,主流程根据业务向多个事件流程节点发起分布式事务处理;步骤s3,在运行阶段,若存在当前事件流程节点处理失败,则采用接口幂等技术对当前所述事件流程节点进行重试补偿,以达到事务最终一致性。
10.接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为相同业务数据多次请求造成业务处理结果异常。举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条,这就没有保证接口的幂等性。为了保证一个方法或属性在高并发情况下的同一时间只能被同一线程执行,在传统单体应用单机部署的情况下,可以使用并发处理相关的功能进行互斥控制。但是,随着业务发展的需要,原单体单机部署的系统被演化成分布式集群系统后,由于分布式系统多线程、多进程并且分布在不同机器上,这就使原单机部署情况下的并发控制锁策略失败,单纯的应用并不能提供分布式锁的能力。为了解决这个问题就需要一种跨机器的互斥机制来控制共享资源的访问,就是分布式锁要解决的问题。这里采用的基于redis的实现方式,因为redis有更高的性能,redis命令对此支持较好,实现起来比较方便。实现思想为:(1)获取锁的时候,使用setnx加锁,并使用expire命令为锁添加一个超时时间,超过该时间则自动释放锁,锁的value值为一个随机生成的uuid,通过此在释放锁的时候进行判断。(2)获取锁的时候还设置一个获取的超时时间,若超过这个时间则放弃获取锁。(3)释放锁的时候,通过uuid判断是不是该锁,若是该锁,则执行delete进行锁释放。
11.作为优选,在步骤s1中,包括根据事件配置组件配置和所述业务相对应的事件流程节点数量和并在所述流程节点配置请求路径和补偿通道。
12.作为优选,在步骤s2中,通过切面技术在多个所述事件流程节点对业务分别执行处理过程,并向所述主流程返回流程节点处理结果;所述主流程根据多个所述事件流程节点返回的多个所述节点处理结果更新,完成分布式事务处理;若存在当前事件流程节点处理失败,则进行步骤s3。
13.作为优选,在步骤s3中,包括:设定业务的唯一编码,并对所述唯一编码进行前置检查和后置处理。
14.作为优选,所述前置检查包括:根据所述业务的唯一编码添加分布式锁,添加锁成功之后,执行业务执行结果检查,如已经执行成功则结束当前任务执行。
15.作为优选,所述后置处理,包括:进行业务执行结果检查,业务如果执行失败抛出执行异常信息,后置处理组件检查到异常信息后执行解锁操作并返回执行结果;若执行成功,则将所述业务唯一编号写入redis缓存内,并根据业务情况设置缓存过期时间。
16.一种分布式事务处理装置,包括:事件配置组件,用于将分布式事务下具体的流程节点抽象为事件和事件节点模型,定义事件编码、节点编码,所属事件,补偿接口路径,对不同业务场景下的事件流程节点统一处理;接口幂组件,用于进行重试补偿,以达到事务最终一致性事件节点消息上报组件,用于当事件发生时,将事件上报到消息收集组件;消息收集组件,用于将上报消息进行存储,根据上报消息所属事件及流程节点对数据进行结构化存储,根据事件配置信息(事件编码、流程节点编码、流程节点个数)对事件节点执行结果进行完整性以及正确性检查,检查不通过的数据移入修复队列通过补偿任务对事件节点进行补偿修复,修复失败会继续重试,直到修复成功或达到最大修复次数。异常数据会存储至错误事件库中,供人工检查修复。
17.事件补偿组件,用于事务补偿调用,通过事件配置组件中配置的流程节点补偿url,获取上报事件中的参数信息,通过调用时间递增的方式进行多次重复执行,达到事件补偿目的。
18.一种电子设备,包括存储器和处理器,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现如上述中任一项所述的一种分布式事务处理方法。
19.一种存储有计算机程序的计算机可读存储介质,所述计算机程序使计算机执行时实现如上述中任一项所述的一种分布式事务处理方法。
20.本发明具有如下有益效果:该基于事件补偿机制的数据最终一致性办法,不仅降低了配置的技术难度,减少了最终用户的配置的工作量,还保证了发送事件与业务数据的事务一致性,保证了事件数
据不会丢失;同时,在运行阶段实现了业务和事务控制的分离,灵活高效,自动化程度高,适宜推广应用。
附图说明
21.图1是现有技术中解决分布式事务的一种方式;图2是本发明实施例实现一种分布式事务处理方法的流程图;图3是本发明实施例实现一种分布式事务处理方法中接口幂等组件设计图;图4是本发明实施例实现一种分布式事务处理装置示意图;图5是本发明实施例实现一种分布式事务处理装置的一种电子设备示意图。
具体实施方式
22.下面将结合附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
23.本技术的权利要求书和说明书的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序,应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本技术的实施例中对相同属性的对象在描述时所采用的区分方式,此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其他单元。
24.除非另有定义,本文所使用的所有的技术和科学术语与属于本技术的技术领域的技术人员通常理解的含义相同,本文中在本技术的说明书中所使用的术语只是为了描述具体的实施例的目的,不是在于限制本技术。
25.实施例1如图2和3所示,一种分布式事务处理方法,包括以下步骤:步骤s1,在事件定义,事件流程节点定义和发布订阅关系过程中创建补偿通道;步骤s2,在运行阶段,通过切面技术在事件流程节点执行过程中根据执行结果自动上报当前节点执行结果,采用接口幂等技术对所述事件流程节点进行重试补偿,以达到事务最终一致性。
26.在实施例1中,幂等组件提供接口执行幂等能力,结合分布式锁组件、aop切面技术,redis缓存来设计接口幂等组件(各自执行各自的功能),达到同一业务只执行成功一次,多次重复执行最终结果不变,达到保障平台服务最终执行一致性的目的。这个组件是保证相同参数的请求,只请求成功一次,通过分布式锁实现同一时刻只有一个服务去执行这一件事,执行完成之后,结合redis缓存判断执行结果,这是为了保证幂等的第二步。通过切面技术将执行结果记录到redis缓存中,方便下一次请求再进来,进行判断任务是否已经被执行的结果。切面技术,比如具有单独功能的模块比如支付,原来去调用支付的话,只会执行支付相关的功能,如果要再加一下逻辑的话,比如在支付前校验用户到底合法不合法,或者说这个事件处理完做一下记录日志或其他操作,如果不使用切面技术,都需要在原有的
模块内进行去修改,加入这些功能,就是在代码的开头或结尾各加一段业务代码。而切面技术使用的是一种代理模式,相当于在真正执行支付这个方法的时候充当一个代理对象,这个代理对象有一个类似接口的功能,可以在执行这个方法之前做一些什么事,在执行这个方法之后做一些什么事,中间是原有的执行逻辑。事件代表一次任务,一次支付成功,需要改订单的状态,也需要改账户的状态,商家收了多少钱,用户账户减了多少钱,改订单状态是一个流程,动账户也是一个流程,这些流程是归属于事件,根据业务抽象出一个完整的业务链,命名为多个事件,比如支付,然后支付这个事件下面分为多个流程,比如a流程,b流程,c流程。比如业务分为五个步骤,五个步骤走完是一个事件,五个步骤下面是流程节点,每一个流程节点包括正向执行和修补的功能,若事件没执行成功,可以再执行一次。在配置事件的流程节点时,事件配置组件判断有多少业务需要处理,配置一个大的,每一个业务事件下面需要配置多少流程节点,每一个流程节点定义请求路径和补偿通道。
27.并根据设定业务的唯一编码,并对所述唯一编码进行前置检查和后置处理,所述前置检查包括:根据所述业务的唯一编码添加分布式锁,添加锁成功之后,执行业务执行结果检查,如已经执行成功则结束当前任务执行。所述后置处理,包括:进行业务执行结果检查,业务如果执行失败抛出执行异常信息,后置处理组件检查到异常信息后执行解锁操作并返回执行结果;若执行成功,则将所述业务唯一编号写入redis缓存内,并根据业务情况设置缓存过期时间。前置检查就是为了判断这件事到底有没有执行成功,最终保证幂等;后置处理是指执行成功了,将结果放在redis存储中,作为下一次判断是否是同样请求的依据。不仅降低了配置的技术难度,减少了最终用户的配置的工作量,还保证了发送事件与业务数据的事务一致性,保证了事件数据不会丢失;同时,在运行阶段实现了业务和事务控制的分离,灵活高效,自动化程度高,适宜推广应用。
28.实施例2如图4所示,一种分布式事务处理装置,包括:事件配置组件,用于将分布式事务下具体的流程节点抽象为事件和事件节点模型,定义事件编码、节点编码,所属事件,补偿接口路径,对不同业务场景下的事件流程节点统一处理;接口幂组件,用于进行重试补偿,以达到事务最终一致性事件节点消息上报组件,用于当事件发生时,将事件上报到消息收集组件;消息收集组件,用于将上报消息进行存储,根据上报消息所属事件及流程节点对数据进行结构化存储,根据事件配置信息(事件编码、流程节点编码、流程节点个数)对事件节点执行结果进行完整性以及正确性检查,检查不通过的数据移入修复队列通过补偿任务对事件节点进行补偿修复,修复失败会继续重试,直到修复成功或达到最大修复次数。异常数据会存储至错误事件库中,供人工检查修复。
29.事件补偿组件,用于事务补偿调用,通过事件配置组件中配置的流程节点补偿url,获取上报事件中的参数信息,通过调用时间递增的方式进行多次重复执行,达到事件补偿目的。
30.由实施例2可知,事件配置组件提供灵活配置事件流程的能力,将分布式事务下具体的流程节点抽象为事件和事件节点模型,定义事件编码、节点编码,所属事件,补偿接口路径,对不同业务
场景下的事件流程节点统一处理,适配性更强。
31.消息收集组件将事件节点的执行结果通过消息队列进行收集,执行扫描,设计待扫描、待修复2个队列,设计2个扫描进程分别处理对应数据,将执行失败数据转移到待修复队列内,修复进程对错误数据进行修复。
32.事件节点消息上报组件采用切面技术,对业务代码执行进行后置切入,将事件执行结果通过消息队列上报消息收集组件。
33.幂等组件:提供接口执行幂等能力,结合分布式锁组件、aop切面,redis缓存来设计接口幂等组件(各自执行各自的功能),达到同一业务只执行成功一次,多次重复执行最终结果不变,达到保障平台服务最终执行一致性的目的,保证幂等性。
34.实施例3如图5所示,一种电子设备,包括存储器501和处理器502,所述存储器501用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器502执行以实现上述的一种分布式事务处理方法。
35.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的电子设备的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
36.一种存储有计算机程序的计算机可读存储介质,所述计算机程序使计算机执行时实现如上述的一种分布式事务处理方法。
37.示例性的,计算机程序可以被分割成一个或多个模块/单元,一个或者多个模块/单元被存储在存储器501中,并由处理器502执行,并由输入接口505和输出接口506完成数据的i/o接口传输,以完成本发明,一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述计算机程序在计算机设备中的执行过程。
38.计算机设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。计算机设备可包括,但不仅限于,存储器501、处理器502,本领域技术人员可以理解,本实施例仅仅是计算机设备的示例,并不构成对计算机设备的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件,例如计算机设备还可以包括输入器507、网络接入设备509、总线等。
39.处理器502可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器502、数字信号处理器502(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-program503mablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器502可以是微处理器502或者该处理器502也可以是任何常规的处理器502等。
40.存储器501可以是计算机设备的内部存储单元,例如计算机设备的硬盘或内存。存储器501也可以是计算机设备的外部存储设备,例如计算机设备上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等,进一步地,存储器501还可以既包括计算机设备的内部存储单元也包括外部存储设备,存储器501用于存储计算机程序以及计算机设备所需的其他程序和数据,存储器501还可以用于暂时地存储在输出器508,而前述的存储介质包括u盘、移动硬盘、只读存储器rom503、随机存储器ram504、碟盘或光盘等各种可以存储程序代码的介质。
41.以上所述仅为本发明的具体实施例,但本发明的技术特征并不局限于此,任何本领域的技术人员在本发明的领域内,所作的变化或修饰皆涵盖在本发明的专利范围之中。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献