回滚处理方法及装置与流程

文档序号:13143947阅读:231来源:国知局
【技术领域】本申请涉及计算机技术领域,尤其涉及一种回滚处理方法及装置。

背景技术:
分布式事务涉及的事务参与者、事务发起者以及事务协调者分别位于不同分布式系统的不同节点上。事务发起者负责发起分布式事务;事务协调者负责管理分布式事务的生命周期以及分布式事务中所有分支事务;事务参与者负责执行分布式事务中的分支事务。现有分布式事务处理流程如下:事务发起者向事务协调者发送用于指示发起分布式事务的事务请求;事务协调者根据事务请求在本地创建主事务记录,用于存储分布式事务的状态等信息;事务发起者在调用事务参与者执行分布式事务中的分支事务之前,向事务协调者发送分支事务添加请求;事务协调者在本地创建分支事务记录,用于记录与该分支事务相关的信息,例如执行该分支事务的事务参与者;事务发起者调用事务参与者以执行分支事务;事务参与者在本地创建预处理记录,用于存储与该分支事务相关的信息,并根据预处理记录执行分支事务;当所有分支事务成功执行后,事务发起者向事务协调者发送事务提交请求;事务协调者更新主事务记录;事务协调者向事务参与者发送事务提交请求;事务参与者更新预处理记录。在上述过程中,可能会因为网络超时导致事务协调者未能在指定时间内接收到分支事务添加请求或者导致事务参与者未能在指定时间内接收到调用请求,此时会做出超时处理,即向事务发起者发起回滚请求,以请求回滚处理。由于回滚处理可能发生在事务协调者在本地创建分支事务记录之前,或者发生在事务参与者在本地创建预处理记录之前,从而导致事务参与者所执行的分支事务将得不到回滚,产生回滚悬挂。

技术实现要素:
本申请的多个方面提供一种回滚处理方法及装置,用以解决分布式事务中的回滚悬挂问题。本申请的一方面,提供一种回滚处理方法,适用于分布式事务,所述分布式事务涉及事务发起者、事务参与者和事务协调者,所述方法包括:回滚请求发起者接收回滚处理请求,所述回滚请求发起者为所述事务参与者或所述事务协调者;所述回滚请求发起者根据分布式事务的开始时间和指定的时间间隔,获得第一时间;所述回滚请求发起者在所述第一时间早于当前时间时执行回滚处理。本申请的另一方面,提供一种回滚处理装置,适用于分布式事务,所述分布式事务涉及事务发起者、事务参与者和事务协调者,所述回滚处理装置可位于所述事务参与者或所述事务协调者中实现,所述装置包括:接收模块,用于接收回滚处理请求;获得模块,用于根据分布式事务的开始时间和指定的时间间隔,获得第一时间;回滚执行模块,用于在所述第一时间早于当前时间时执行回滚处理。在本申请中,在分布式事务处理过程中,作为回滚请求发起者的事务参与者或事务协调者接收回滚处理请求,根据分布式事务的开始时间和指定的时间间隔,获得第一时间,在第一时间早于当前时间时,执行回滚处理,这意味着回滚处理要在与分布式事务的开始时间相距指定的时间间隔之后才被执行。其中,指定的时间间隔可以考虑网络超时这一因素,给事务参与者或事务协调者预留充足的处理时间,这样可以保证事务参与者或事务协调者的处理与回滚处理之间的先后顺序,使得回滚处理在事务参与者或事务协调者的处理完成之后再行开始,解决回滚悬挂的问题。【附图说明】为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本申请一实施例提供的回滚处理方法的流程示意图;图2为本申请另一实施例提供的回滚处理方法的流程示意图;图3为本申请又一实施例提供的回滚处理方法的流程示意图;图4为本申请一实施例提供的回滚处理装置的结构示意图;图5为本申请另一实施例提供的回滚处理装置的结构示意图;图6为本申请又一实施例提供的回滚处理装置的结构示意图。【具体实施方式】为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。图1为本申请一实施例提供的回滚处理方法的流程示意图。该方法适用于分布式事务,分布式事务涉及事务发起者、事务参与者和事务协调者;对一个分布式事务来说,事务发起者和事务协调者通常只有一个,而由于一个分布式事务一般会有多个分支事务,所以负责执行分支事务的事务参与者可以有多个。如图1所示,该回滚处理方法包括:101、回滚请求发起者接收回滚处理请求,该回滚请求发起者或者为事务参与者或者为事务协调者。102、回滚请求发起者根据分布式事务的开始时间和指定的时间间隔,获得第一时间。103、回滚请求发起者在第一时间早于当前时间时执行回滚处理。在分布式事务处理过程中,可能会因为网络超时导致事务参协调者未能在指定时间内接收到分支事务添加请求,此时会做出超时处理,即向事务发起者发起回滚请求,以请求回滚处理。由于事务协调者未接收到分支事务添加请求,因此未在本地创建对应于最后被调用的事务参与者的分支事务记录,所以在事务协调者根据本地已创建的分支事务记录进行回滚的过程中,最后被调用的事务参与者所执行的分支事务将得不到回滚,产生回滚悬挂。在分布式事务处理过程中,可能会因为网络超时导致事务参与者未能在指定时间内接收到调用请求,此时会做出超时处理,即向事务发起者发起回滚请求,以请求回滚处理。由于事务协调者本地已创建了对应于最后被调用的事务参与者的分支事务记录,而最后被调用的事务参与者尚未在本地创建预处理记录而无法执行分支事务,所以在事务协调者根据本地已创建的分支事务记录进行回滚的过程中,该最后被调用的事务参与者会进行空回滚,而在一定时间之后,该最后被调用的事务参与者会在本地创建预处理记录并执行分支事务,导致该预处理记录对应的操作无法再次被回滚,产生回滚悬挂。由上述分析可见,现有的分布式事务在出现网络超时的情况下,可能会导致回滚处理在事务参与者的预处理落地之前开始,或者回滚处理在事务协调者的分支事务记录落地之前开始,无法保证事务参与者或事务协调者的处理与回滚处理之间的先后顺序,从而产生回滚悬挂问题,进而引起后续业务请求的重试失败或者资源损失等问题。针对该问题,本实施例提供一种方法具体包括:回滚请求发起者接收回滚处理请求,在接收到回滚处理请求后,根据分布式事务的开始时间和指定的时间间隔,获得第一时间,将第一时间与当前时间进行比较,若第一时间早于当前时间,则执行回滚处理。在本实施例中,通过预先设定一时间间隔,回滚处理在与分布式事务的开始时间相距指定的时间间隔后才被执行。而该时间间隔可以将网络延时考虑进去,这样意味着回滚请求发起者的处理在回滚处理执行之前优先完成,从而保证了回滚请求发起者的处理与回滚处理之间的先后顺序,使得回滚处理在回滚请求发起者的处理完成之后再开始,从而解决了回滚悬挂的问题。值得说明的是,上述指定的时间间隔具体可以根据网络延时的长短来确定,但不限于此。另外,对于回滚请求发起者是事务参与者的情况,由于事务参与者可能有多个,不同事务参与者被调用的先后顺序不同,所以对应于不同事务参与者的时间间隔也会有所不同。一种较为优选的实现方式,可以将各个事务参与者对应的时间间隔设置为同一时间间隔,该时间间隔具体可以是最后被调用的事务参与者对应的时间间隔,这种实现方式相对简单,便于实施。在一可选实施方式中,若上述第一时间晚于或等于当前时间,则意味着回滚请求发起者的处理可能尚未完成,若此时执行回滚处理,存在产生回滚悬挂的风险,因此,在这种情况下,回滚请求发起者执行回滚失败处理。值得说明的是,回滚失败处理属于现有流程,在此不再赘述。在一可选实施方式中,回滚请求发起者为事务参与者,例如当事务参与者未能在指定时间内接收到事务发起者发送的调用请求时,可以发起回滚请求。当回滚请求发起者为事务参与者时,回滚处理流程如图2所示,包括以下步骤:2a、事务发起者向事务协调者发送事务请求,以发起分布式事务。2b、事务协调者根据事务请求,在本地创建主事务记录,并确定分布式事务的开始时间。例如,事务协调者可以从事务请求中获取分布式事务的开始时间,或者可以将接收到事务请求的时间作为分布式事务的开始时间。2c、事务发起者向事务协调者发送分支事务添加请求。2d、事务协调者根据分支事务添加请求,在本地创建分支事务记录。2e、事务发起者向事务参与者发送调用请求,以调用事务参与者执行分支事务。2f、在本实施例中,假设事务参与者因网络超时未能在指定时间内接收到调用请求,于是作为回滚请求发起者向事务发起者发送回滚请求。2g、事务发起者根据回滚请求,向事务协调者发起回滚处理。2h、事务协调者根据本地已创建的分支事务记录,向对应的事务参与者发送回滚处理请求,并在回滚处理请求中携带分布式事务的开始时间。其中,一个分支事务记录对应一个事务参与者,并且分支事务记录中记录有该分支事务记录所对应的事务参与者的信息,例如事务参与者的标识等。2i、事务参与者从回滚处理请求中获取分布式事务的开始时间,并根据分布式事务的开始时间和预先指定的时间间隔,获得第一时间。具体的,事务参与者将分布式事务的开始时间向前推进指定的时间间隔,从而获得第一时间。举例说明,假设分布式事务的开始时间为12:00,指定时间间隔为1分钟,则第一时间为12:01。2j、事务参与者将第一时间与当前时间进行比较,若第一时间早于当前时间,说明事务参与者在当前时间之前已经接收到调度请求,并在本地创建了预处理记录(意味着执行了分支事务),于是可以跳转到步骤2k;若第一时间晚于或等于当前时间,则无法保证事务参与者在当前之前已经接收到调度请求并创建了预处理记录,于是可以跳转到步骤2l。2k、事务参与者执行回滚处理。2l、事务参与者执行回滚失败处理。具体的,在上述方法流程中,事务参与者因网络延时未能在指定时间内接收事务发起者的调度请求时,事务参与者向事务发起者发送回滚请求,事务发起者根据回滚请求,向事务协调者发起回滚处理。事务协调者在回滚处理请求中携带分布式事务的开始时间,之后,根据本地已创建的分支事务记录,调用已创建的分支事务记录对应的事务参与者的回滚接口,将回滚处理请求发送给相应的事务参与者。事务参与者根据回滚处理请求按照图1所示方法流程进行回滚处理。在上述方法流程中,回滚请求发起者接收回滚处理请求具体为:事务参与者接收事务协调者发送的回滚处理请求,且该回滚处理请求包括分布式事务的开始时间。进一步,在回滚请求发起者为事务参与者的情况下,有可能在事务参与者发起回滚请求之后,且在执行回滚处理之前,接收到调用请求并在本地创建了分支事务对应的预处理记录的情况。针对这种情况,事务参与者可以直接执行回滚处理,而不需要再判断第一时间是否早于当前时间。基于此,事务参与者在步骤2j,即根据分布式事务的开始时间和指定的时间间隔,获得第一时间之前,可以判断本地是否创建了分支事务对应的预处理记录;若判断结果为否,则事务参与者执行根据分布式事务的开始时间和指定的时间间隔,获得第一时间的操作;反之,若判断结果为是,则事务参与者直接执行回滚处理。对于判断结果为是的情况,事务参与者直接执行回滚处理,在解决回滚悬挂问题的同时,有利于提高回滚处理的效率。对于事务参与者来说,在第一时间早于当前时间时执行回滚处理主要是指:在第一时间早于当前时间时,回滚之前执行的分支事务。在另一可选实施方式中,回滚请求发起者为事务协调者,例如当事务协调者未能在指定时间内接收到事务发起者发送的分支事务添加请求时,可以发起回滚请求。当回滚请求发起者为事务协调者时,回滚处理流程如图3所示,包括以下步骤:3a、事务发起者向事务协调者发送事务请求,以发起分布式事务。3b、事务协调者根据事务请求,在本地创建主事务记录,并确定分布式事务的开始时间。例如,事务协调者可以从事务请求中获取分布式事务的开始时间,或者可以将接收到事务请求的时间作为分布式事务的开始时间。3c、事务发起者向事务协调者发送分支事务添加请求。3d、事务发起者向事务参与者发送调用请求,以调用事务参与者执行分支事务。3e、事务参与者根据调用请求,在本地创建分支事务记录,并执行分支事务。3f、在本实施例中,假设事务协调者因网络超时未能在指定时间内接收到分支事务添加请求,于是作为回滚请求发起者向事务发起者发送回滚请求。3g、事务发起者根据回滚请求,向事务协调者发送回滚处理请求。3h、事务协调者根据分布式事务的开始时间和预先指定的时间间隔,获得第一时间。具体的,事务协调者将分布式事务的开始时间向前推进指定的时间间隔,从而获得第一时间。举例说明,假设分布式事务的开始时间为13:00,指定时间间隔为1分钟,则第一时间为13:01。3i、事务协调者将第一时间与当前时间进行比较,若第一时间早于当前时间,说明事务协调者在当前时间之前已经接收到分支事务添加请求,并在本地创建了分支事务记录,于是可以跳转到步骤3j;若第一时间晚于或等于当前时间,则无法保证事务协调者在当前之前已经接收到分支事务添加请求并创建了分支事务记录,于是可以跳转到步骤3l。3j、事务协调者根据本地已创建的分支事务记录,向对应的事务参与者发起回滚处理。此时,所有执行了分支事务的事务参与者都会执行回滚处理,不会出现回滚悬挂的情况。3k、事务参与者执行回滚处理。3l、事务协调者执行回滚失败处理。具体的,在上述方法流程中,事务协调者因网络延时未能在指定时间内接收事务发起者的分支事务添加请求时,向事务发起者发送回滚请求,事务发起者根据回滚请求,向事务协调者发送回滚处理请求。事务协调者根据回滚处理请求按照图1所示方法流程进行回滚处理。在上述方法流程中,回滚请求发起者接收回滚处理请求具体为:事务协调者接收事务发起者发送的回滚处理请求。相应的,回滚请求发起者在第一时间早于当前时间时执行回滚处理具体为:事务协调者在第一时间早于当前时间时,根据本地已创建的分支事务记录,指示该已创建的分支事务记录对应的事务参与者回滚之前执行的分支事务。由上述可见,在分布式事务处理过程中,作为回滚请求发起者的事务参与者或事务协调者接收回滚处理请求,根据分布式事务的开始时间和指定的时间间隔,获得第一时间,在第一时间早于当前时间时,执行回滚处理,这意味着回滚处理要在与分布式事务的开始时间相距指定的时间间隔之后才被执行。其中,指定的时间间隔可以考虑网络超时这一因素,给事务参与者或事务协调者预留充足的处理时间,这样可以保证事务参与者或事务协调者的处理与回滚处理之间的先后顺序,使得回滚处理在事务参与者或事务协调者的处理完成之后再行开始,解决回滚悬挂的问题。需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。图4为本申请一实施例提供的回滚处理装置的结构示意图。该装置适用于分布式事务,分布式事务涉及事务发起者、事务参与者和事务协调者;该回滚处理装置可位于事务参与者或事务协调者中实现。如图4所示,该回滚处理装置包括:接收模块41、获得模块42和回滚执行模块43。接收模块41,用于接收回滚处理请求。获得模块42,用于根据分布式事务的开始时间和指定的时间间隔,获得第一时间。回滚执行模块43,用于在第一时间早于当前时间时执行回滚处理。在一可选实施方式中,回滚执行模块43还用于:在第一时间晚于或等于当前时间时执行回滚失败处理。在一可选实施方式中,回滚处理装置位于事务参与者中实现,则接收模块41具体可用于:在该回滚处理装置位于事务参与者中实现时,接收事务协调者发送的回滚处理请求,该回滚处理请求包括分布式事务的开始时间。基于上述,如图5所示,该回滚处理装置还包括:判断模块44。判断模块44,用于判断本地是否创建了分支事务对应的预处理记录,并在判断结果为否时,触发获得模块42执行根据分布式事务的开始时间和指定的时间间隔,获得第一时间的操作。基于上述,回滚执行模块43还用于:在判断模块的判断结果为是时,直接执行回滚处理。在该回滚处理装置位于事务参与者中实现的基础上,回滚执行模块43在第一时间早于当前时间时,执行回滚处理具体为:在第一时间早于当前时间时,回滚事务参与者之前执行的分支事务。相应的,回滚执行模块43在判断模块的判断结果为是时,直接执行回滚处理具体为:在判断模块的判断结果为是时,回滚事务参与者之前执行的分支事务。在一可选实施方式中,该回滚处理装置可位于事务协调者中实现,基于此,接收模块41具体可用于:在该回滚处理装置位于事务协调者中实现时,接收事务发起者发送的回滚处理请求。相应的,回滚执行模块43具体可用于:在第一时间早于当前时间时,根据本地已创建的分支事务记录,指示已创建的分支事务记录对应的事务参与者回滚之前执行的分支事务。基于上述,如图6所示,该回滚处理装置还包括:确定模块45。接收模块41还用于在接收回滚处理请求之前,接收事务发起者发送的事务请求。确定模块45,用于根据接收模块41接收的事务请求,确定分布式事务的开始时间。确定模块45用于向获得模块42提供分布式事务的开始时间。具体的,确定模块45具体可用于:从事务请求中获取分布式事务的开始时间;或者,将接收到事务请求的时间作为分布式事务的开始时间。本实施例提供的回滚处理装置,位于事务参与者或事务协调者中实现,在分布式事务处理过程中,接收回滚处理请求,根据分布式事务的开始时间和指定的时间间隔,获得第一时间,在第一时间早于当前时间时,执行回滚处理,这意味着回滚处理要在与分布式事务的开始时间相距指定的时间间隔之后才被执行。其中,指定的时间间隔可以考虑网络超时这一因素,给事务参与者或事务协调者预留充足的处理时间,这样可以保证事务参与者或事务协调者的处理与回滚处理之间的先后顺序,使得回滚处理在事务参与者或事务协调者的处理完成之后再行开始,解决回滚悬挂的问题。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(RandomAccessMemory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1