回滚处理方法及装置
【技术领域】
本申请涉及计算机技术领域,尤其涉及一种回滚处理方法及装置。
【背景技术】
分布式事务涉及的事务参与者、事务发起者以及事务协调者分别位于不同分布式系统的不同节点上。事务发起者负责发起分布式事务;事务协调者负责管理分布式事务的生命周期以及分布式事务中所有分支事务;事务参与者负责执行分布式事务中的分支事务。
现有分布式事务处理流程如下:
事务发起者向事务协调者发送用于指示发起分布式事务的事务请求;事务协调者根据事务请求在本地创建主事务记录,用于存储分布式事务的状态等信息;
事务发起者在调用事务参与者执行分布式事务中的分支事务之前,向事务协调者发送分支事务添加请求;事务协调者在本地创建分支事务记录,用于记录与该分支事务相关的信息,例如执行该分支事务的事务参与者;
事务发起者调用事务参与者以执行分支事务;事务参与者在本地创建预处理记录,用于存储与该分支事务相关的信息,并根据预处理记录执行分支事务,若成功执行分支事务,预处理记录会被标记为已处理,否则会被标记为未处理;
当所有分支事务成功执行后,事务发起者向事务协调者发送事务提交请求;事务协调者更新主事务记录;事务协调者向事务参与者发送事务提交请求;事务参与者更新预处理记录。
在上述过程中,可能会因为网络超时导致事务协调者未能在指定时间内接收到分支事务添加请求或者导致事务参与者未能在指定时间内接收到调用请求,此时会做出超时处理,即向事务发起者发起回滚请求,以请求回滚处理。由于回滚处理可能发生在事务协调者在本地创建分支事务记录之前,或者发生在事务参与者在本地创建预处理记录之前,从而导致事务参与者所执行的分支事务将得不到回滚,产生回滚悬挂。
回滚悬挂很可能导致业务幂等失效,业务重试失败,进而带来资源损失或业务可用性降低等风险。由于事务参与者无法识别且不知道如何处理这些回滚悬挂,现有技术在解决回滚悬挂问题时,一般采用人工介入的方式,由人工去联系事务发起者、事务协调者和事务参与者,从而协商确定出对回滚悬挂的处理方式,例如是回滚还是提交,从而解决回滚悬挂问题,这种处理方式效率较低。
【发明内容】
本申请的多个方面提供一种回滚处理方法及装置,用以提高解决回滚悬挂问题时的处理效率。
本申请的一方面,提供一种回滚处理方法,包括:
分布式事务涉及的事务协调者获取所述分布式事务涉及的事务参与者未处理的预处理记录;
所述事务协调者根据所述分布式事务的处理状态,确定所述未处理的预处理记录是否属于回滚悬挂记录;
若确定结果为是,则所述事务协调者指示所述事务参与者对所述未处理的预处理记录执行回滚处理。
本申请的另一方面,提供一种回滚处理装置,位于分布式事务涉及的事务协调者中实现,所述装置包括:
获取模块,用于获取所述分布式事务涉及的事务参与者未处理的预处理记录;
确定模块,用于根据所述分布式事务的处理状态,确定所述未处理的预处理记录是否属于回滚悬挂记录;
回滚处理模块,用于在所述确定模块的确定结果为是时,指示所述事务参与者对所述未处理的预处理记录执行回滚处理。
在本申请中,分布式事务涉及的事务协调者获取分布式事务涉及的事务参与者未处理的预处理记录,根据分布式事务的处理状态,确定所获取的未处理的预处理记录是否属于回滚悬挂记录,在确定所获取的未处理的预处理记录属于回滚悬挂记录时,执行回滚处理,解决回滚悬挂的问题,由于分布式事务的协调者可以根据分布式事务的处理状态确定事务参与者未处理的预处理记录是否属于回滚悬挂记录,因此不需要人工介入,提高了解决回滚悬挂问题的效率较高。
【附图说明】
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请一实施例提供的回滚处理方法的流程示意图;
图2为本申请一实施例提供的回滚处理装置的结构示意图。
【具体实施方式】
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请一实施例提供的回滚处理方法的流程示意图。该方法适用于分布式事务,分布式事务涉及事务发起者、事务参与者和事务协调者。如图1所示,该方法包括:
101、分布式事务涉及的事务协调者获取分布式事务涉及的事务参与者未处理的预处理记录。
102、事务协调者根据分布式事务的处理状态,确定上述未处理的预处理记录是否属于回滚悬挂记录。
103、若确定结果为是,则事务协调者指示事务参与者对上述未处理的预处理记录执行回滚处理。
在分布式事务处理过程中,可能会因为网络超时导致事务协调者未能在指定时间内接收到分支事务添加请求,此时会做出超时处理,即向事务发起者发起回滚请求,以请求回滚处理。由于事务协调者未接收到分支事务添加请求,因此未在本地创建对应于最后被调用的事务参与者的分支事务记录,所以在事务协调者根据本地已创建的分支事务记录进行回滚的过程中,最后被调用的事务参与者所执行的分支事务将得不到回滚,产生回滚悬挂。
在分布式事务处理过程中,可能会因为网络超时导致事务参与者未能在指定时间内接收到调用请求,此时会做出超时处理,即向事务发起者发起回滚请求,以请求回滚处理。由于事务协调者本地已创建了对应于最后被调用的事务参与者的分支事务记录,而最后被调用的事务参与者尚未在本地创建预处理记录而无法执行分支事务,所以在事务协调者根据本地已创建的分支事务记录进行回滚的过程中,该最后被调用的事务参与者会进行空回滚,而在一定时间之后,该最后被调用的事务参与者会在本地创建预处理记录并执行分支事务,导致该预处理记录对应的操作无法再次被回滚,产生回滚悬挂。
由上述分析可见,现有的分布式事务在出现网络超时的情况下,可能会导致回滚处理在事务参与者的预处理落地之前开始,或者回滚处理在事务协调者的分支事务记录落地之前开始,无法保证事务参与者或事务协调者的处理与回滚处理之间的先后顺序,从而产生回滚悬挂问题,进而引起后续业务请求的重试失败或者资源损失等问题。针对回滚悬挂引起的各种问题,亟需解决回滚悬挂问题。于是,本实施例提供一种方法具体包括:
分布式事务涉及的事务协调者获取分布式事务涉及的事务参与者未处理的预处理记录,根据该分布式事务的处理状态,确定所获取的未处理的预处理记录是否属于回滚悬挂记录;若确定结果为是,则对所获取的未处理的预处理记录执行回滚处理。
可选的,若确定结果为否,则可以丢弃所获取的未处理的预处理记录,以便节约存储资源。
在本实施例中,分布式事务涉及的事务协调者根据分布式事务的处理状态,确定事务参与者未处理的预处理记录是否属于回滚悬挂记录,不需要人工参与,并且当确定事务参与者未处理的预处理记录属于回滚悬挂记录时,指示事务参与者对未处理的预处理记录进行回滚处理,在解决回滚悬挂问题的同时,提高了处理效率。
在一可选实施方式中,事务协调者根据分布式事务的处理状态,确定未处理的预处理记录是否属于回滚悬挂记录,具体为:
事务协调者判断分布式事务的处理状态是否为回滚成功状态,若分布式事务的处理状态为回滚成功状态,意味着该分布式事务是以执行回滚操作结束的,对于处于这种处理状态的分布式事务来说,若该分布式事务涉及的事务参与者还有未处理的预处理记录,则可以确定是回滚悬挂记录;反之,若该分布式事务的处理状态是除回滚成功状态之外的其他状态(简称为非回滚成功状态),则可以确定事务参与者尚未处理的预处理记录不属于回滚悬挂记录。
对事务协调者来说,通过主事务记录记录整个分布式事务的相关信息,因此可以通过主事务记录获取分布式事务的处理状态。
在一可选实施方式中,分布式事务涉及的事务协调者获取分布式事务涉及的事务参与者未处理的预处理记录的实施方式,具体为:
事务协调者周期性的获取分布式事务涉及的事务参与者未处理的预处理记录。这样可以提高发现回滚悬挂记录及时性,进而提高解决回滚悬挂问题的及时性。
进一步,在具体应用场景中,可能有多台设备构成一个分布式事务系统,其中一台设备作为事务协调者,其他设备作为事务参与者或事务发起者,用于实现多个分布式事务。其中,多台设备可能属于多个分布式系统。针对该应用场景,事务协调者需要周期性的对多个分布式事务进行回滚处理。
具体的,事务协调者可以在每个周期到达时,获取在每个周期到达时刻之前指定时间段内发生的分布式事务涉及的事务参与者未处理的预处理记录。指定时间段的长度不做限定,例如可以是3分钟、5分钟等。执行回滚处理的周期长度也不做限定,例如可以是每1分钟执行一次,或者是每3分钟执行一次。值得说明的是,通过设置执行回滚处理的周期长度以及指定时间段的取值,应该能够保证所有分布式事务涉及的事务参与者未处理的预处理记录均能被获取到。
例如,周期长度为3分钟,事务协调者可以在每个周期到达时,获取该周期到达时刻之前3分钟内产生的分布式事务涉及的事务参与者未处理的预处理记录。
由上述可见,事务协调者可以在无人工干预的情况下,自动识别出所有分布式事务涉及的回滚悬挂记录,并且一旦发现回滚悬挂记录可以自动指示所有事务参与者执行回滚处理,不需要人工参与,也不需要单独对每个事务参与者进行处理,可以实现批量处理,提高了处理效率。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
图2为本申请一实施例提供的回滚处理装置的结构示意图。该回滚处理装置可位于分布式事务涉及的事务协调者中实现。如图2所示,该装置包括:获取模块21、确定模块22和回滚处理模块23。
获取模块21,用于获取分布式事务涉及的事务参与者未处理的预处理记录。
确定模块22,用于根据分布式事务的处理状态,确定获取模块21获取的未处理的预处理记录是否属于回滚悬挂记录。
回滚处理模块23,用于在确定模块22的确定结果为是时,指示事务参与者对未处理的预处理记录执行回滚处理。
在一可选实施方式中,确定模块22具体可用于:
若分布式事务的处理状态为回滚成功状态,确定未处理的预处理记录属于回滚悬挂记录;
若分布式事务的处理状态为非回滚成功状态,确定未处理的预处理记录不属于回滚悬挂记录。
在一可选实施方式中,获取模块21具体可用于:周期性的获取分布式事务涉及的事务参与者未处理的预处理记录。
进一步可选的,获取模块21具体可用于:在每个周期到达时,获取在每个周期到达时刻之前指定时间段内发生的分布式事务涉及的事务参与者未处理的预处理记录。
在一可选实施方式中,回滚处理模块23还用于:在确定模块22的确定结果为否时,丢弃未处理的预处理记录。
本实施例提供的回滚处理装置,位于分布式事务涉及的事务协调者中实现,获取分布式事务涉及的事务参与者未处理的预处理记录,根据分布式事务的处理状态,确定所获取的未处理的预处理记录是否属于回滚悬挂记录,在确定所获取的未处理的预处理记录属于回滚悬挂记录时,执行回滚处理,解决回滚悬挂的问题,由于可以根据分布式事务的处理状态确定事务参与者未处理的预处理记录是否属于回滚悬挂记录,因此不需要人工介入,提高了解决回滚悬挂问题的效率较高。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。