一种基于共享存储池的事务处理方法及系统与流程

文档序号:12271687阅读:145来源:国知局
一种基于共享存储池的事务处理方法及系统与流程

本发明涉及分布式文件系统技术领域,特别是涉及一种基于共享存储池的事务处理方法及系统。



背景技术:

随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的可扩展等目标就显得越来越重要。为了解决这一系列问题,分布式文件系统应运而生。

在分布式文件系统中通常利用两阶段提交协议进行事务处理,二阶段提交是在计算机网络以及数据库领域内,为了使基于分布式文件系统架构下的所有节点(元数据服务器)在进行事务提交时保持一致性而设计的一种算法。在分布式文件系统中,每个节点虽然可以知晓自己的操作是成功还是失败,却无法知道其他节点的操作是成功还是失败。当一个事务跨越多个节点时,为了保持事务的ACID特性,需要从该事务对应的多个节点中选取一个节点作为协调者来统一掌控其他节点(称作参与者)的操作结果并最终指示这些节点是否要把操作结果进行真正的提交(比如将更新后的数据写入磁盘等等)。因此,二阶段提交的算法思路可以概括为:参与者将自身的操作成败的消息反馈至协调者,再由协调者根据所有参与者的反馈消息决定各参与者是要进行提交操作还是中止操作。

具体地,参与者在将自身的操作成败消息反馈至协调者以便协调者来判定事务的状态后,通常情况下参与者在一定时间内会接收到协调者发送的操作命令,这里的操作命令为执行命令或者中止命令,但实际应用中存在一些情况例如在网络故障或者协调者出错的情况下,参与者接收不到协调者发送的操作命令,使得参与者并不能确定此时事务的状态,进而也就不能进行相应的操作。

因此,如何提供一种解决上述技术问题的方案是本领域技术人员目前需要解决的问题。



技术实现要素:

本发明的目的是提供一种基于共享存储池的事务处理方法,能够使得参与者在没有按时接收到协调者发送的操作命令时仍能够在确定事务的状态,提高了容错性;本发明的另一目的是提供一种基于共享存储池的事务处理系统。

为解决上述技术问题,本发明提供了一种基于共享存储池的事务处理方法,用于分布式文件系统,包括:

步骤S11:各个参与者将自身的反馈消息反馈至协调者,并记录本地日志,所述本地日志通过事务的ID来标记;

步骤S12:协调者根据是否在第一预设时间内接收到所有参与者发送的反馈消息及是的情况下的所有参与者的反馈消息判断事务的状态,并相应地记录一条包括所述事务的ID及状态的全局日志到共享存储池;

步骤S13:当所述参与者在第二预设时间内没有接收到所述协调者发送的操作命令时,所述参与者根据所述事务的ID去所述共享存储池中查找所述全局日志并根据查找到的所述全局日志确定所述事务的状态,并根据所述事务的状态进行相应的操作。

优选地,步骤S12的过程具体为:

步骤S121:所述协调者判断是否在第一预设时间内接收到所有参与者发送的反馈消息,如果是,则进入步骤S122,否则,进入步骤S124;

步骤S122:判断是否所有参与者发送的反馈消息均为就绪消息,如果是,则进入步骤S123,否则,进入步骤S124;

步骤S123:所述协调者判断所述事务为可执行,并记录一条包括所述事务的ID及状态的全局日志到共享存储池,并设置所述状态为成功;

步骤S124:所述协调者判断所述事务为不可执行,并记录一条包括所述事务的ID及状态的全局日志到共享存储池,并设置所述状态为失败。

优选地,步骤S13的过程具体为:

当所述参与者在第二预设时间内没有接收到所述协调者发送的操作命令时,所述参与者根据所述事务的ID去查找所述存储池中查找所述全局日志;

在查找到所述全局日志且所述全局日志中记录的所述事务的状态为成功时,所述参与者执行相应的元数据操作,当所述全局日志中记录的所述事务的状态为失败时,所述参与者进行回滚操作。

优选地,所述本地日志包括操作类型、文件路径和元数据服务器标识。

优选地,步骤S13还包括:

确定故障类型,所述故障类型包括网络故障或者所述协调者出错。

为解决上述技术问题,本发明还提供了一种基于共享存储池的事务处理系统,用于分布式文件系统,包括:

反馈单元,用于各个参与者将自身的反馈消息反馈至协调者,并记录本地日志,所述本地日志通过事务的ID来标记;

判断单元,用于协调者根据是否在第一预设时间内接收到所有参与者发送的反馈消息及是的情况下的所有参与者的反馈消息判断事务的状态,并相应地记录一条包括所述事务的ID及状态的全局日志到共享存储池;

查找单元,用于当所述参与者在第二预设时间内没有接收到所述协调者发送的操作命令时,所述参与者根据所述事务的ID去所述共享存储池中查找所述全局日志并根据查找到的所述全局日志确定所述事务的状态,并根据所述事务的状态进行相应的操作。

优选地,所述判断单元具体包括:

第一判断单元,用于所述协调者判断是否在第一预设时间内接收到所有参与者发送的反馈消息,如果是,则触发所述第二判断单元,否则,触发所述第二确定单元;

第二判断单元,用于判断是否所有参与者发送的反馈消息均为就绪消息,如果是,则触发所述第一确定单元,否则,触发所述第二确定单元;

第一确定单元,用于所述协调者判断所述事务为可执行,并记录一条包括所述事务的ID及状态的全局日志到共享存储池,并设置所述状态为成功;

第二确定单元,用于所述协调者判断所述事务为不可执行,并记录一条包括所述事务的ID及状态的全局日志到共享存储池,并设置所述状态为失败。

优选地,所述查找单元具体包括:

查找子单元,用于当所述参与者在第二预设时间内没有接收到所述协调者发送的操作命令时,所述参与者根据所述事务的ID去查找所述存储池中查找所述全局日志;

执行单元,用于在查找到所述全局日志且所述全局日志中记录的所述事务的状态为成功时,所述参与者执行相应的元数据操作,当所述全局日志中记录的所述事务的状态为失败时,所述参与者进行回滚操作。

优选地,所述本地日志包括操作类型、文件路径和元数据服务器标识。

优选地,所述查找单元还包括:

故障确定单元,用于确定故障类型,所述故障类型包括网络故障或者所述协调者出错。

本发明提供了一种基于共享存储池的事务处理方法及系统,用于分布式文件系统,包括各个参与者将自身的反馈消息反馈至协调者,并记录本地日志,本地日志通过事务的ID来标记;协调者根据是否在第一预设时间内接收到所有参与者发送的反馈消息及是的情况下的所有参与者的反馈消息判断事务的状态,并相应地记录一条包括事务的ID及状态的全局日志到共享存储池;当参与者在第二预设时间内没有接收到协调者发送的操作命令时,参与者根据事务的ID去共享存储池中查找全局日志并根据查找到的全局日志确定事务的状态,并根据事务的状态进行相应的操作。

可见,本发明中,协调者在判断得到事务的状态后,会记录包括事务的ID及状态全局日志到共享存储池中,当参与者在第二预设时间内没有接收到协调者发送的操作命令时,参与者根据事务的ID去共享存储池中查找全局日志并根据查找到的全局日志确定事务的状态,并根据事务的状态进行相应的操作,能够使得参与者在没有按时接收到协调者发送的操作命令时仍能够在确定事务的状态,提高了容错性。

附图说明

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

图1为本发明提供的一种基于共享存储池的事务处理方法的过程的流程图;

图2为本发明提供的一种基于共享存储池的事务处理系统的结构示意图。

具体实施方式

本发明的核心是提供一种基于共享存储池的事务处理方法,能够使得参与者在没有按时接收到协调者发送的操作命令时仍能够在确定事务的状态,提高了容错性;本发明的另一核心是提供一种基于共享存储池的事务处理系统。

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参照图1,图1为本发明提供的一种基于共享存储池的事务处理方法的过程的流程图,该方法用于分布式文件系统,包括:

步骤S11:各个参与者将自身的反馈消息反馈至协调者,并记录本地日志,本地日志通过事务的ID来标记;

具体地,客户端提交操作请求,分布式文件系统选择出相应的元数据服务器,并分配不同的角色,也即选出一个协调者,其余的作为事务的参与者。

在准备阶段,协调者向每个参与者发送准备命令,通知其进行操作条件的检查,并等待参与者的应答。每个参与者接收到准备命令后判断自身是否满足执行事务的条件,也即是否能够执行提交操作,如果是,则向协调者发送一个就绪的反馈消息,否则,向协调者发送一个中止的反馈消息。另外,参与者还记录本地日志文件,并通过分布式事务的ID来进行标记。

本地日志用来记录事务中与本地节点相关的元数据操作信息。

作为优选地,本地日志包括操作类型、文件路径和元数据服务器标识。

当然,这里的本地日志还可以包括其他元数据操作信息,本发明在此不作特别的限定,根据实际情况来定。

步骤S12:协调者根据是否在第一预设时间内接收到所有参与者发送的反馈消息及是的情况下的所有参与者的反馈消息判断事务的状态,并相应地记录一条包括事务的ID及状态的全局日志到共享存储池;

具体地,全局日志用来记录事务的ID和事务的状态,每个元数据服务器都有自己的本地日志,但全局日志在分布式文件系统中只维护一份。

作为优选地,步骤S12的过程具体为:

步骤S121:协调者判断是否在第一预设时间内接收到所有参与者发送的反馈消息,如果是,则进入步骤S122,否则,进入步骤S124;

步骤S122:判断是否所有参与者发送的反馈消息均为就绪消息,如果是,则进入步骤S123,否则,进入步骤S124;

步骤S123:协调者判断事务为可执行,并记录一条包括事务的ID及状态的全局日志到共享存储池,并设置状态为成功;

步骤S124:协调者判断事务为不可执行,并记录一条包括事务的ID及状态的全局日志到共享存储池,并设置状态为失败。

在判定阶段,协调者判断是否在第一预设时间内接收到所有参与者发送的反馈消息,如果是,则此时事务的状态是确定的,则再判断所有参与者发送的反馈消息为就绪消息还是中止消息,如果所有的参与者发送的反馈消息均为就绪消息,则判断事务为可执行,并记录一条包括事务的ID及状态的全局日志到共享存储池,并设置状态为成功,如果有部分或者全部的参与者的反馈消息为中止消息,则判断事务为不可执行,并记录一条包括事务的ID及状态的全局日志到共享存储池,并设置状态为失败。因为在协调者等待参与者的反馈消息的过程中容易出现故障,容易导致协调者不能及时接收到参与者的消息。如果协调者在第一预设时间内没有收到部分或者全部参与者的反馈消息,则将所有的故障都归结为超时错误,并将判断事务为不可执行,并记录一条包括事务的ID及状态的全局日志到共享存储池,并设置状态为失败。

步骤S13:当参与者在第二预设时间内没有接收到协调者发送的操作命令时,参与者根据事务的ID去共享存储池中查找全局日志并根据查找到的全局日志确定事务的状态,并根据事务的状态进行相应的操作。

在准备阶段和判定阶段完成后,事务进入到执行阶段,协调者广播操作命令给各个参与者,这里的操作命令包括执行命令和取消命令。在没有故障的情况下,参与者接收到执行命令后开始进行各自的元数据操作,如果接收到取消命令,则不进行分布式事务的操作,进行回滚操作。

当参与者在第二预设时间内没有接收到协调者发送的操作命令时,则餐饮组合可以根据事务的ID去共享存储池中查找,当查找到全局日志后,根据全局日志中的记录信息确定事务的状态,然后再根据事务的状态进行相应的操作。

作为优选地,步骤S13的过程具体为:

当参与者在第二预设时间内没有接收到协调者发送的操作命令时,参与者根据事务的ID去查找存储池中查找全局日志;

在查找到全局日志且全局日志中记录的事务的状态为成功时,参与者执行相应的元数据操作,当全局日志中记录的事务的状态为失败时,参与者进行回滚操作。

作为优选地,步骤S13还包括:

确定故障类型,故障类型包括网络故障或者协调者出错。

具体地,此时可以将故障类型缩小至网络故障或者协调者出错。

另外,如果参与者没有在共享存储池中发现全局日志,此时需要通过协调者写全局日志的时间与第二预设时间来确定故障,如果协调者写全局日志的时间大于第二预设时间,则此时参与者没找到全局日志可能是因为协调者还没写入,那么参与者可以再等一会,如果仍然找不到,则可能是协调者无法写入或者网络故障。如果协调者写全局日志的时间小于第二预设时间,则此时参与者没找到全局日志说明是协调者无法写入或者网络故障。

因为共享存储池非常可靠,因此能够保证参与者对全局日志的正确访问,避免出错带来的不确定性。

本发明提供了一种基于共享存储池的事务处理方法,用于分布式文件系统,包括各个参与者将自身的反馈消息反馈至协调者,并记录本地日志,本地日志通过事务的ID来标记;协调者根据是否在第一预设时间内接收到所有参与者发送的反馈消息及是的情况下的所有参与者的反馈消息判断事务的状态,并相应地记录一条包括事务的ID及状态的全局日志到共享存储池;当参与者在第二预设时间内没有接收到协调者发送的操作命令时,参与者根据事务的ID去共享存储池中查找全局日志并根据查找到的全局日志确定事务的状态,并根据事务的状态进行相应的操作。

可见,本发明中,协调者在判断得到事务的状态后,会记录包括事务的ID及状态全局日志到共享存储池中,当参与者在第二预设时间内没有接收到协调者发送的操作命令时,参与者根据事务的ID去共享存储池中查找全局日志并根据查找到的全局日志确定事务的状态,并根据事务的状态进行相应的操作,能够使得参与者在没有按时接收到协调者发送的操作命令时仍能够在确定事务的状态,提高了容错性。

与上述方法实施例相适应地,请参照图2,图2为本发明提供的一种基于共享存储池的事务处理系统的结构示意图,该系统用于分布式文件系统,包括:

反馈单元1,用于各个参与者将自身的反馈消息反馈至协调者,并记录本地日志,本地日志通过事务的ID来标记;

判断单元2,用于协调者根据是否在第一预设时间内接收到所有参与者发送的反馈消息及是的情况下的所有参与者的反馈消息判断事务的状态,并相应地记录一条包括事务的ID及状态的全局日志到共享存储池;

查找单元3,用于当参与者在第二预设时间内没有接收到协调者发送的操作命令时,参与者根据事务的ID去共享存储池中查找全局日志并根据查找到的全局日志确定事务的状态,并根据事务的状态进行相应的操作。

作为优选地,判断单元2具体包括:

第一判断单元,用于协调者判断是否在第一预设时间内接收到所有参与者发送的反馈消息,如果是,则触发第二判断单元,否则,触发第二确定单元;

第二判断单元,用于判断是否所有参与者发送的反馈消息均为就绪消息,如果是,则触发第一确定单元,否则,触发第二确定单元;

第一确定单元,用于协调者判断事务为可执行,并记录一条包括事务的ID及状态的全局日志到共享存储池,并设置状态为成功;

第二确定单元,用于协调者判断事务为不可执行,并记录一条包括事务的ID及状态的全局日志到共享存储池,并设置状态为失败。

作为优选地,查找单元3具体包括:

查找子单元,用于当参与者在第二预设时间内没有接收到协调者发送的操作命令时,参与者根据事务的ID去查找存储池中查找全局日志;

执行单元,用于在查找到全局日志且全局日志中记录的事务的状态为成功时,参与者执行相应的元数据操作,当全局日志中记录的事务的状态为失败时,参与者进行回滚操作。

作为优选地,本地日志包括操作类型、文件路径和元数据服务器标识。

作为优选地,查找单元3还包括:

故障确定单元,用于确定故障类型,故障类型包括网络故障或者协调者出错。

对于本发明提供的基于共享存储池的事务处理系统的介绍请参照上述方法实施例,本发明在此不再赘述。

本发明提供了一种基于共享存储池的事务处理系统,用于分布式文件系统,包括各个参与者将自身的反馈消息反馈至协调者,并记录本地日志,本地日志通过事务的ID来标记;协调者根据是否在第一预设时间内接收到所有参与者发送的反馈消息及是的情况下的所有参与者的反馈消息判断事务的状态,并相应地记录一条包括事务的ID及状态的全局日志到共享存储池;当参与者在第二预设时间内没有接收到协调者发送的操作命令时,参与者根据事务的ID去共享存储池中查找全局日志并根据查找到的全局日志确定事务的状态,并根据事务的状态进行相应的操作。

可见,本发明中,协调者在判断得到事务的状态后,会记录包括事务的ID及状态全局日志到共享存储池中,当参与者在第二预设时间内没有接收到协调者发送的操作命令时,参与者根据事务的ID去共享存储池中查找全局日志并根据查找到的全局日志确定事务的状态,并根据事务的状态进行相应的操作,提高了容错性。

需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其他实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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