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

分布式系统的事务处理方法和装置、存储介质和电子装置与流程

2022-03-01 23:03:13 来源:中国专利 TAG:


1.本技术涉及互联网领域,尤其涉及一种分布式系统的事务处理方法和装置、存储介质和电子装置。


背景技术:

2.在分布式系统中,分布式数据库一般使用两阶段提交来保证事务提交一致性。分布式事务的提交过程可以分为两个阶段,其中,第一阶段下发预提交命令,等所有节点预提交成功之后,在第二阶段下发真正的提交命令。如果第一阶段有节点预提交失败,则第二阶段应该回滚。通过上述方式,可以保证整个分布式事务在不同节点上全部提交或者全部回滚,而不会出现部分提交部分回滚的情况。
3.然而,上述两阶段提交的事务处理过程,由于需要两次交互,存在事务处理时延较长导致的分布式系统事务吞吐量较低的问题。


技术实现要素:

4.本技术提供了一种分布式系统的事务处理方法和装置、存储介质和电子装置,以至少解决相关技术中的分布式系统的事务处理方法存在由于事务处理时延较长导致的分布式系统事务吞吐量较低的问题。
5.根据本技术实施例的一个方面,提供了一种分布式系统的事务处理方法,包括:从多个数据节点中确定与待执行的目标事务对应的目标数据节点,其中,所述多个数据节点的每个数据节点均为所述分布式系统中用于事务处理的数据节点;在所述目标数据节点的数量为一个的情况下,向所述目标数据节点发送目标提交请求,其中,所述目标提交请求用于请求所述目标数据节点提交所述目标事务;接收所述目标数据节点响应所述目标提交请求返回的第一响应消息,其中,所述第一响应消息用于指示所述目标事务的目标提交结果。
6.可选地,在从所述多个数据节点中确定与待执行的所述目标事务对应的所述目标数据节点之后,所述方法还包括:在所述目标数据节点的数量为多个的情况下,确定多个所述目标数据节点中除了第一数据节点以外的第二数据节点的目标预提交结果,其中,所述第一数据节点用于执行所述目标事务中的第一事务,所述第二数据节点用于执行所述目标事务中的第二事务,所述目标预提交结果为所述第二数据节点对所述第二事务的预提交结果;在所述目标预提交结果为预提交成功的情况下,确定所述第一数据节点对所述第一事务的第一提交结果和所述第二数据节点对所述第二事务的第二提交结果。
7.可选地,在确定多个所述目标数据节点中除了所述第一数据节点以外的所述第二数据节点的所述目标预提交结果之后,所述方法还包括:在所述第二数据节点包含多个子节点的情况下,分别确定所述多个子节点中的每个子节点的预提交子结果,其中,所述每个子节点的预提交子结果为所述每个子节点对所述第二事务中与所述每个子节点对应的子事务的预提交结果;在所述多个子节点中的目标子节点的预提交子结果为预提交失败的情况下,向所述每个子节点发送第一回滚请求,其中,所述第一回滚请求用于请求所述每个子
节点对与所述每个子节点对应的子事务执行第一回滚操作;接收所述每个子节点响应所述第一回滚请求返回的第二响应消息,其中,所述第二响应消息用于指示对与所述每个子节点对应的子事务的第一回滚结果。
8.可选地,确定所述第一数据节点对所述第一事务的所述第一提交结果和所述第二数据节点对所述第二事务的所述第二提交结果包括:确定所述第一数据节点对所述第一事务的所述第一提交结果;在所述第一提交结果为提交成功的情况下,确定所述第二数据节点对所述第二事务的所述第二提交结果。
9.可选地,在确定所述第一数据节点对所述第一事务的所述第一提交结果之后,所述方法还包括:在所述第一提交结果为提交失败的情况下,向所述第二数据节点发送第二回滚请求,其中,所述第二回滚请求用于请求对所述第二事务执行第二回滚操作;接收所述第二数据节点响应所述第二回滚请求返回的第三响应消息,其中,所述第三响应消息用于指示所述第二事务的第二回滚结果。
10.可选地,在确定多个所述目标数据节点中除了所述第一数据节点以外的所述第二数据节点的所述目标预提交结果之前,所述方法还包括:向所述第一数据节点发送第一开启请求,向所述第二数据节点发送第二开启请求,其中,所述第一开启请求用于请求所述第一数据节点开启所述第一事务,所述第二开启请求用于请求所述第二数据节点开启所述第二事务;接收所述第一数据节点响应所述第一开启请求返回的第四响应消息,接收所述第二数据节点响应所述第二开启请求返回的第五响应消息,其中,所述第四响应消息用于指示所述第一事务的第一开启结果,所述第五响应消息用于指示所述第二事务的第二开启结果。
11.可选地,在从所述多个数据节点中确定与待执行的所述目标事务对应的所述目标数据节点之前,所述方法还包括:接收目标客户端发送的业务处理请求,其中,所述业务处理请求用于请求处理目标业务,所述目标事务为处理所述目标业务所执行的事务;在接收所述目标数据节点响应所述目标提交请求返回的所述第一响应消息之后,所述方法还包括:向所述目标客户端发送业务处理结果,其中,所述业务处理结果为根据所述目标提交结果确定的所述目标业务的处理结果。
12.根据本技术实施例的另一个方面,还提供了一种分布式系统的事务处理装置,包括:第一确定单元,用于从多个数据节点中确定与待执行的目标事务对应的目标数据节点,其中,所述多个数据节点的每个数据节点均为所述分布式系统中用于事务处理的数据节点;第一发送单元,用于在所述目标数据节点的数量为一个的情况下,向所述目标数据节点发送目标提交请求,其中,所述目标提交请求用于请求所述目标数据节点提交所述目标事务;第一接收单元,用于接收所述目标数据节点响应所述目标提交请求返回的第一响应消息,其中,所述第一响应消息用于指示所述目标事务的目标提交结果。
13.可选地,所述装置还包括:第二确定单元,用于在从所述多个数据节点中确定与待执行的所述目标事务对应的所述目标数据节点之后,在所述目标数据节点的数量为多个的情况下,确定多个所述目标数据节点中除了第一数据节点以外的第二数据节点的目标预提交结果,其中,所述第一数据节点用于执行所述目标事务中的第一事务,所述第二数据节点用于执行所述目标事务中的第二事务,所述目标预提交结果为所述第二数据节点对所述第二事务的预提交结果;第三确定单元,用于在所述目标预提交结果为预提交成功的情况下,
确定所述第一数据节点对所述第一事务的第一提交结果和所述第二数据节点对所述第二事务的第二提交结果。
14.可选地,所述装置还包括:第四确定单元,用于在确定多个所述目标数据节点中除了所述第一数据节点以外的所述第二数据节点的所述目标预提交结果之后,在所述第二数据节点包含多个子节点的情况下,分别确定所述多个子节点中的每个子节点的预提交子结果,其中,所述每个子节点的预提交子结果为所述每个子节点对所述第二事务中与所述每个子节点对应的子事务的预提交结果;第二发送单元,用于在所述多个子节点中的目标子节点的预提交子结果为预提交失败的情况下,向所述每个子节点发送第一回滚请求,其中,所述第一回滚请求用于请求所述每个子节点对与所述每个子节点对应的子事务执行第一回滚操作;第二接收单元,用于接收所述每个子节点响应所述第一回滚请求返回的第二响应消息,其中,所述第二响应消息用于指示对与所述每个子节点对应的子事务的第一回滚结果。
15.可选地,所述第三确定单元包括:第一确定模块,用于确定所述第一数据节点对所述第一事务的所述第一提交结果;第二确定模块,用于在所述第一提交结果为提交成功的情况下,确定所述第二数据节点对所述第二事务的所述第二提交结果。
16.可选地,所述装置还包括:第三发送单元,用于在确定所述第一数据节点对所述第一事务的所述第一提交结果之后,在所述第一提交结果为提交失败的情况下,向所述第二数据节点发送第二回滚请求,其中,所述第二回滚请求用于请求对所述第二事务执行第二回滚操作;第三接收单元,用于接收所述第二数据节点响应所述第二回滚请求返回的第三响应消息,其中,所述第三响应消息用于指示所述第二事务的第二回滚结果。
17.可选地,所述装置还包括:第四发送单元,用于在确定多个所述目标数据节点中除了所述第一数据节点以外的所述第二数据节点的所述目标预提交结果之前,向所述第一数据节点发送第一开启请求,向所述第二数据节点发送第二开启请求,其中,所述第一开启请求用于请求所述第一数据节点开启所述第一事务,所述第二开启请求用于请求所述第二数据节点开启所述第二事务;第四接收单元,用于接收所述第一数据节点响应所述第一开启请求返回的第四响应消息,接收所述第二数据节点响应所述第二开启请求返回的第五响应消息,其中,所述第四响应消息用于指示所述第一事务的第一开启结果,所述第五响应消息用于指示所述第二事务的第二开启结果。
18.可选地,所述装置还包括:第五接收单元,用于在从所述多个数据节点中确定与待执行的所述目标事务对应的所述目标数据节点之前,接收目标客户端发送的业务处理请求,其中,所述业务处理请求用于请求处理目标业务,所述目标事务为处理所述目标业务所执行的事务;第五发送单元,用于在接收所述目标数据节点响应所述目标提交请求返回的所述第一响应消息之后,向所述目标客户端发送业务处理结果,其中,所述业务处理结果为根据所述目标提交结果确定的所述目标业务的处理结果。
19.根据本技术实施例的又一个方面,还提供了一种计算机可读的存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
20.根据本技术实施例的又一个方面,还提供了一种电子装置,包括存储器和处理器,存储器中存储有计算机程序,处理器被设置为运行计算机程序以执行上述任一项方法实施
例中的步骤。
21.在本技术实施例中,采用对分布式系统中仅涉及单个数据节点的事务按照普通事务处理的方式,通过从多个数据节点中确定与待执行的目标事务对应的目标数据节点,其中,多个数据节点的每个数据节点均为分布式系统中用于事务处理的数据节点;在目标数据节点的数量为一个的情况下,向目标数据节点发送目标提交请求,其中,目标提交请求用于请求目标数据节点提交目标事务;接收目标数据节点响应目标提交请求返回的第一响应消息,其中,第一响应消息用于指示目标事务的目标提交结果,由于将分布式系统中仅涉及单个数据节点(存储节点)的事务优化成一阶段提交,可以实现只要一次交互即可完成事务处理的目的,达到了提高缩短事务处理时延、提高事务吞吐量的技术效果,进而解决了相关技术中的分布式系统的事务处理方法存在由于事务处理时延较长导致的分布式系统事务吞吐量较低的问题。
附图说明
22.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
23.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
24.图1是根据本技术实施例的分布式系统的事务处理方法的硬件环境的示意图;
25.图2是根据本技术实施例的一种可选的分布式系统的事务处理方法的流程示意图;
26.图3是根据本技术实施例的一种可选的事务处理方法的示意图;
27.图4是根据本技术实施例的一种可选的分布式系统的事务处理装置的结构框图;
28.图5是根据本技术实施例的一种电子装置的结构框图。
具体实施方式
29.为了使本技术领域的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分的实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本技术保护的范围。
30.需要说明的是,本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
31.首先,在对本技术实施例进行描述的过程中出现的部分名词或者术语适用于如下
解释:
32.分布式事务:是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。一个分布式事务会涉及多个数据元或者业务系统的操作。
33.例如,用户对商品进行下单,需要在订单表中创建一条订单数据,同时需要在库存表中修改当前商品的剩余库存数量,两步操作一个添加,一个修改,可以通过分布式事务保证这两步操作一定同时操作成功或失败,避免业务出现问题。
34.ds:data server,数据服务器,对应于分布式系统中的事务管理者的角色(协调者),通过它来协调各个数据源;
35.db:data base,数据库,对应于分布式系统中的参与者。
36.根据本技术实施例的一个方面,提供了一种分布式系统的事务处理方法。可选地,在本实施例中,上述分布式系统的事务处理方法可以应用于如图1所示的由终端101和服务器103所构成的硬件环境中。如图1所示,服务器103(例如,ds)通过网络与终端101进行连接,可用于为终端或终端上安装的客户端提供服务(如游戏服务、应用服务等),可在服务器上或独立于服务器设置数据库,用于为服务器103提供数据存储服务,还可以用于处理分布式事务,上述网络包括但不限于:广域网、城域网或局域网,终端101并不限定于pc、手机、平板电脑等。本技术实施例的分布式系统的事务处理方法可以由服务器103来执行,也可以由终端101来执行,还可以是由服务器103和终端101共同执行。其中,终端101执行本技术实施例的分布式系统的事务处理方法也可以是由安装在其上的客户端来执行。
37.以由分布式系统中的协调者(对应于服务器)执行为例,图2是根据本技术实施例的一种可选的分布式系统的事务处理方法的流程示意图,如图2所示,该方法的流程可以包括以下步骤:
38.步骤s202,从多个数据节点中确定与待执行的目标事务对应的目标数据节点,其中,多个数据节点的每个数据节点均为分布式系统中用于事务处理的数据节点;
39.步骤s204,在目标数据节点的数量为一个的情况下,向目标数据节点发送目标提交请求,其中,目标提交请求用于请求目标数据节点提交目标事务;
40.步骤s206,接收目标数据节点响应目标提交请求返回的第一响应消息,其中,第一响应消息用于指示目标事务的目标提交结果。
41.通过上述步骤s202至步骤s206,从多个数据节点中确定与待执行的目标事务对应的目标数据节点,其中,多个数据节点的每个数据节点均为分布式系统中用于事务处理的数据节点;在目标数据节点的数量为一个的情况下,向目标数据节点发送目标提交请求,其中,目标提交请求用于请求目标数据节点提交目标事务;接收目标数据节点响应目标提交请求返回的第一响应消息,其中,第一响应消息用于指示目标事务的目标提交结果,由于将分布式系统中仅涉及单个数据节点(存储节点)的事务优化成一阶段提交,可以实现只要一次交互即可完成事务处理的目的,缩短了事务处理时延,提高了事务吞吐量。
42.在步骤s202提供的技术方案中,从多个数据节点中确定与待执行的目标事务对应的目标数据节点,其中,多个数据节点的每个数据节点均为分布式系统中用于事务处理的数据节点。
43.本实施例中的分布式系统的事务处理方法可以应用于具有分布式事务处理需求
的场景。
44.分布式系统中可以包含协调者(coordinator)和多个参与者(cohort),协调者用于协调参与者的行为,参与者用于执行各个事务。协调者可以是事务管理器(例如,ds),参与者可以是数据节点(本地资源管理器,例如,dd),数据节点为分布式系统中用于事务处理的节点。
45.以参与者为多个数据节点为例,协调者可以与多个数据节点分别建立通信连接,并通过建立的通信连接与各个数据节点进行通信。此外,协调者还可以与用户的终端设备上运行的客户端(app)建立通信连接,并通过建立的通信连接与客户端进行通信。
46.分布式系统中当前待执行的事务为目标事务,执行目标事务的数据节点为多个数据节点中的目标数据节点。目标事务可以是与资源转移关联的事务,例如,银行转账,产品购买等。
47.在步骤s204提供的技术方案中,在目标数据节点的数量为一个的情况下,向目标数据节点发送目标提交请求,其中,目标提交请求用于请求目标数据节点提交目标事务。
48.目标数据节点的数量可以有一个或多个。如果目标数据节点的数量为一个,目标事务为只涉及到单个数据节点(存储节点)的事务。由于不会出现多个节点不一致的情况,所以可以不使用分布式事务,而将该目标事务作为普通事务进行处理。例如,可以将只涉及到单个数据节点的事务优化成一阶段提交,这样只需要一次交互即可完成事务提交,可以大幅度提高事务吞吐量。
49.分布式事务的提交可以分为两个阶段:预提交阶段(precommit阶段)和事务提交阶段(docommit阶段)。在预提交阶段,数据节点可以只执行事务操作,如锁定事务相关的资源,但不执行提交。在事务提交阶段,数据节点可以执行事务提交。此外,还可以释放所有该事务相关的锁和资源。
50.对于目标事务,由于目标事务只涉及到单个数据节点,可以不执行预提交阶段,而直接执行事务提交阶段。协调者可以直接向目标数据节点发送目标提交请求,以请求目标数据节点提交目标事务,而略过预提交阶段。
51.在步骤s206提供的技术方案中,接收目标数据节点响应目标提交请求返回的第一响应消息,其中,第一响应消息用于指示目标事务的目标提交结果。
52.目标数据节点在将接收到目标提交请求之后,可以执行与目标事务相关的事务操作并提交,从而得到目标事务的提交结果,即,目标提交结果。在得到目标提交结果之后,目标数据节点可以生成第一响应消息,并向协调者发送生成的第一响应消息,该第一响应消息可以用于指示目标事务的目标提交结果。
53.协调者可以接收第一响应消息,并根据第一响应消息确定目标事务的提交结果,提交结果可以包括但不限于以下之一:提交成功,提交失败。
54.作为一种可选的实施例,在从多个数据节点中确定与待执行的目标事务对应的目标数据节点之后,上述方法还包括:
55.s11,在目标数据节点的数量为多个的情况下,确定多个目标数据节点中除了第一数据节点以外的第二数据节点的目标预提交结果,其中,第一数据节点用于执行目标事务中的第一事务,第二数据节点用于执行目标事务中的第二事务,目标预提交结果为第二数据节点对第二事务的预提交结果;
56.s12,在目标预提交结果为预提交成功的情况下,确定第一数据节点对第一事务的第一提交结果和第二数据节点对第二事务的第二提交结果。
57.目标数据节点(参与者)的数量为多个,可以将多个目标数据节点分成:第一数据节点,除了第一数据节点以外的第二数据节点。第一数据节点为多个目标数据节点中的一个,在第一数据节点上可以开启普通事务,在第二数据节点上可以开启分布式事务。第一数据节点执行的是目标事务中的第一事务(或者说,与目标事务关联的第一事务),第二数据节点执行的是目标事务中的第二事务(或者说,与目标事务关联的第二事务)。
58.例如,对于多个存储节点,可以将第一个节点默认开启一阶段提交的普通事务,之后的节点才会开启分布式事务。
59.在最终事务提交时,协调者可以首先预提交第二数据节点的分布式事务。例如,可以向第二数据节点发送预提交请求,预提交请求用于请求第二数据节点对第二事务执行预提交。
60.第二数据节点可以接收预提交请求,对第二事务执行预提交,得到对第二事务的预提交结果,即,目标预提交结果,并通过响应消息的方式向协调者发送目标预提交结果。
61.协调者可以确定第二数据节点的目标预提交结果,目标预提交结果可以为以下之一:预提交成功,预提交失败。
62.如果目标预提交结果为预提交成功,协调者可以分别确定第一数据节点对第一事务的第一提交结果和第二数据节点对第二事务的第二提交结果,并根据第一提交结果和第二提交结果确定目标事务的提交结果。如果目标预提交结果为预提交失败,协调者可以执行预提交失败后的处理流程,例如,回滚,通知终端设备事务处理失败。
63.通过本实施例,通过将多个数据节点分成处理普通事务的数据节点和处理分布式事务的数据节点,可以将事务一阶段提交优化平滑扩展到两阶段提交,可以降低事务延时,提高系统吞吐量。
64.作为一种可选的实施例,在确定多个目标数据节点中除了第一数据节点以外的第二数据节点的目标预提交结果之后,上述方法还包括:
65.s21,在第二数据节点包含多个子节点的情况下,分别确定多个子节点中的每个子节点的预提交子结果,其中,每个子节点的预提交子结果为每个子节点对第二事务中与每个子节点对应的子事务的预提交结果;
66.s22,在多个子节点中的目标子节点的预提交子结果为预提交失败的情况下,向每个子节点发送第一回滚请求,其中,第一回滚请求用于请求每个子节点对与每个子节点对应的子事务执行第一回滚操作;
67.s23,接收每个子节点响应第一回滚请求返回的第二响应消息,其中,第二响应消息用于指示对与每个子节点对应的子事务的第一回滚结果。
68.如果第二数据节点包含多个子节点,也就是说,第二数据节点的数量为多个。第二事务可以包括多个子事务,每个子事务对应于多个子节点中的一个子节点,每个子节点可以用于处理至少一个子事务。
69.协调者可以首先向多个子节点中的各个子节点下发预提交命令,以指示各个子节点对所处理子事务进行预提交。各个子节点根据下发预提交命令,可以对所处理的子事务进行预提交,得到该子事务的预提交子结果,并向协调者发送预提交子结果。协调者可以接
收各个子节点返回的预提交子结果。预提交子结果可以为以下之一:预提交成功,预提交失败。
70.需要说明的是,如果超过预设时间阈值仍未接收到部分子节点返回的预提交子结果,协调者可以将这部分子节点的预提交子结果确定为预提交失败。
71.如果多个子节点中的目标子节点的预提交子结果为预提交失败,协调者可以控制第二事务在多个子节点上全部回滚。例如,协调者可以向每个子节点发送第一回滚请求,以请求每个子节点对与其对应的子事务执行第一回滚操作。每个子节点可以接收协调者发送的该第一回滚请求,对与其对应的子事务执行回滚操作,得到与其对应的子事务的第一回滚结果,并将第一回滚结果通过第二响应消息发送给该协调者。
72.协调者接收每个子节点响应第一回滚请求返回的第二响应消息,从而确定每个子节点对与其对应的子事务的第一回滚结果。此外,如果还有其他数据节点(比如,第一数据节点)也执行了目标事务相关的操作,协调者也可以同时向其发送回滚请求,以保证目标事务在所有节点上全部回滚。
73.通过本实施例,在有数据节点预提交失败时控制目标事务在不同数据节点上全部回滚,可以提高数据节点之间数据的一致性,提高分布式系统的可靠性。
74.作为一种可选的实施例,确定第一数据节点对第一事务的第一提交结果和第二数据节点对第二事务的第二提交结果包括:
75.s31,确定第一数据节点对第一事务的第一提交结果;
76.s32,在第一提交结果为提交成功的情况下,确定第二数据节点对第二事务的第二提交结果。
77.确定第一数据节点对第一事务的第一提交结果和确定第二数据节点对第二事务的第二提交结果可以是同时执行的,例如,分别确定第一提交结果和第二提交结果。也可以是先后执行的,例如,首先确定第一提交结果,在第一提交结果为提交成功时才确定第二数据节点对第二事务的第二提交结果。
78.可选地,协调者可以向第一数据节点发送第一事务的第一提交请求,该第一提交请求用于请求第一数据节点对第一事务执行事务提交操作。第一数据节点可以接收第一提交请求;响应该第一提交请求,对第一事务执行事务提交操作,得到第一事务的第一提交结果,并将得到的第一提交结果发送给该协调者。第一提交结果可以为以下之一:提交成功,提交失败。
79.如果第一提交结果为提交成功,协调者可以向第二数据节点发送第二事务的第二提交请求,该第二提交请求用于请求第二数据节点对第二事务执行事务提交操作。第二数据节点可以接收第二提交请求;响应该第二提交请求,对第二事务执行事务提交操作,得到第二事务的第二提交结果,并将得到的第二提交结果发送给该协调者。第二提交结果可以为以下之一:提交成功,提交失败。
80.可选地,如果第二数据节点包括多个子节点,则可以向多个子节点分别下发第二提交请求,得到各个子节点返回的对与其对应的子事务的提交子结果。每个子节点执行的操作与前述类似,本实施例中对此不作赘述。
81.通过本实施例,通过在确定第一事务提交成功之后再控制第二事务进行提交,可以将事务一阶段提交优化平滑扩展到两阶段提交,可以降低事务延时,提高系统吞吐量。
82.作为一种可选的实施例,在确定第一数据节点对第一事务的第一提交结果之后,上述方法还包括:
83.s41,在第一提交结果为提交失败的情况下,向第二数据节点发送第二回滚请求,其中,第二回滚请求用于请求对第二事务执行第二回滚操作;
84.s42,接收第二数据节点响应第二回滚请求返回的第三响应消息,其中,第三响应消息用于指示第二事务的第二回滚结果。
85.如果第一提交结果为提交失败,协调者可以向第二数据节点发送第二回滚请求,以请求对第二事务执行第二回滚操作。第二数据节点可以接收协调者发送的该第二回滚请求,对第二事务执行回滚操作,得到第二事务的第二回滚结果,并将第二回滚结果通过第三响应消息发送给该协调者。
86.协调者接收第二数据节点响应第二回滚请求返回的第三响应消息,从而确定第二数据节点对第二事务的第二回滚结果。此外,如果还有其他数据节点(比如,第一数据节点)也执行了目标事务相关的操作,协调者也可以同时向其发送回滚请求,以保证目标事务在所有节点上全部回滚。
87.可选地,如果第二数据节点包括多个子节点,则可以向多个子节点分别下发第二回滚请求,得到各个子节点返回的对与其对应的子事务的回滚子结果。每个子节点执行的操作与前述类似,本实施例中对此不作赘述。
88.通过本实施例,在有数据节点提交失败时控制目标事务在不同数据节点上全部回滚,可以提高数据节点之间数据的一致性,提高分布式系统的可靠性。
89.可选地,在本实施例中,由于已经进行了预提交,第二提交结果一般为提交成功。因此,在崩溃恢复时可以以第一数据节点的事务是否提交来决定整个分布式事务的提交和回滚。如果由于一些特殊原因导致第二事务或者第二事务的某一子事务提交失败,则可以采用与前述类似的方式控制目标事务在不同数据节点上全部回滚,来保证数据节点之间数据的一致性。
90.作为一种可选的实施例,在确定多个目标数据节点中除了第一数据节点以外的第二数据节点的目标预提交结果之前,上述方法还包括:
91.s51,向第一数据节点发送第一开启请求,向第二数据节点发送第二开启请求,其中,第一开启请求用于请求第一数据节点开启第一事务,第二开启请求用于请求第二数据节点开启第二事务;
92.s52,接收第一数据节点响应第一开启请求返回的第四响应消息,接收第二数据节点响应第二开启请求返回的第五响应消息,其中,第四响应消息用于指示第一事务的第一开启结果,第五响应消息用于指示第二事务的第二开启结果。
93.在执行各个事务之前,协调者可以与各个数据节点之间进行交互,以开启事务。
94.可选地,在本实施例中,协调者可以向第一数据节点发送第一开启请求(begin transaction,普通事务的开启请求),以请求第一数据节点开启第一事务。第一数据节点可以接收第一开启请求,确定是否开启事务,并向协调者发送第四响应消息,以指示第一事务的第一开启结果。
95.协调者可以同时、或者在第一开启结果为开启成功的情况下向第二数据节点发送第二开启请求(start transaction,分布式事务的开启请求),以请求第二数据节点开启第
二事务。第二数据节点可以接收第二开启请求,确定是否开启事务,并向协调者发送第五响应消息,以指示第二事务的第二开启结果。
96.可选地,如果第二数据节点包括多个子节点,则可以向多个子节点分别发送第二开启请求,得到各个子节点返回的对与其对应的子事务的开启子结果。每个子节点执行的操作与前述类似,本实施例中对此不作赘述。
97.通过本实施例,通过与事务关联的各个数据节点进行交互,以确定各个数据节点是否确定开启事务,可以保证事务开启的有效性,同时可以提高事务提交的成功率,避免事务提交失败导致的资源浪费。
98.作为一种可选的实施例,在从多个数据节点中确定与待执行的目标事务对应的目标数据节点之前,上述方法还包括:
99.s61,接收目标客户端发送的业务处理请求,其中,业务处理请求用于请求处理目标业务,目标事务为处理目标业务所执行的事务;
100.在接收目标数据节点响应目标提交请求返回的第一响应消息之后,上述方法还包括:
101.s62,向目标客户端发送业务处理结果,其中,业务处理结果为根据目标提交结果确定的目标业务的处理结果。
102.协调者可以与用户的客户端建立通信连接,以根据客户端的请求触发启动各个事务。用户可以操作其客户端触发向协调者发送业务处理请求,该业务处理请求用于请求处理目标业务,而目标事务为处理目标业务所执行的事务。客户端检测到对其执行的触发操作,响应该触发操作,生成业务处理请求并发送给协调者。
103.协调者可以接收客户端的业务触发请求,响应该业务触发请求,确定处理目标业务所执行的目标事务,并按照前述方式获取目标事务的提交结果,例如,目标提交结果,协调者可以根据目标事务的提交结果确定目标业务的处理结果,即,业务处理结果,并将业务处理结果发送给客户端。
104.客户端接收到业务处理结果之后,可以通过其显示界面显示业务处理结果,以方便用户获知目标业务的处理结果,例如,处理成功,处理失败,处理失败后等待再次尝试等。本实施例中对此不作限定。
105.通过本实施例,通过业务处理请求触发进行事务处理,并在处理完成之后向客户端返回业务的处理结果,可以减少客户端与协调者之间的交互,提高资源利用效率。
106.下面结合可选示例对本技术实施例中的分布式系统的事务处理方法进行解释说明。
107.在本示例中,在事务只涉及到一个节点(存储节点,数据节点)时使用普通事务,之后如果涉及到多个节点时平滑的升级到使用分布式事务来提高性能。这样,只有事务涉及到多个节点时才会使用两阶段提交。
108.分布式事务需要用两阶段提交,普通事务可以直接提交。如图3所示,图3为用户事务涉及的数据节点由一个变成两个之后的处理流程,当用户事务只涉及单个节点(第一数据节点,sql1,即,db0)时,只会使用普通事务,或者说,如果事务到提交时不涉及第二个节点,则可以按照普通事务处理,计算节点(ds)相当于只做sql转发工作。
109.当用户事务涉及到第二个节点(第二数据节点,sql2,即,db1)时,可以对第二个节
点开启分布式事务(xa start'xid')。最终提交时,首先预提交第二个节点的分布式事务(xa prepare'xid'),接着提交第一个节点的普通事务(update meta;commit),最后提交第二个节点的分布式事务(xa commit'xid'),以此来实现以第一个节点的事务来协调做两阶段事务提交。
110.通过上述方式,在崩溃恢复时可以以第一个节点的事务是否提交来决定整个分布式事务的提交和回滚。
111.下面分别对事务提交和事务回滚进行说明。
112.对于事务提交,客户端(app)向ds(协调者)发送开启请求(begin),以开启事务(全局事务,作用同前述目标事务),ds向客户端返回一个ok响应,指示确定开启事务。
113.客户端可以向ds发送请求,以请求dbo开启事务(dbo上的局部事务,作用同第一事务,普通事务);ds向dbo发送开启请求(begin),以开启事务,dbo向ds返回一个ok响应,指示确定开启事务;ds向客户端返回一个ok响应,指示dbo确定开启事务。
114.客户端可以向ds发送请求,以请求db1开启事务(db1上的局部事务,作用同第二事务,分布式事务);ds向db1发送开启请求(xa start'xid'),以开启事务,db1向ds返回一个ok响应,指示确定开启事务;ds向客户端返回一个ok响应,指示db1确定开启事务。
115.客户端可以向ds发送提交请求,以请求ds提交事务(全局事务);ds可以首先向db1发送prepare请求(xaend'xid';xa prepare'xid'),以请求执行事务相关操作(db1上的局部事务),db1向ds返回一个ok响应,指示事务相关操作执行成功;然后,ds向db0发送提交请求(update meta;commit),以请求提交事务(db0上的局部事务),db0向ds返回一个ok响应,指示事务提交成功;接着,ds可以向db1发送提交请求(xa commit'xid'),以请求提交事务(db1上的局部事务),db1向ds返回一个ok响应,指示事务提交成功;ds向客户端返回一个ok响应,指示事务提交成功。
116.对于事务回滚,客户端(app)向ds(协调者)发送开启请求(begin),以开启事务(全局事务,作用同前述目标事务),ds向客户端返回一个ok响应,指示确定开启事务。
117.客户端可以向ds发送请求,以请求dbo开启事务(dbo上的局部事务,作用同第一事务,普通事务);ds向dbo发送开启请求(begin),以开启事务,dbo向ds返回一个ok响应,指示确定开启事务;ds向客户端返回一个ok响应,指示dbo确定开启事务。
118.客户端可以向ds发送请求,以请求db1开启事务(db1上的局部事务,作用同第二事务,分布式事务);ds向db1发送开启请求(xa start'xid'),以开启事务,db1向ds返回一个ok响应,指示确定开启事务;ds向客户端返回一个ok响应,指示db1确定开启事务。
119.由于某些原因,需要对事务进行回滚,则客户端可以向ds发送回滚请求,以请求进行事务(全局事务)回滚(rollback);ds可以首先向db1发送prepare请求(xaend'xid';xa prepare'xid'),以请求执行事务相关操作(db1上的局部事务),db1向ds返回一个ok响应,指示事务相关操作执行成功;然后,ds向db0发送回滚请求(update meta;rollback),以请求进行事务(db0上的局部事务)回滚,db0向ds返回一个ok响应,指示事务回滚成功;接着,ds可以向db1发送回滚请求(xa rollback'xid'),以请求进行事务(db1上的局部事务)回滚,db1向ds返回一个ok响应,指示事务回滚成功;ds向客户端返回一个ok响应,指示事务回滚成功。
120.通过本示例,当用户事务只涉及单个节点时使用普通事务,当用户事务涉及到第
二个节点时,对第二个节点开启分布式事务,可以适用于具有分布式事务需求的应用场景,如果事务大多数不涉及到分布式事务,可以极大提高系统吞吐量以及降低事务延时。
121.需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本技术并不受所描述的动作顺序的限制,因为依据本技术,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本技术所必须的。
122.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本技术各个实施例所述的方法。
123.根据本技术实施例的另一个方面,还提供了一种用于实施上述方法的分布式系统的事务处理装置。图4是根据本技术实施例的一种可选的分布式系统的事务处理装置的结构框图,如图4所示,该装置可以包括:
124.(1)第一确定单元402,用于从多个数据节点中确定与待执行的目标事务对应的目标数据节点,其中,多个数据节点的每个数据节点均为分布式系统中用于事务处理的数据节点;
125.(2)第一发送单元404,与第一确定单元402相连,用于在目标数据节点的数量为一个的情况下,向目标数据节点发送目标提交请求,其中,目标提交请求用于请求目标数据节点提交目标事务;
126.(3)第一接收单元406,与第一发送单元404相连,用于接收目标数据节点响应目标提交请求返回的第一响应消息,其中,第一响应消息用于指示目标事务的目标提交结果。
127.需要说明的是,该实施例中的第一确定单元402可以用于执行上述步骤s202,该实施例中的第一发送单元404可以用于执行上述步骤s204,该实施例中的第一接收单元406可以用于执行上述步骤s206。
128.通过上述模块,从多个数据节点中确定与待执行的目标事务对应的目标数据节点,其中,多个数据节点的每个数据节点均为分布式系统中用于事务处理的数据节点;在目标数据节点的数量为一个的情况下,向目标数据节点发送目标提交请求,其中,目标提交请求用于请求目标数据节点提交目标事务;接收目标数据节点响应目标提交请求返回的第一响应消息,其中,第一响应消息用于指示目标事务的目标提交结果,由于将分布式系统中仅涉及单个数据节点(存储节点)的事务优化成一阶段提交,可以实现只要一次交互即可完成事务处理的目的,缩短了事务处理时延,提高了事务吞吐量。
129.作为一种可选的实施例,上述装置还包括:
130.第二确定单元,用于在从多个数据节点中确定与待执行的目标事务对应的目标数据节点之后,在目标数据节点的数量为多个的情况下,确定多个目标数据节点中除了第一数据节点以外的第二数据节点的目标预提交结果,其中,第一数据节点用于执行目标事务中的第一事务,第二数据节点用于执行目标事务中的第二事务,目标预提交结果为第二数
据节点对第二事务的预提交结果;
131.第三确定单元,用于在目标预提交结果为预提交成功的情况下,确定第一数据节点对第一事务的第一提交结果和第二数据节点对第二事务的第二提交结果。
132.作为一种可选的实施例,上述装置还包括:
133.第四确定单元,用于在确定多个目标数据节点中除了第一数据节点以外的第二数据节点的目标预提交结果之后,在第二数据节点包含多个子节点的情况下,分别确定多个子节点中的每个子节点的预提交子结果,其中,每个子节点的预提交子结果为每个子节点对第二事务中与每个子节点对应的子事务的预提交结果;
134.第二发送单元,用于在多个子节点中的目标子节点的预提交子结果为预提交失败的情况下,向每个子节点发送第一回滚请求,其中,第一回滚请求用于请求每个子节点对与每个子节点对应的子事务执行第一回滚操作;
135.第二接收单元,用于接收每个子节点响应第一回滚请求返回的第二响应消息,其中,第二响应消息用于指示对与每个子节点对应的子事务的第一回滚结果。
136.作为一种可选的实施例,第三确定单元包括:
137.第一确定模块,用于确定第一数据节点对第一事务的第一提交结果;
138.第二确定模块,用于在第一提交结果为提交成功的情况下,确定第二数据节点对第二事务的第二提交结果。
139.作为一种可选的实施例,上述装置还包括:
140.第三发送单元,用于在确定第一数据节点对第一事务的第一提交结果之后,在第一提交结果为提交失败的情况下,向第二数据节点发送第二回滚请求,其中,第二回滚请求用于请求对第二事务执行第二回滚操作;
141.第三接收单元,用于接收第二数据节点响应第二回滚请求返回的第三响应消息,其中,第三响应消息用于指示第二事务的第二回滚结果。
142.作为一种可选的实施例,上述装置还包括:
143.第四发送单元,用于在确定多个目标数据节点中除了第一数据节点以外的第二数据节点的目标预提交结果之前,向第一数据节点发送第一开启请求,向第二数据节点发送第二开启请求,其中,第一开启请求用于请求第一数据节点开启第一事务,第二开启请求用于请求第二数据节点开启第二事务;
144.第四接收单元,用于接收第一数据节点响应第一开启请求返回的第四响应消息,接收第二数据节点响应第二开启请求返回的第五响应消息,其中,第四响应消息用于指示第一事务的第一开启结果,第五响应消息用于指示第二事务的第二开启结果。
145.作为一种可选的实施例,上述装置还包括:
146.第五接收单元,用于在从多个数据节点中确定与待执行的目标事务对应的目标数据节点之前,接收目标客户端发送的业务处理请求,其中,业务处理请求用于请求处理目标业务,目标事务为处理目标业务所执行的事务;
147.第五发送单元,用于在接收目标数据节点响应目标提交请求返回的第一响应消息之后,向目标客户端发送业务处理结果,其中,业务处理结果为根据目标提交结果确定的目标业务的处理结果。
148.此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不
限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现,其中,硬件环境包括网络环境。
149.根据本技术实施例的又一个方面,还提供了一种用于实施上述分布式系统的事务处理方法的电子装置,该电子装置可以是终端设备、服务器、或者其组合。
150.图5是根据本技术实施例的一种电子装置的结构框图,如图5所示,该电子装置包括存储器502和处理器504,该存储器502中存储有计算机程序,该处理器504被设置为通过计算机程序执行上述任一项方法实施例中的步骤。
151.可选地,在本实施例中,上述电子装置可以位于计算机网络的多个网络设备中的至少一个网络设备。
152.可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
153.s1,从多个数据节点中确定与待执行的目标事务对应的目标数据节点,其中,多个数据节点的每个数据节点均为分布式系统中用于事务处理的数据节点;
154.s2,在目标数据节点的数量为一个的情况下,向目标数据节点发送目标提交请求,其中,目标提交请求用于请求目标数据节点提交目标事务;
155.s3,接收目标数据节点响应目标提交请求返回的第一响应消息,其中,第一响应消息用于指示目标事务的目标提交结果。
156.其中,存储器502可用于存储软件程序以及模块,如本发明实施例中的分布式系统的事务处理方法和装置对应的程序指令/模块,处理器504通过运行存储在存储器502内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述分布式系统的事务处理方法。存储器502可包括高速随机存储器,还可以包括非易失性存储器,如一个或多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器502可进一步包括相对于处理器504远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
157.作为一种示例,如图5所示,上述存储器502中可以但不限于包括上述分布式系统的事务处理装置中的第一确定单元402、第一发送单元404、以及第一接收单元406。此外,还可以包括但不限于上述分布式系统的事务处理装置中的其他模块单元,本示例中不再赘述。
158.可选地,上述的传输装置506用于经由一个网络接收或者发送数据。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置506包括一个网络适配器(network interface controller,nic),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置506为射频(radio frequency,rf)模块,其用于通过无线方式与互联网进行通讯。
159.此外,上述电子装置还包括:连接总线508,用于连接上述电子装置中的各个模块部件。
160.可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
161.本领域普通技术人员可以理解,图5所示的结构仅为示意,实施上述分布式系统的事务处理方法的设备可以是终端设备,该终端设备可以是智能手机(如android手机、ios手
机等)、平板电脑、掌上电脑以及移动互联网设备(mobile internet devices,mid)、pad等终端设备。图5其并不对上述电子装置的结构造成限定。例如,终端设备还可包括比图5中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图5所示不同的配置。
162.本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(read-only memory,rom)、随机存取器(random access memory,ram)、磁盘或光盘等。
163.根据本技术实施例的又一个方面,还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于执行分布式系统的事务处理方法的程序代码。
164.可选地,在本实施例中,上述存储介质可以位于上述实施例所示的网络中的多个网络设备中的至少一个网络设备上。
165.可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:
166.s1,从多个数据节点中确定与待执行的目标事务对应的目标数据节点,其中,多个数据节点的每个数据节点均为分布式系统中用于事务处理的数据节点;
167.s2,在目标数据节点的数量为一个的情况下,向目标数据节点发送目标提交请求,其中,目标提交请求用于请求目标数据节点提交目标事务;
168.s3,接收目标数据节点响应目标提交请求返回的第一响应消息,其中,第一响应消息用于指示目标事务的目标提交结果。
169.可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例中对此不再赘述。
170.可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、rom、ram、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
171.上述本技术实施例序号仅仅为了描述,不代表实施例的优劣。
172.上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。
173.在本技术的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
174.在本技术所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
175.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个
网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例中所提供的方案的目的。
176.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
177.以上所述仅是本技术的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本技术原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本技术的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

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

相关文献