分布式事务处理方法及装置与流程

文档序号:15198533发布日期:2018-08-19 02:31阅读:171来源:国知局

本说明书一个或多个实施例涉及计算机技术领域,尤其涉及一种用分布式事务处理方法及装置。



背景技术:

传统技术中,在处理分布式事务的过程中,为了保证各个参与者的一致性,事务处理器(transactionmanager,tm)通常通过串行的方式来调用各个参与者处理相应的分支事务。如图1所示,tm在处理分布式事务的过程中,会经过两个阶段:预处理阶段和提交(commit)或者回滚(rollback)阶段。在预处理阶段,tm会尝试锁定资源管理器(resourcemanager,rm)1(分布式环境下的一个独立参与者)中的资源,若能够成功则尝试去咨询和锁定rm2(分布式环境下的另一个独立参与者)中的资源,若也能够成功,则进入提交阶段。在提交阶段,tm会发起事务提交操作,在rm1中解除在预处理阶段锁定的资源并进行资源的消耗处理,成功后继续进行rm2的资源释放及实际消耗。在上述提交的过程中,若有任何异常,则tm会不断进行重试提交,直到成功为止。可以理解的是,如果在预处理阶段有失败,则发起回滚,tm只有在得到rm1及rm2的回滚成功应答后才会最终进行事务完结处理,否则会不断重试回滚,直到成功。

因此,需要提供一种更高效地处理分布式事务的方案。



技术实现要素:

本说明书一个或多个实施例描述了一种分布式事务处理方法及装置,可以提高分布式事务的处理效率。

第一方面,提供了一种分布式事务处理方法,包括:

事务管理器获取分布式事务对应的多个分支事务;

对所述多个分支事务进行解析,以确定所述多个分支事务各自的处理对象以及对所述处理对象对应的资源的处理方式;

根据所述处理对象和所述处理方式,确定所述多个分支事务之间的依赖关系;

根据所述依赖关系,并行和/或串行处理所述多个分支事务。

第二方面,提供了一种分布式事务处理装置,包括:

获取单元,用于获取分布式事务对应的多个分支事务;

解析单元,用于对所述获取单元获取的所述多个分支事务进行解析,以确定所述多个分支事务各自的处理对象以及对所述处理对象对应的资源的处理方式;

确定单元,用于根据所述解析单元解析得到的所述处理对象和所述处理方式,确定所述多个分支事务之间的依赖关系;

处理单元,用于根据所述确定单元确定的所述依赖关系,并行和/或串行处理所述多个分支事务。

本说明书一个或多个实施例提供的分布式事务处理方法及装置,事务管理器获取分布式事务的多个分支事务。对多个分支事务进行分析,以确定多个分支事务各自的处理对象以及对处理对象对应的资源的处理方式。根据处理对象和处理方式,确定多个分支事务之间的依赖关系。根据该依赖关系,并行和/或串行处理多个分支事务。由此,可以提高分布式事务的处理效率。

附图说明

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

图1为传统的分布式事务处理方法示意图;

图2为分布式事务处理方法的信息交互图;

图3为本说明书一个实施例提供的分布式事务处理方法的应用场景示意图;

图4为本说明书一个实施例提供的分布式事务处理方法流程图;

图5为本说明书一个实施例提供的分布式事务处理装置示意图。

具体实施方式

在详细介绍本说明书提供的方案之前,先结合传统技术给出如下优化思路:

图1所示的分布式事务处理方法的信息交互图可以如图2所示。从图2可以看出,在预处理阶段,事务管理器对各个参与者的调用本质上没有必然的依赖关系。此外,无论是在提交阶段还是在回滚阶段,上述调用过程也没有必然的依赖关系。因此,在分布式环境中,事务管理器对各个参与者之间的调用是可以采用并发的方式进行的。也即各个分支事务是可以并行处理的。通过上述并行的方式,在参与者越多的情况下,分布式事务处理的时间并不会线性增加。举例来说,若一次服务交互时间是t,则有n个参与者的情况下,若采用传统的分布式事务处理的方式,两个阶段的处理开销都是nt。而采用并行的方式,能够基本保证处理时间为t。

下面结合上述优化思路,对本说明书提供的方案进行详细描述。

本说明书一个实施例提供的分布式事务处理方法可以应用于如图3所示的场景中,图3中,业务系统用于根据业务请求,将分布式事务划分为多个分支事务。此处的分支事务可以是指分布式事务的一次行为。以业务需求为:“从账户a转账100元给账户b”为例来说,则可以将分布式事务划分为两个分支事务,该两个分支事务分别用于作如下处理:“a-100”和“b+100”。之后,业务系统可以将划分的多个分支事务发送给事务管理器。事务管理器在接收到上述多个分支事务之后,可以对该多个分支事务进行解析,以确定各自的处理对象(如,账户等)以及对处理对象对应的资源(如,账户余额、黄金等)的处理方式。之后,可以根据处理对象和处理方式,确定多个分支事务之间的依赖关系。并根据该依赖关系,并行和/或串行处理多个分支事务。最后,事务管理器将多个分支事务的处理结果信息返回给业务系统。

需要说明的是,图3中,事务管理器具体是通过调用参与者来处理分支事务的,其中,参与者可以是指事务管理器在处理分支事务时所调用的服务。如前述例子,一个参与者可以认为是财务库a,而另一个参与者可以认为是财务库b。具体地,在上述两个分支事务的处理过程中,事务管理器可以调用财务库a从账户a中转出100元,可以调用财务库b给账户b转入100元。由此,就保了账户a扣款和账户b加款的一致性。在上述分支事务的处理过程中,若有任何异常,则失败回滚,并反馈转账失败。

图4为本说明书一个实施例提供的分布式事务处理方法流程图。所述方法的执行主体可以为图3中的事务管理器。如图4所示,所述方法具体可以包括:

步骤410,事务管理器获取分布式事务对应的多个分支事务。

在一种实现方式中,业务系统可以根据业务需求,将分布式事务划分为多个分支事务。以业务需求为:“从账户a转账100元给账户b,从账户b分润5元给账户c”为例来说,则可以将分布式事务划分为四个分支事务,该四个分支事务分别用于作如下处理:“a-100”、“b+100”、“b-5”和“c+5”。之后,业务系统可以将划分的多个分支事务发送给事务管理器。

步骤420,对多个分支事务进行解析,以确定多个分支事务各自的处理对象以及对处理对象对应的资源的处理方式。

此处的处理对象可以包括用户的账户等。处理对象对应的资源可以包括但不限于账户余额(也称资金)以及黄金等。而对处理对象对应的资源的处理方式可以包括资源增加和资源消耗等。以处理对象为账户,处理对象对应的资源为账户余额为例来说,可以根据对账户的账户余额的增减情况,确定对资源的处理方式。具体地,当增加账户中的账户余额时,对资源的处理方式可以为资源增加;而当减少账户中的账户余额时,对资源的处理方式可以为资源消耗。

如前述例子,四个分支事务各自的处理对象分别为:“账户a”、“账户b”、“账户b”和“账户c”。此外,由于第一个分支事务用于从账户a的账户余额中扣除100元,也即第一个分支事务用于减少账户a中的账户余额,所以其对资源的处理方式为:“资源消耗”。同理可以确定出其它三个分支事务对资源的处理方式分别为:、“资源增加”、“资源消耗”和“资源增加”。

步骤430,根据处理对象和处理方式,确定多个分支事务之间的依赖关系。

在一种实现方式中,可以根据处理方式,对多个分支事务进行分类。在对分支事务进行分类后,根据处理对象,确定不同类别的分支事务之间的依赖关系。具体地,对多个分支事务中的每个分支事务,判断该分支事务对处理对象对应的资源的处理方式是否为资源增加。若是,则确定该分支事务的类别为资源增加类。若否,则确定该分支事务的类别为资源消耗类。对资源增加类的分支事务,可以直接将该类别的分支事务确定为不存在依赖关系的分支事务。对资源消耗类的分支事务,判断该资源消耗类的分支事务的处理对象是否与资源增加类的分支事务的处理对象相同。若是,则确定该资源消耗类的分支事务为存在依赖关系的分支事务。若否,则确定该资源消耗类的分支事务为不存在依赖关系的分支事务。

如前述例子,由于第二个分支事务(对应于“b+100”的分支事务)和第四个分支事务(对应于“c+5”的分支事务)对处理对象对应的资源的处理方式均为“资源增加”,所以可以确定该两个分支事务的类别为资源增加类。由于第一个分支事务(对应于“a-100”的分支事务)和第三个分支事务(对应于“b-5”的分支事务)对处理对象对应的资源的处理方式均为“资源消耗”,所以可以确定该两个分支事务的类别为资源消耗类。

对于资源增加类的两个分支事务,可以确定该两个分支事务为不存在依赖关系的分支事务。对资源消耗类的两个分支事务,由于第三个分支事务与第二个分支事务的处理对象(账户b)相同,所以可以确定第三个分支事务为存在依赖关系的分支事务。而第一个分支事务与资源增加类的两个分支事务的处理对象均不同,所以确定第一个分支事务为不存在依赖关系的分支事务。

步骤440,根据依赖关系,并行和/或串行处理多个分支事务。

在一种实现方式中,可以将不存在依赖关系的分支事务划分到第一分组,将存在依赖关系的分支事务划分到第二组。并行处理第一分组中的分支事务。在第一分组中的分支事务处理结束后,并行处理第二分组中的分支事务。

如前述例子,可以将第二个分支事务、第四个分支事务以及第一个分支事务划分到第一分组。将第三个分支事务划分到第二分组。之后,并行处理第二个分支事务、第四个分支事务以及第一个分支事务。在该三个分支事务处理结束后,处理第三个分支事务。此处,也可以理解为,第三个分支事务是串行处理的。

通过本说明书上述实施例提供的分布式事务处理方法,可以既提高分布式事务的处理效率,又能保证其处理的正确性。如前述例子,在对应于“a-100”、“b+100”和“c+5”的分支事务先并行处理,之后在串行处理对应于“b-5”分支事务的情况下,可以避免当对应于“b-5”分支事务先处理时,如果账户b的账户余额为0,则会处理失败的问题。也即,本说明书实施例中,当分支事务的处理对象相同时,可以通过设定处理顺序的方式,来保证其处理的正确性。

可以理解的是,在本说明书上述实施例提供的事务处理方法中,假设事务管理器调用一次服务(或者参与者)的时间为t,且假设分布式事务被划分为n个分支事务。那么在n个分支事务之间不存在依赖关系的情况下,分布式事务的处理时间开销为t。而在n个分支事务之间存在依赖关系的情况下,分布式事务的处理时间开销为2t。由此,可以看出,在分布式事务不存在依赖关系的情况下,本说明书提供的方案可以将分布式事务处理时间控制在单分支事务处理时间范围内,不会因为参与者增加而使得整个分布式事务处理时间增加。即便自分支事务之间存在依赖的情况下,处理时长依然可控,且不随着参与者规模扩大而导致处理时间增长。

与上述分布式事务处理方法对应地,本说明书一个实施例还提供的一种分布式事务处理装置,如图5所示,该装置包括:

获取单元501,用于获取分布式事务对应的多个分支事务。

解析单元502,用于对获取单元501获取的多个分支事务进行解析,以确定多个分支事务各自的处理对象以及对处理对象对应的资源的处理方式。

此处,处理对象可以为用户的账户等。处理对象对应的资源可以为账户余额等。

确定单元503,用于根据解析单元502解析得到的处理对象和处理方式,确定多个分支事务之间的依赖关系。

可选地,确定单元503具体可以用于:

根据处理方式,对多个分支事务进行分类;

根据处理对象,确定不同类别的分支事务之间的依赖关系。

可选地,确定单元503还具体可以用于:

对多个分支事务中的每个分支事务,判断分支事务对处理对象对应的资源的处理方式是否为资源增加。

若是,则确定分支事务的类别为资源增加类。

若否,则确定分支事务的类别为资源消耗类。

将资源增加类的分支事务确定为不存在依赖关系的分支事务。

对资源消耗类的分支事务,判断资源消耗类的分支事务的处理对象是否与资源增加类的分支事务的处理对象相同。

若是,则确定资源消耗类的分支事务为存在依赖关系的分支事务。

若否,则确定资源消耗类的分支事务为不存在依赖关系的分支事务。

处理单元504,用于根据确定单元503确定的依赖关系,并行和/或串行处理多个分支事务。

可选地,处理单元504具体可以用于:

将不存在依赖关系的分支事务划分到第一分组,将存在依赖关系的分支事务划分到第二组。

并行处理第一分组中的分支事务。

在第一分组中的分支事务处理结束后,并行处理第二分组中的分支事务。

本说明书上述实施例装置的各功能模块的功能,可以通过上述方法实施例的各步骤来实现,因此,本说明书一个实施例提供的装置的具体工作过程,在此不复赘述。

本说明书一个实施例提供的分布式事务处理装置,获取单元501获取分布式事务对应的多个分支事务。解析单元502对多个分支事务进行解析,以确定多个分支事务各自的处理对象以及对处理对象对应的资源的处理方式。确定单元503根据处理对象和处理方式,确定多个分支事务之间的依赖关系。处理单元504根据依赖关系,并行和/或串行处理多个分支事务。由此,可以提高分布式事务的处理效率。

本领域技术人员应该可以意识到,在上述一个或多个示例中,本说明书所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。

以上所述的具体实施方式,对本说明书的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本说明书的具体实施方式而已,并不用于限定本说明书的保护范围,凡在本说明书的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本说明书的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1