一种事务处理方法与装置制造方法

文档序号:6532521阅读:185来源:国知局
一种事务处理方法与装置制造方法
【专利摘要】本发明提供了一种应用于协调者,所述协调者和参与者通信连接,该方法包括:所述协调者向各个参与者发送查询消息;所述协调者根据所述响应消息得出结论,所述协调者执行所述结论,并将所述结论发送给所述参与者,所述结论包括下述至少一种:如果任意一个响应消息中携带有第一信息,则结论为执行事务,其中,所述第一信息表示所述参与者不存在所述事务ID,存在所述对象ID,所述对象在参与者中的变化信息与所述对象在协调者中的变化信息相同;如果任意一个响应消息中携带有第二信息,则结论为终止事务,其中,所述第二信息表示所述参与者不存在所述事务ID,存在所述对象ID,所述对象在参与者中的变化信息与所述对象在协调者的变化信息不同。
【专利说明】一种事务处理方法与装置
[0001] 本申请要求于2013年10月29日提交中国专利局、申请号为PCT/CN2013/086169、 发明名称为"一种事务处理方法与装置"的中国专利申请的优先权,其全部内容通过引用结 合在本申请中。

【技术领域】
[0002] 本发明涉及信息【技术领域】,特别涉及一种事务处理方法和装置。

【背景技术】
[0003] 对象存储系统(Object-Based Storage System)是一种分布式存储系统,由多个 基于对象的存储设备OSD (Object-based Storage Device)组成,0SD通过网络互连,0SD也 可以称为对象存储系统中的节点。在对象存储系统中,以对象(Object)作为最基本的被存 储内容单元,对象中包含了数据以及数据的属性信息。数据指的是对象中存储的内容,例如 视频文件,音乐文件等,数据的的属性信息例如文件的大小,版本信息等。
[0004] 为了存储的对象的可靠性,一般会将一个对象存储到不同的0SD上,这样,即使是 一部分0SD出现故障,也不影响对象的读写操作。这样,就提升数据的可靠性。由于同一个 对象需要备份多份后存储到不同节点,也就说对象是跨多个0SD节点来存储,这些备份数 据也可以称为副本。为了保证对象存储的一致性要求,对象的写操作需要通过事务来保证。 事务可以理解成是一组面向数据变更的操作,这组操中,除非所有操作都成功,否则不会对 数据进行变更。这样就保证了同一个对象在不同0SD上的副本是相同的,避免了部分副本 进行了变更部分副本没有变更。
[0005] 事务包含一系列操作集合,这些操作经常由多个节点并行执行,使分布在多个节 点的数据从一个一致状态转换到另一个一致状态(在分布式对象存储系统中,意味着多个 节点中的相同对象拥有相同的版本号),组成事务的一系列操作要么全部执行,要么全部不 执行,从而保持节点上数据状态的一致性。在非存储领域,也同样存在需要使用事务的情 形。
[0006] 现有的两阶段提交协议(Two-phase Commitment Protocol,2PC),可以保证分布 式事务提交的原子性。它把分布式事务的某一个0SD指定为协调者(Coordinator),所有 其他0SD指定为参与者(Participants)。只有协调者才有掌握提交或撤销事务的决定权, 并在做出提交或者撤销事务的结论后,把结论发给参与者。如果结论是提交事务,就发送 Commit消息;如果结论是终止事务,就发送Abort消息。而各个参与者接收协调者的结论, 按照结论在其本地数据库中执行操作;参与者还可以向协调者提出撤销或提交子事务的意 向。
[0007] 在参与者等待协调者的结论时,如果协调者失效,参与者会长时间等待协调者的 结论。在等待期间,各个参与者的事务无法结束,也无法释放占用的资源,会造成了阻塞。为 了避免阻塞,现有技术提出了一种状态确认技术,通过参与者查询其他参与者的事务状态, 确认自身是否需要执行事务,但是在这种方法中,参与者之间交互过程过多,造成系统性能 下降。
[0008] 即使协调者没有失效,如何通过读取参与者的信息来获得事务的结论,也是一个 需要解决的问题。


【发明内容】

[0009] 本发明提供一种事务处理方法,可以通过读取参与者的信息,获得事务结论。
[0010] 第一方面,本发明实施例提供一种事务处理方法,应用于协调者,所述协调者和参 与者通信连接,事务操作的对象由多个子对象组成,其中,一个所述子对象位于所述协调者 中,其他所述子对象分别位于不同的所述参与者中,该方法包括:所述协调者向各个参与者 发送查询消息,所述查询消息中携带有事务ID、对象ID以及所述对象的变化信息,其中所 述事务ID用于标记所述事务,所述对象ID用于标记所述对象,所述变化信息与所述对象的 内容对应,不同所述变化信息的所述对象的内容不同;所述协调者接收各个参与者对所述 查询消息的响应消息;所述协调者根据所述响应消息得出结论,所述协调者执行所述结论, 并将所述结论发送给所有所述参与者,所述结论包括下述至少一种:如果任意一个响应消 息中携带有第一信息,则结论为执行事务,其中,所述第一信息表示所述参与者不存在所述 事务ID,存在所述对象ID,所述对象在参与者中的变化信息与所述对象在协调者中的变化 信息相同;或者,如果任意一个响应消息中携带有第二信息,则结论为终止事务,其中,所述 第二信息表示所述参与者不存在所述事务ID,存在所述对象ID,所述对象在参与者中的变 化信息与所述对象在协调者的变化信息不同。
[0011] 在第一方面的第一种实现方式中,所述结论还包括下述至少一种:如果所有响应 消息中均携带有第三信息,则结论包括为执行事务,其中,所述第三信息表示所述参与者存 在所述事务ID ;如果任意一个响应消息中携带有第四信息,则结论为执行事务,其中,第四 信息表示所述参与者不存在所述事务ID,并且所述参与者不存在所述对象ID。
[0012] 第二方面,本发明实施例提供一种事务处理装置,与参与者通信连接,事务操作的 对象由多个子对象组成,其中,一个所述子对象位于所述事务处理装置中,其他所述子对象 分别位于不同的所述参与者中,该装置包括:查询模块,用于向各个参与者发送查询消息, 所述查询消息中携带有事务ID、对象ID以及所述对象的变化信息,其中所述事务ID用于标 记所述事务,所述对象ID用于标记所述对象,所述变化信息与所述对象的内容对应,不同 所述变化信息的所述对象的内容不同;接收模块,用于接收各个参与者对所述查询消息的 响应消息;决策模块,用于根据所述响应消息得出结论,并将所述结论发送给所有所述参与 者,所述结论包括下述至少一种:如果任意一个响应消息中携带有第一信息,则结论为执行 事务,其中,所述第一信息表示所述参与者存在所述事务ID,存在所述对象ID,所述对象在 参与者中的变化信息与所述对象在协调者中的变化信息相同;或者,如果任意一个响应消 息中携带有第二信息,则结论为终止事务,其中,所述第二信息表示所述参与者存在所述事 务ID,存在所述对象ID,所述对象在参与者中的变化信息与所述对象在协调者的变化信息 不同;执行模块,用于执行所述决策模块的结论。
[0013] 在第二方面的第一种实现方式中,所述结论还包括下述至少一种:如果所有响应 消息中均携带有第三信息,则结论包括为执行事务,其中,所述第三信息表示所述参与者存 在所述事务ID ;如果任意一个响应消息中携带有第四信息,则结论为执行事务,其中,第四 信息表示所述参与者不存在所述事务ID,并且所述参与者不存在所述对象ID。
[0014] 第三方面,本发明实施例提供一种事务处理方法,应用于协调者,所述协调者和参 与者通信连接,事务操作的对象由多个子对象组成,其中,一个所述子对象位于所述协调者 中,其他所述子对象分别位于不同的所述参与者中,该方法包括:所述协调者向各个参与者 发送查询消息,所述查询消息中携带有事务ID以及对象ID,其中所述事务ID用于标记所述 事务,所述对象ID用于标记所述对象,所述变化信息与所述对象的内容对应,不同所述变 化信息的所述对象的内容不同;所述协调者接收各个参与者对所述查询消息的响应消息, 所述响应消息携带所述第五信息,所述第五消息表示所述参与者不存在所述事务ID,存在 所述对象ID,其中,所述第五信息中还携带有发出响应消息的参与者中所述对象变化信息; 所述协调者根据所述响应消息得出结论,所述协调者执行所述结论,并将所述结论发送给 所有所述参与者,所述结论包括下述至少一种:如果所述对象在参与者中的变化信息与所 述对象在协调者中的变化信息相同,则结论为执行事务;或者,如果所述对象在参与者中的 变化信息与所述对象在协调者中的变化信息不同,则结论为终止事务。
[0015] 在第三方面的第一种实现方式中,所述结论还包括下述至少一种:如果所有响应 消息中均携带有第三信息,则结论包括为执行事务,其中,所述第三信息表示所述参与者存 在所述事务ID ;如果任意一个响应消息中携带有第四信息,则结论为执行事务,其中,第四 信息表示所述参与者不存在所述事务ID,并且所述参与者不存在所述对象ID。
[0016] 第四方面,本发明实施例一种事务处理装置,与参与者通信连接,事务操作的对象 由多个子对象组成,其中,一个所述子对象位于所述事务处理装置中,其他所述子对象分别 位于不同的所述参与者中,该装置包括:查询模块,用于向各个参与者发送查询消息,所述 查询消息中携带有所述查询消息中携带有事务ID以及对象ID,其中所述事务ID用于标记 所述事务,所述对象ID用于标记所述对象;接收模块,用于接收各个参与者对所述查询消 息的响应消息,所述响应消息携带所述第五信息,所述表示所述参与者不存在所述事务ID, 存在所述对象ID,其中,所述第五信息中还携带有发出响应消息的参与者中所述对象变化 信息;决策模块,根据所述响应消息得出结论,所述协调者执行所述结论,所述变化信息与 所述对象的内容对应,不同所述变化信息的所述对象的内容不同;并将所述结论发送给所 有所述参与者,所述结论包括下述至少一种:如果所述对象在参与者中的变化信息与所述 对象在协调者中的变化信息相同,则结论为执行事务;或者,如果所述对象在参与者中的变 化信息与所述对象在协调者中的变化信息不同,则结论为终止事务;执行模块,用于执行所 述决策模块的结论。
[0017] 在第四方面的第一种实现方式中,所述结论还包括下述至少一种:如果所有响应 消息中均携带有第三信息,则结论包括为执行事务,其中,所述第三信息表示所述参与者存 在所述事务ID ;如果任意一个响应消息中携带有第四信息,则结论为执行事务,其中,第四 信息表示所述参与者不存在所述事务ID,并且所述参与者不存在所述对象ID。
[0018] 上述各种方面中一种实现方式中,对象的变化信息可以是对象的版本号。
[0019] 应用本发明实施例提供的方法,通过检测参与者的对象的变化信息,可以获得事 务的结论,提高事务处理的效率。

【专利附图】

【附图说明】
[0020] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,下面描述中的附图仅仅是本发明的一些实 施例,还可以根据这些附图获得其他的附图。
[0021] 图1是本发明实施例一种事务处理方法流程图;
[0022] 图2是本发明实施例一种事务处理方法流程图;
[0023] 图3是本发明实施例一种事务处理装置示意图;
[0024] 图4是本发明实施例一种事务处理方法流程图;
[0025] 图5是本发明实施例一种协调者结构示意图。

【具体实施方式】
[0026] 下面将结合本发明实施例中的附图,对本发明的技术方案进行清楚、完整地描述, 显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的 实施例所获得的所有其他实施例,都属于本发明保护的范围。
[0027] 事务是一系列操作的一个集合,事务可以包含多个操作,但是其包含的所有操作 都是不可分割的,要么在执行所有操作,要么不执行任何操作。可以把对N+M个节点的操作 作为一个事务,对任意一个或者多个节点进行操作,那么其他节点也需要执行同样类型的 操作。
[0028] 事务由协调者和参与者共同执行,协调者通过决策产生结论,参与者执行协调者 的结论,参与者还可以为协调者提供决策依据。
[0029] 两阶段提交协议中,系统一般包含两类节点:一类为协调者(Coordinator),通常 一个事务中只有一个;另一类为参与者(Participants),可以有多个。每个节点都可以记 录写前日志(Write-ahead Log)并持久性存储,即使节点发生故障日志也不会丢失。一种 可行的事务协商方法步骤如下:(1)协调者发送操作请求给各个参与者,操作请求可以是 同意执行事务或者不同意执行事务,这个操作请求用于与参与者进行协商,并不需要被参 与者执行;(2)参与者收到协调者操作请求后,返回响应消息,响应消息中携带各个参与者 是否赞同协调者的操作请求,例如响应消息可以是同意协调者的操作请求、或者拒绝协调 者的操作请求,并且参与者进入等待阶段,等待协调者的决策;(3)协调者汇总各个参与者 的响应消息进行决策,得出结论,并把结论发给各个参与者;(4)各个参与者收到结论后执 行这个结论,然后释放事务占用的资源。
[0030] 在上述事务的协商处理过程中,有可能发生意外情况,例如步骤(4)也可能是协 调者发生故障,导致发往一部分参与者的结论没有成功发出,或者参与者自身故障没有接 收到结论,或者其他原因导致部分参与者没有收到结论。这些导致部分参与者没有收到结 论的情况,我们统称为协调者失效。协调者失效,导致部分参与者执行了事务的结论;另一 部分参与者没有执行事务的结论。这些没有收到结论的参与者会一直停留在等待阶段,或 者称为准备(Prepared)状态,事务占用的资源无法及时释放,这种现象我们称为阻塞。
[0031] 现有技术中,为了避免阻塞,参与者在收到协调者的决策结论后,不能释放事务占 用的资源。上述步骤(4)替换为(5)和(6),其中:(5)参与者执行结论后,还需要用日志的 方式把自己收到的结论记录下来,然后向其他参与者发送消息,以通知其他参与者自己已 经收到了结论;以及¢)当某个参与者收到其他所有参与者的结论后,证明没有意外发生, 因此可以释放事务占用的资源,并且再次记录操作日志。
[0032] 现有技术虽然可以一定程度上解决阻塞的问题,但为了避免发生意外时系统阻 塞,不论是否发生意外,每次执行事务都要执行(5) (6)中的协商、记录日志的操作,对系统 资源造成了耗费。
[0033] 为了方便理解,本发明实施例以存储系统,尤其是一种分布式对象存储系统进行 举例,但本发明不限于分布式存储,也同样适用于其他需要使用事务的【技术领域】。在存储领 域中,事务可以是写入数据、删除数据或者修改数据。对象是事务操作的目标,例如一段数 据。这个数据可以用文件名、流水号、路径、逻辑地址、物理地址进行标记。例如"新建"的 事务,可以把新数据写入目标数据中;"删除"事务可以删除目标数据。
[0034] 需要说明的是,对象存储是分布式存储的一种,本发明实施例可以应用在对象存 储中,也可以应用在其他分布式存储中,本发明实施例中的对象并不用于将本发明实施例 限制在对象存储的领域。在分布式存储中,被存储的数据都可以称为对象,例如可以是文 件、文字、图片、数据流以及计算机代码中的某一种或者某一种的一部分。本发明实施例中, 对象是可以被事务所操作的数据。本发明实施例可以把一个数据拆分成多个子数据块,每 个子数据块存储到一个存储节点中。存储节点可以是物理上分离的,也可以是逻辑上分离 的,存储节点例如可以是存储集群、存储服务器、硬盘、硬盘分区、文件夹等。
[0035] 本发明实施例中,对象的版本号可以标记对象是否发生变化,对象的版本号用在 组成对象的各个子对象中。例如创建或者修改了一个对象,对象会拥有一个新的版本号,对 象的子对象版本号也会相应更新。版本号可以标记对象中子对象的一致性。
[0036] 在其他实施例中,除了版本号,还可以用其他信息来标记对象是否发生变化,例如 对象的名称、对象占用存储空间的大小、对象的属性。可以记录所述对象的内容是否发生改 变的信息,统称为对象的变化信息,所述变化信息与所述对象的内容对应,不同变化信息的 所述对象的内容不同。任意子对象发生改变,则相当于整个对象的内容发生改变,相应的, 整个对象的变化信息都需要更新。本发明实施例中,为了方便说明,以对象的版本号为例介 绍对象的变化信息。
[0037] 将一个数据文件对象划分为N个等长的业务数据块,不足的部分可以使用0来补 齐。对这N个数据块进行编码计算生成Μ个校验数据块,将这个N+M个数据块存放到N+M 个不同的节点上,其中,Ν和Μ都是自然数。任意Μ份数据故障,都可以利用剩余的Ν份数 据计算出来发生故障的数据,这种数据恢复技术可以称为纠错码(Erasure Code,EC)。我 们可以把N+M个数据组成的集合称为对象,N+M个数据中的任意一个称为子对象。
[0038] 这N+M个子对象是相互关联的,任意一个进行了更新,余下的所有子对象也需要 更新,以保持子对象之间的一致性。这N+M个子对象的一致性可以通过事务来保证。在把 对象拆分成N个子对象之前,可以为这个对象分配版本号,这个对象的版本号会记录到他 生成的N+M个子对象中。因此通过对象的版本号来标识一致性,如果N+M个子对象是一致 的,则他们拥有相同的版本号;如果部分节点上的数据与其他节点上的数据的版本号不同, 则意味着数据不一致。
[0039] 造成版本号不同的原因有很多,例如某个节点出现了一段时间的故障,在故障期 间这个节点错过了一些写入子对象的操作,那么这个发生过故障的节点上的子对象,就会 和其他没有做过写操做的节点上的子对象不一致,并且版本号不同。客户端从分布式存储 系统中读取这些子对象时,可以发现这些不一致的子对象,可以利用N份版本一致的子对 象通过错误校验的方式对不一致的子对象进行恢复,恢复出与这N份子对象一致的子对 象。
[0040] 应用本发明实施例提供的方法,当原协调者失效后,从参与者中重新选出新的协 调者,新的协调者通过检测其他参与者的对象的变化信息,可以得出事务的结论。而现有技 术中,为了应对协调者失效时出现阻塞,不论协调者是否失效,都采用同样的处理流程来获 得事务的结论。而这个流程比本申请中事务没有失效时,所采用的事务处理技术更加复杂。 因此本申请的总体效率更高,通过提供一种异常(例如协调者失效)处理机制,简化了没有 发生异常时,事务处理的流程。
[0041] 即使原协调者没有失效,本申请方案也提出了一种新的协商机制,可以通过协商 得出事务结论。实施例一
[0042] 本发明实施例提供一种事务处理方法,应用于协调者,所述协调者和参与者通信 连接,事务操作的对象由多个子对象组成,其中,一个所述子对象位于所述协调者中,其他 所述子对象分别位于不同的所述参与者中,该方法包括:所述协调者向各个参与者发送查 询消息,所述查询消息中携带有事务ID、对象ID以及所述对象的版本号,其中所述事务ID 用于标记所述事务,所述对象ID用于标记所述对象;所述协调者接收各个参与者对所述查 询消息的响应消息;所述协调者根据所述响应消息得出结论,所述协调者执行所述结论,并 将所述结论发送给所有所述参与者。
[0043] 所述结论包括下述至少一种:如果任意一个响应消息中携带有第一信息,则结论 为执行事务,其中,所述第一信息表示所述参与者不存在所述事务ID,存在所述对象ID,所 述对象在参与者中的版本号与所述对象在协调者中的版本号相同;或者,如果任意一个响 应消息中携带有第二信息,则结论为终止事务,其中,所述第二信息表示所述参与者不存在 所述事务ID,存在所述对象ID,所述对象在参与者中的版本号与所述对象在协调者的版本 号不同。
[0044] 所述结论还包括下述至少一种:如果所有响应消息中均携带有第三信息,则结论 包括为执行事务,其中,所述第三信息表示所述参与者存在所述事务ID ;如果任意一个响 应消息中携带有第四信息,则结论为执行事务,其中,第四信息表示所述参与者不存在所述 事务ID,并且所述参与者不存在所述对象ID。
[0045] 协调者可以同时具有检测第一信息以及第二信息是否存在,并根据检测结果得出 结论的功能。也可以同时具有检测第一信息、第二信息、第三信息以及第四信息是否存在, 并根据检测结果得出结论的功能。也可以仅具检测第一信息、第二信息、第三信息以及第四 信息中任意一种是否存在,并根据检测结果得出结论的功能。
[0046] 参见图1是本发明实施例一种事务执行方法实施例的具体实现步骤。应用于协调 者和多个参与者组成的事务处理系统中,事务操作的对象由多个子对象组成,其中,协调者 中可以不存储子对象,协调者对事务进行协调;所述子对象分别位于不同的所述参与者中。 参与者例如可以是0SD。事务的执行可以包括以下步骤。
[0047] 步骤11,协调者发送操作请求给各个参与者,操作请求中携带有事务ID、操作类 型、协调者中记录的对象版本号Ver Si〇n_T。如果事务的操作类型是写数据,操作请求中还 可以携带待写数据。
[0048] 所述操作请求可以通知参与者准备为对象进行操作。事务ID标记一个事务,这个 被标记的事务与事务所操作的对象关联。
[0049] 例如发送写(Write)命令给N+M个参与者,写命令中携带事务ID,操作类型,协调 者中记录的对象版本号Ver Si〇n_T,操作类型例如是写入、删除。当操作类型是写入时,还可 以在写命令中携带准备写入各个子对象的待写数据。
[0050] 步骤12,协调者发送准备(Prepare)命令给各个参与者,Prepare命令中携带事务 ID、对象ID、协调者中记录的对象的版本号,以及参与者清单。
[0051] 其中,对象ID是事务ID标记的事务所操作的对象的ID,对象的版本号是对象ID 所标记的对象的版本号,参与者清单中记录了所有参与者。
[0052] 步骤13,参与者收到协调者的准备(Prepare)命令后,存储参与者清单,并且为事 务分配资源。参与者分配完资源后,发送准备完成(Prepared)消息给协调者,参与者进入 Prepared阶段。在其他实施例中,如果参与者没有找到这个事务ID或者不符合执行事务的 条件,会发送消息告知协调者。
[0053] 步骤14,协调者进行决策,并发送决策获得到的结论给各个参与者。例如,当所有 参与者都反馈Prepared消息时,决策结论是执行事务,并发送这个结论给各个参与者。当 结论是执行事务时,这个结论可以用Commit消息来表示。在其他情况下,结论也可能是终 止事务。
[0054] 步骤15,收到决策者的结论的参与者,执行结论。然后释放事务占用的资源。
[0055] 现有技术的非阻塞式事务处理方法和步骤11 一步骤14不同。例如,步骤(1)不会 发送本次事务对象ID,操作类型,版本号Version_T中的任意一个。
[0056] 应用本发明实施例,减少了节点之间的信息交互,并且减少了需要记录的日志。相 较于现有技术占用系统资源更少,处理事务耗费的时间更短。
[0057] 下面以协调者发生故障为例,介绍一种当出现意外时一种事务处理实施例。需要 特别说明的是,由于协调者失效后,会从参与者中选出一个作为新的协调者,为了区分失效 的协调者和新选出的协调者,除非特别说明,在步骤21-步骤29及其他相关实施例中,把失 效的协调者称为原协调者,原协调者在失效前可以正常工作;把新选出的协调者称为协调 者。也就是说,步骤11-步骤15中的协调者,在步骤21-步骤29以及步骤37、38中,被称 为原协调者。
[0058] 实施例二
[0059] 本发明实施例中,当协调者发生故障时,可以通过参与者之间查询事务状态和当 前版本号来保证数据的一致性。本发明实施例中,随着版本的更新,版本号可以采用递增规 律,也可以采用递减的规律。在其他实施例中,可以使用例如字母等非数值作为版本号,只 要版本号具有唯一性,并且参与者和协调者约定好伴随着版本的更新,版本号的变化规则 即可。为了方便介绍,后续以随着版本的更新,版本号的数值递增进行举例。每次写操作 导致对象版本递增,并且新版本的内容对旧版本的内容有替代关系,一个新版本的子对象 可以与它的旧版本的子对象写到同一个0SD中,并且覆盖旧版本的子对象。事务操作可以 针对一个对象的所有子对象的操作,这些子对象分布在不同的0SD中。0SD可以包括控制 器和存储介质,控制器用于管理,存储介质用于存储数据,例如硬盘(Hard Disk)、固态硬盘 (SSD)或者磁带(Magnetic Tap)。0SD也可以是存储服务器或者个人电脑。
[0060] 步骤21,分布式存储系统中的原协调者失效后,从参与者中选出一个作为新的协 调者。步骤21可以在步骤13或者步骤14之后执行,例如在执行完步骤14后,参与者在预 设的时间内没有收到协调者的结论,开始执行步骤21。步骤21是可选步骤。
[0061] 新的协调者可以通过选举产生,具体选举办法可以有多种,例如可以直接指定一 个参与者作为协调者,也可以选择编号最小的参与者作为协调者,或者性能最强的参与者 作为协调者。需要说明的是,这个选举出的协调者存储有子对象,因此兼有参与者的部分功 能。除非特别说明,后续步骤中提到的协调者都是指新选出的协调者。
[0062] 本发明实施例中,参与者存储有参与者清单,可以从参与者清单所记录的参与者 中,选举出参与者作为协调者,参与者清单中记录有一个对象的所有子对象所在的0SD,本 步骤从这N+M个参与者中选出一个新的协调者。
[0063] 本发明实施例中,协调者失效是一种泛指,指参与者没有收到协调者发送的结论, 例如可以是协调者无法正常工作、协调者与参与者之间通信中断、或者参与者发生故障。故 障原因可能是软件故障或者硬件故障,在其他实施例中,也可能没有发生物理或者软件故 障,而是由管理员指令选举新的对协调者进行更改。
[0064] 步骤22,协调者向系统中的参与者发送查询消息,查询消息中记录有需要查询的 事务的:事务ID、对象ID以及对象的目标版本号Version_T。
[0065] 事务ID用于标记本次事务的操作,不同事务的事务ID不同,拥有相同事务ID的 所有操作是属于同一个事务的操作。本发明实施例中,这些操作由N+M个0SD分别执行。对 象ID用于标记事务ID所操作的对象,例如可以用对象的文件名作为对象ID,对象的目标版 本号是所述对象ID所标记的对象的目标版本号。如果事务结论是执行事务,则参与者和协 调者上存储的子对象的版本都跃迁到这个目标版本号,或者说对象的版本会跃迁到这个目 标版本号。除了文件名,也可以用其他方式标记对象ID,存储系统可以使用2K字节的数据 量来记录这个标记。查询消息的接收者是参与者清单中,除协调者之外的所有参与者。 [0066] 参与者收到查询消息后,可以查找自身是否有相同事务ID并且相同对象ID的事 务,如果有,则进一步判定参与者的子对象的当前版本号和所述目标版本号是否相同,用版 本的一致性来推理事务的结论。
[0067] 目标版本号可以来自原协调者,例如步骤11。
[0068] 步骤23,接收到查询消息的参与者,根据查询消息中的事务ID,确认本地是否存 在相同的事务。其具体确认方法是是查找本地的事务ID中,是否存在相同的事务ID。如果 存在,则进入步骤24 ;如果不存在,则进入步骤25。
[0069] 步骤24,接收到查询消息的参与者,返回携带有"存在相同事务"信息的响应消息 给协调者,本实施例中,这个响应消息中携带的信息称为第三信息。
[0070] 这个响应消息是在参与者查找到本地存在相同的事务ID后发出,如果在本地没 有查找到具有相同事务ID,不发这个响应消息。响应消息可以告诉决策者,自己已经收到查 询消息,并且成功应答。还可以告诉决策者,自己不知道决策结果,处于等待决策的阶段。
[0071] 步骤25,接收到查询消息的参与者,查找本地是否存在这个对象,也就是确认在所 有本地的对象ID中,是否存在与查询消息中相同的对象ID。如果存在,则进入步骤27 ;如 果不存在,则进入步骤26。
[0072] 步骤26,接收到查询消息的参与者返回响应消息给协调者,告知协调者本地不存 在该事务也不存在该对象,这个信息可以用"不存在该对象"或者"不存在该事务、也不存在 该对象"表示,这个信息可以称为第四信息。
[0073] 步骤27,接收到查询消息的参与者,读取对象ID所标记对象的版本号Version_C, 比较Version_T与Version_C是否相同,并把比较结果作为查询消息的响应消息反馈给协 调者。
[0074] 以版本越新版本号的数值越大为例。⑴如果Version_C>Version_T,则返回给协 调者的信息中携带有"本参与者的对象的版本号比目标版本号更加新"的信息,该消息后文 简称为"版本更新"消息,⑵如果Ver Si〇n_C = VerSi〇n_T,则返回给协调者的信息中携带 有"本参与者的对象的版本号与目标版本号相同"的信息,该消息后文用"版本相同"表示; (3)如果Ver Si〇n_C〈Versi〇n_T ;则返回给协调者的信息中携带有""本参与者的对象的版 本比目标版本号更加日"的信息,该消息可以用"版本更旧"表示。
[0075] 在其他实施例中,由于在后续步骤中"版本更新"和"版本更旧"的处理方式相同, 因此这两种情况可以合并,反馈"版本不同"的消息。也就是说,在本步骤中,可以不用比较 Version_C与Version_T之间的大小,比较版本是否相同即可,返回的响应消息是"版本相 同"或者"版本不同"。
[0076] 也就是说,本步骤中参与者发送的响应消息可能携带第一信息或者第二信息。第 一信息是"版本相同"的信息,信息内容也可以是"Equal";第一信息可以是参与者经过事务 ID判断、对象ID判断、版本号判断后得出;第一信息可以表示所述参与者不存在所述事务 ID,存在所述对象ID,所述参与者中的对象版本号与所述目标版本号相同。第二信息是"版 本不同"的信息,信息内容也可以"Unequal",;第二信息可以是参与者经过事务ID判断、对 象ID判断、版本号判断后得出;第二信息可以表示所述参与者不存在所述事务ID,存在所 述对象ID,所述对象在参与者中的对象版本号与所述目标版本号不同。
[0077] 步骤28,协调者接收到参与者的响应消息后,响应消息携带第一信息、第二信息、 第三信息、第四信息中的一个,根据响应消息的内容得出结论。这个结论需要协调者与参与 者执行。协调者执行结论,并发送结论给系统中的参与者,释放事务在协调者上占用的资 源。协调者和参与者共同执行这个结论,可以保证事务的一致性。
[0078] 结论是终止事务或者执行事务。如果是终止事务,则发出Abort的消息,如果结论 是执行事务,则发出Commit的消息。如果结论是终止事务,执行方式是终止事务。如果结 论是执行事务,则参与者对参与者上的子对象执行事务的一系列操作。
[0079] 需要说明的是,对一些实施例而言,参与者会分别进行事务ID、对象ID、版本号的 判断,因此有可能发出第一信息、第二信息、第三信息、第四信息中的任意一个。但是在其他 实施例中,参与者只其中一项进行检测,例如只检测是不是存在第一信息,因此返回给协调 者的响应消息是第一信息,不包括第二信息、第三信息或者第四信息,相应的,协调者也不 对产生第二信息、第三信息或者第四信息的事务结论。在其他实施例中,也可以检测第一信 息以及第二信息。
[0080] 表1介绍协调者收到参与者反馈的响应消息后,如何根据响应消息携带的信息决 策得到结论,结论是终止事务或者执行事务,终止事务可以用Abort命令表示,执行事务可 以用Commit命令表示。在决策时还可以考虑事务的操作类型,操作类型可以包括新建、修 改以及删除,其中新建和修改都属于写(Write)。操作类型可以来自于原协调者,存储在协 调者、参与者中,例如通过步骤11发送给协调者、参与者。协调者发给参与者的查询消息中 也可以携带事务的操作类型。
[0081] 对操作类型是新建或者修改的事务而言,可以有以下规则中的一个或多个:(a) 如果任一参与者返回"版本相同"的信息,也就是第一信息,说明返回消息的参与者已经执 行了事务,按照事务"同进同退"的原则,则结论是执行事务;(b)如果任一参与者返回"版 本不同"的信息,也就是第二信息,说明已经有参与者进行了 Abort动作,按照事务"同进同 退"的原则,则结论是终止事务;(c)如果所有参与者返回存在该事务的信息,也就是第三信 息,说明协调者并没有给出事务的决策结果,此时所有参与者都处于Prepared状态,虽然 没有参与者完成事务执行,但都已经做好了执行事务的准备,处于能够正常执行事务的状 态,则结论是执行事务;(d)如果任一参与者返回"没有该事务且没有该对象"的信息,也就 是第四信息,则结论是终止事务。
[0082] 对操作类型是删除的事务而言,可以有以下结论中的一个或多个:(a)如果任一 参与者返回"版本不同"的信息,也就是第二信息,说明该参与者已经执行了 Abort动作,则 结论是终止事务;(b)如果所有参与者返回存在该事务的信息,也就是第三信息,说明该参 与者已经执行了删除操作,说明协调者并没有给出事务的决策结果,此时所有参与者都处 于Prepared状态,虽然没有参与者完成事务执行,但都已经做好了执行事务的准备,则结 论是执行事务;(c)如果任一参与者返回"没有该事务且没有该对象"的信息,也就是第四 信息,则结论是执行事务。当操作类型是删除时,参与者不会反馈第一信息,因为如果版本 相同,对象和事务都会删除,参与者无法查找到对象ID、事务ID,所以实际返回的是没有这 个事务且没有这个对象的信息,也就是第四信息。
[0083] 需要说明的是,操作不同时,对于某些信息的可能得出相同的结论。对这些操作信 息,可以不需要判断操作类型,直接根据响应消息携带的信息得出结论。例如,只要任一参 与者返回的响应消息携带有"版本不同"的信息,事务的结论就可以确定为Abort,得出这个 Abort的结论,并不需要知道事务的操作类型。此外,如果任一参与者返回"版本相同"的信 息,也不需要判断操作类型,就可以得出Commit的结论。
[0084] 协调者得出的结论示例参见表1。
[0085]

【权利要求】
1. 一种事务处理方法,应用于协调者,所述协调者和参与者通信连接,事务操作的对象 由多个子对象组成,其中,一个所述子对象位于所述协调者中,其他所述子对象分别位于不 同的所述参与者中,其特征在于,该方法包括: 所述协调者向各个参与者发送查询消息,所述查询消息中携带有事务ID、对象ID以及 所述对象的变化信息,其中,所述事务ID用于标记所述事务,所述对象ID用于标记所述对 象,所述变化信息与所述对象的内容对应,不同所述变化信息的所述对象的内容不同; 所述协调者接收各个参与者对所述查询消息的响应消息; 所述协调者根据所述响应消息得出结论,所述协调者执行所述结论,并将所述结论发 送给所述参与者,所述结论包括下述至少一种: 如果任意一个响应消息中携带有第一信息,则结论为执行事务,其中,所述第一信息表 示所述参与者不存在所述事务ID,存在所述对象ID,所述对象在参与者中的变化信息与所 述对象在协调者中的变化信息相同;或者 如果任意一个响应消息中携带有第二信息,则结论为终止事务,其中,所述第二信息表 示所述参与者不存在所述事务ID,存在所述对象ID,所述对象在参与者中的变化信息与所 述对象在协调者的变化信息不同。
2. 根据权利要求1所述的方法,其特征在于: 所述协调者、参与者都是对象存储设备OSD,所述事务是对所有所述子对象进行读取、 对所有所述子对象删除或者对所有所述子对象写入。
3. 根据权利要求1所述的方法,其特征在于,所述对象在参与者中的变化信息与所述 对象在协调者的变化信息不同,具体是: 所述对象在参与者中的版本比所述对象在协调者的版本新;或者 所述对象在参与者中的版本比所述对象在协调者的版本旧。
4. 根据权利要求1、2或3所述的方法,其特征在于,所述协调者、所述参与者均与原协 调者通信连接,所述原协调者无子对象,所述方法之前进一步包括: 原协调者失效后,选择原参与者中的一个作为所述协调者。
5. 根据权利要求4所述的方法,其特征在于,原协调者失效之前,所述方法进一步包 括: 所述协调者接收原协调者发送所述事务ID、对象ID、对象目标变化信息以及参与者清 单。
6. 根据权利要求4所述的方法,其特征在于,原协调者失效之前,所述方法进一步包 括: 所述原协调者发送操作请求给各个参与者,所述操作请求中携带有所述对象ID,操作 类型、协调者中记录的对象变化信息以及参与者清单,所述参与者清单中记录有所述原参 与者。 所述协调者发送准备命令给各个参与者,命令中携带事务ID、对象ID、协调者中记录 的对象的变化信息,以及参与者清单,以使各个所述原参与者接收存储参与者清单,并为事 务分配资源。
7. 根据权利要求1-6中任一所述的方法,其特征在于: 所述对象的变化信息是对象的版本号。
8. -种事务处理装置,与参与者通信连接,事务操作的对象由多个子对象组成,其中, 一个所述子对象位于所述事务处理装置中,其他所述子对象分别位于不同的所述参与者 中,其特征在于,该装置包括: 查询模块,用于向各个参与者发送查询消息,所述查询消息中携带有事务ID、对象ID 以及所述对象的变化信息,其中所述事务ID用于标记所述事务,所述对象ID用于标记所述 对象,所述变化信息与所述对象的内容对应,不同所述变化信息的所述对象的内容不同; 接收模块,用于接收各个参与者对所述查询消息的响应消息; 决策模块,用于根据所述响应消息得出结论,并将所述结论发送给所述参与者,所述结 论包括下述至少一种: 如果任意一个响应消息中携带有第一信息,则结论为执行事务,其中,所述第一信息表 示所述参与者不存在所述事务ID,存在所述对象ID,所述对象在参与者中的变化信息与所 述对象在协调者中的变化信息相同;或者 如果任意一个响应消息中携带有第二信息,则结论为终止事务,其中,所述第二信息表 示所述参与者不存在所述事务ID,存在所述对象ID,所述对象在参与者中的变化信息与所 述对象在协调者的变化信息不同; 执行模块,用于执行所述决策模块的结论。
9. 根据权利要求8所述的事务处理装置,其特征在于: 所述协调者、参与者都是对象存储设备OSD,所述事务是对所有所述子对象进行读取、 对所有所述子对象删除或者对所有所述子对象写入。
10. 根据权利要求8或9所述的事务处理装置,其特征在于,所述协调者、所述参与者均 与原协调者通信连接,所述原协调者无子对象,所述接收模块进一步包括: 接收原协调发送的所述事务ID、对象ID、对象变化信息以及参与者清单给各个参与 者。
11. 根据权利要求8-10任一所述的事务处理装置,其特征在于: 所述对象的变化信息是对象的版本号。
12. -种协调者,和参与者通信连接,事务操作的对象由多个子对象组成,其中,一个所 述子对象位于所述协调者中,其他所述子对象分别位于不同的所述参与者中,所述协调者 包括处理器以及与处理器通信的存储器,所述存储器用于存储程序指令,所述处理器用于 执行程序指令,该程序指令用于: 向各个参与者发送查询消息,所述查询消息中携带有事务ID、对象ID以及所述对象的 变化信息,其中所述事务ID用于标记所述事务,所述对象ID用于标记所述对象,所述变化 信息与所述对象的内容对应,不同所述变化信息的所述对象的内容不同; 接收各个参与者对所述查询消息的响应消息; 根据所述响应消息得出结论,执行所述结论,并将所述结论发送给所述参与者,所述结 论包括下述至少一种: 如果任意一个响应消息中携带有第一信息,则结论为执行事务,其中,所述第一信息表 示所述参与者不存在所述事务ID,存在所述对象ID,所述对象在参与者中的变化信息与所 述对象在协调者中的变化信息相同;或者 如果任意一个响应消息中携带有第二信息,则结论为终止事务,其中,所述第二信息表 示所述参与者不存在所述事务ID,存在所述对象ID,所述对象在参与者中的变化信息与所 述对象在协调者的变化信息不同。
13. 根据权利要求12所述的协调者,其特征在于: 所述协调者、参与者都是对象存储设备OSD,所述事务是对所有所述子对象进行读取、 对所有所述子对象删除或者对所有所述子对象写入。
14. 根据权利要求12所述的协调者,其特征在于,所述程序指令还用于: 接收原协调者发送的所述事务ID、对象ID、对象变化信息以及参与者清单。
15. 根据权利要求12任一所述的协调者,其特征在于: 所述对象的变化信息是对象的版本号。
16. -种事务处理方法,应用于协调者,所述协调者和参与者通信连接,事务操作的对 象由多个子对象组成,其中,一个所述子对象位于所述协调者中,其他所述子对象分别位于 不同的所述参与者中,其特征在于,该方法包括: 所述协调者向各个参与者发送查询消息,所述查询消息中携带有事务ID以及对象ID, 其中所述事务ID用于标记所述事务,所述对象ID用于标记所述对象,所述变化信息与所述 对象的内容对应,不同所述变化信息的所述对象的内容不同; 所述协调者接收各个参与者对所述查询消息的响应消息,所述响应消息携带所述第五 信息,所述第五消息表示所述参与者不存在所述事务ID,存在所述对象ID,其中,所述第五 信息中还携带有发出响应消息的参与者中所述对象变化信息; 所述协调者根据所述响应消息得出结论,所述协调者执行所述结论,并将所述结论发 送给所述参与者,所述结论包括下述至少一种: 如果所述对象在参与者中的变化信息与所述对象在协调者中的变化信息相同,则结论 为执行事务;或者 如果所述对象在参与者中的变化信息与所述对象在协调者中的变化信息不同,则结论 为终止事务。
17. 根据权利要求16所述的方法,其特征在于: 所述协调者、参与者都是对象存储设备OSD,所述事务是对所有所述子对象进行读取、 对所有所述子对象删除或者对所有所述子对象写入。
18. 根据权利要求16所述的方法,其特征在于,所述对象在参与者中的变化信息与所 述对象在协调者的变化信息不同,具体是: 所述对象在参与者中的版本比所述对象在协调者的版本新;或者 所述对象在参与者中的版本比所述对象在协调者的版本旧。
19. 根据权利要求16、17或18所述的方法,其特征在于,所述协调者、所述参与者均与 原协调者通信连接,所述原协调者无子对象,所述方法之前进一步包括: 原协调者失效后,选择原参与者中的一个作为所述协调者。
20. 根据权利要求19所述的方法,其特征在于,原协调者失效之前,所述方法进一步包 括: 所述协调者接收原协调者发送的所述事务ID、对象ID、对象变化信息以及参与者清 单。
21. 根据权利要求20所述的方法,其特征在于,原协调者失效之前,所述方法进一步包 括: 所述原协调者发送操作请求给各个参与者,所述操作请求中携带有所述对象ID,操作 类型、协调者中记录的对象变化信息以及参与者清单,所述参与者清单中记录有所述原参 与者。 所述协调者发送准备命令给各个参与者,命令中携带事务ID、对象ID、协调者中记录 的对象的变化信息,以及参与者清单,以使各个所述原参与者接收存储参与者清单,并为事 务分配资源。
22. 根据权利要求16-21任一所述的方法,其特征在于: 所述对象的变化信息是对象的版本号。
23. -种事务处理装置,与参与者通信连接,事务操作的对象由多个子对象组成,其中, 一个所述子对象位于所述事务处理装置中,其他所述子对象分别位于不同的所述参与者 中,其特征在于,该装置包括: 查询模块,用于向各个参与者发送查询消息,所述查询消息中携带有所述查询消息中 携带有事务ID以及对象ID,其中所述事务ID用于标记所述事务,所述对象ID用于标记 所述对象,所述变化信息与所述对象的内容对应,不同所述变化信息的所述对象的内容不 同; 接收模块,用于接收各个参与者对所述查询消息的响应消息,所述响应消息携带所述 第五信息,所述表示所述参与者不存在所述事务ID,存在所述对象ID,其中,所述第五信息 中还携带有发出响应消息的参与者中所述对象变化信息; 决策模块,根据所述响应消息得出结论,所述协调者执行所述结论,并将所述结论发送 给所述参与者,所述结论包括下述至少一种: 如果所述对象在参与者中的变化信息与所述对象在协调者中的变化信息相同,则结论 为执行事务;或者 如果所述对象在参与者中的变化信息与所述对象在协调者中的变化信息不同,则结论 为终止事务; 执行模块,用于执行所述决策模块的结论。
24. 根据权利要求23所述的事务处理装置,其特征在于: 所述协调者、参与者都是对象存储设备OSD,所述事务是对所有所述子对象进行读取、 对所有所述子对象删除或者对所有所述子对象写入。
25. 根据权利要求23或24所述的事务处理装置,其特征在于,所述协调者、所述参与者 均与原协调者通信连接,所述原协调者无子对象,所述接收模块进一步用于: 接收原协调发送的所述事务ID、对象ID、对象变化信息以及参与者清单给各个参与 者。
26. 根据权利要求23-25任一所述的事务处理装置,其特征在于: 所述对象的变化信息是对象的版本号。
27. -种协调者,和参与者通信连接,事务操作的对象由多个子对象组成,其中,一个所 述子对象位于所述协调者中,其他所述子对象分别位于不同的所述参与者中,所述协调者 包括处理器以及与处理器通信的存储器,所述存储器用于存储程序指令,所述处理器用于 执行程序指令,该程序指令用于: 向各个参与者发送查询消息,所述查询消息中携带有事务ID以及对象ID,其中所述事 务ID用于标记所述事务,所述对象ID用于标记所述对象,所述变化信息与所述对象的内容 对应,不同所述变化信息的所述对象的内容不同; 接收各个参与者对所述查询消息的响应消息,所述响应消息携带所述第五信息,所述 表示所述参与者不存在所述事务ID,存在所述对象ID,其中,所述第五信息中还携带有发 出响应消息的参与者中所述对象变化信息; 根据所述响应消息得出结论,所述协调者执行所述结论,并将所述结论发送给所述参 与者,所述结论包括下述至少一种: 如果所述对象在参与者中的变化信息与所述对象在协调者中的变化信息相同,则结论 为执行事务;或者 如果所述对象在参与者中的变化信息与所述对象在协调者中的变化信息不同,则结论 为终止事务。
28. 根据权利要求27所述的协调者,其特征在于: 所述协调者、参与者都是对象存储设备OSD,所述事务是对所有所述子对象进行读取、 对所有所述子对象删除或者对所有所述子对象写入。
29. 根据权利要求27所述的协调者,其特征在于,所述程序指令还用于: 接收原协调者发送的所述事务ID、对象ID、对象变化信息以及参与者清单。
30. 根据权利要求27任一所述的协调者,其特征在于: 所述对象的变化信息是对象的版本号。
【文档编号】G06F9/44GK104220982SQ201380002529
【公开日】2014年12月17日 申请日期:2013年11月5日 优先权日:2013年10月29日
【发明者】方新 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1