CN106997305A - 一种事务处理方法与装置 - Google Patents
一种事务处理方法与装置 Download PDFInfo
- Publication number
- CN106997305A CN106997305A CN201710113569.2A CN201710113569A CN106997305A CN 106997305 A CN106997305 A CN 106997305A CN 201710113569 A CN201710113569 A CN 201710113569A CN 106997305 A CN106997305 A CN 106997305A
- Authority
- CN
- China
- Prior art keywords
- participant
- coordinator
- affairs
- conclusion
- change information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
一种事务处理方法与装置。本发明提供了一种应用于协调者,所述协调者和参与者通信连接,该方法包括:所述协调者向各个参与者发送查询消息;所述协调者根据所述响应消息得出结论,所述协调者执行所述结论,并将所述结论发送给所述参与者,所述结论包括下述至少一种:如果任意一个响应消息中携带有第一信息,则结论为执行事务,其中,所述第一信息表示所述参与者不存在所述事务ID,存在所述对象ID,所述对象在参与者中的变化信息与所述对象在协调者中的变化信息相同;如果任意一个响应消息中携带有第二信息,则结论为终止事务,其中,所述第二信息表示所述参与者不存在所述事务ID,存在所述对象ID,所述对象在参与者中的变化信息与所述对象在协调者的变化信息不同。
Description
技术领域
本发明涉及信息技术领域,特别涉及一种事务处理方法和装置。
背景技术
对象存储系统(Object-Based Storage System)是一种分布式存储系统,由多个基于对象的存储设备OSD(Object-based Storage Device)组成,OSD通过网络互连,OSD也可以称为对象存储系统中的节点。在对象存储系统中,以对象(Object)作为最基本的被存储内容单元,对象中包含了数据以及数据的属性信息。数据指的是对象中存储的内容,例如视频文件,音乐文件等,数据的的属性信息例如文件的大小,版本信息等。
为了存储的对象的可靠性,一般会将一个对象存储到不同的OSD上,这样,即使是一部分OSD出现故障,也不影响对象的读写操作。这样,就提升数据的可靠性。由于同一个对象需要备份多份后存储到不同节点,也就说对象是跨多个OSD节点来存储,这些备份数据也可以称为副本。为了保证对象存储的一致性要求,对象的写操作需要通过事务来保证。事务可以理解成是一组面向数据变更的操作,这组操中,除非所有操作都成功,否则不会对数据进行变更。这样就保证了同一个对象在不同OSD上的副本是相同的,避免了部分副本进行了变更部分副本没有变更。
事务包含一系列操作集合,这些操作经常由多个节点并行执行,使分布在多个节点的数据从一个一致状态转换到另一个一致状态(在分布式对象存储系统中,意味着多个节点中的相同对象拥有相同的版本号),组成事务的一系列操作要么全部执行,要么全部不执行,从而保持节点上数据状态的一致性。在非存储领域,也同样存在需要使用事务的情形。
现有的两阶段提交协议(Two-phase Commitment Protocol,2PC),可以保证分布式事务提交的原子性。它把分布式事务的某一个OSD指定为协调者(Coordinator),所有其他OSD指定为参与者(Participants)。只有协调者才有掌握提交或撤销事务的决定权,并在做出提交或者撤销事务的结论后,把结论发给参与者。如果结论是提交事务,就发送Commit消息;如果结论是终止事务,就发送Abort消息。而各个参与者接收协调者的结论,按照结论在其本地数据库中执行操作;参与者还可以向协调者提出撤销或提交子事务的意向。
在参与者等待协调者的结论时,如果协调者失效,参与者会长时间等待协调者的结论。在等待期间,各个参与者的事务无法结束,也无法释放占用的资源,会造成了阻塞。为了避免阻塞,现有技术提出了一种状态确认技术,通过参与者查询其他参与者的事务状态,确认自身是否需要执行事务,但是在这种方法中,参与者之间交互过程过多,造成系统性能下降。
即使协调者没有失效,如何通过读取参与者的信息来获得事务的结论,也是一个需要解决的问题。
发明内容
本发明提供一种事务处理方法,可以通过读取参与者的信息,获得事务结论。
第一方面,本发明实施例提供一种事务处理方法,应用于协调者,所述协调者和参与者通信连接,事务操作的对象由多个子对象组成,其中,一个所述子对象位于所述协调者中,其他所述子对象分别位于不同的所述参与者中,该方法包括:所述协调者向各个参与者发送查询消息,所述查询消息中携带有事务ID、对象ID以及所述对象的变化信息,其中所述事务ID用于标记所述事务,所述对象ID用于标记所述对象,所述变化信息与所述对象的内容对应,不同所述变化信息的所述对象的内容不同;所述协调者接收各个参与者对所述查询消息的响应消息;所述协调者根据所述响应消息得出结论,所述协调者执行所述结论,并将所述结论发送给所有所述参与者,所述结论包括下述至少一种:如果任意一个响应消息中携带有第一信息,则结论为执行事务,其中,所述第一信息表示所述参与者不存在所述事务ID,存在所述对象ID,所述对象在参与者中的变化信息与所述对象在协调者中的变化信息相同;或者,如果任意一个响应消息中携带有第二信息,则结论为终止事务,其中,所述第二信息表示所述参与者不存在所述事务ID,存在所述对象ID,所述对象在参与者中的变化信息与所述对象在协调者的变化信息不同。
在第一方面的第一种实现方式中,所述结论还包括下述至少一种:如果所有响应消息中均携带有第三信息,则结论包括为执行事务,其中,所述第三信息表示所述参与者存在所述事务ID;如果任意一个响应消息中携带有第四信息,则结论为执行事务,其中,第四信息表示所述参与者不存在所述事务ID,并且所述参与者不存在所述对象ID。
第二方面,本发明实施例提供一种事务处理装置,与参与者通信连接,事务操作的对象由多个子对象组成,其中,一个所述子对象位于所述事务处理装置中,其他所述子对象分别位于不同的所述参与者中,该装置包括:查询模块,用于向各个参与者发送查询消息,所述查询消息中携带有事务ID、对象ID以及所述对象的变化信息,其中所述事务ID用于标记所述事务,所述对象ID用于标记所述对象,所述变化信息与所述对象的内容对应,不同所述变化信息的所述对象的内容不同;接收模块,用于接收各个参与者对所述查询消息的响应消息;决策模块,用于根据所述响应消息得出结论,并将所述结论发送给所有所述参与者,所述结论包括下述至少一种:如果任意一个响应消息中携带有第一信息,则结论为执行事务,其中,所述第一信息表示所述参与者存在所述事务ID,存在所述对象ID,所述对象在参与者中的变化信息与所述对象在协调者中的变化信息相同;或者,如果任意一个响应消息中携带有第二信息,则结论为终止事务,其中,所述第二信息表示所述参与者存在所述事务ID,存在所述对象ID,所述对象在参与者中的变化信息与所述对象在协调者的变化信息不同;执行模块,用于执行所述决策模块的结论。
在第二方面的第一种实现方式中,所述结论还包括下述至少一种:如果所有响应消息中均携带有第三信息,则结论包括为执行事务,其中,所述第三信息表示所述参与者存在所述事务ID;如果任意一个响应消息中携带有第四信息,则结论为执行事务,其中,第四信息表示所述参与者不存在所述事务ID,并且所述参与者不存在所述对象ID。
第三方面,本发明实施例提供一种事务处理方法,应用于协调者,所述协调者和参与者通信连接,事务操作的对象由多个子对象组成,其中,一个所述子对象位于所述协调者中,其他所述子对象分别位于不同的所述参与者中,该方法包括:所述协调者向各个参与者发送查询消息,所述查询消息中携带有事务ID以及对象ID,其中所述事务ID用于标记所述事务,所述对象ID用于标记所述对象,所述变化信息与所述对象的内容对应,不同所述变化信息的所述对象的内容不同;所述协调者接收各个参与者对所述查询消息的响应消息,所述响应消息携带所述第五信息,所述第五消息表示所述参与者不存在所述事务ID,存在所述对象ID,其中,所述第五信息中还携带有发出响应消息的参与者中所述对象变化信息;所述协调者根据所述响应消息得出结论,所述协调者执行所述结论,并将所述结论发送给所有所述参与者,所述结论包括下述至少一种:如果所述对象在参与者中的变化信息与所述对象在协调者中的变化信息相同,则结论为执行事务;或者,如果所述对象在参与者中的变化信息与所述对象在协调者中的变化信息不同,则结论为终止事务。
在第三方面的第一种实现方式中,所述结论还包括下述至少一种:如果所有响应消息中均携带有第三信息,则结论包括为执行事务,其中,所述第三信息表示所述参与者存在所述事务ID;如果任意一个响应消息中携带有第四信息,则结论为执行事务,其中,第四信息表示所述参与者不存在所述事务ID,并且所述参与者不存在所述对象ID。
第四方面,本发明实施例一种事务处理装置,与参与者通信连接,事务操作的对象由多个子对象组成,其中,一个所述子对象位于所述事务处理装置中,其他所述子对象分别位于不同的所述参与者中,该装置包括:查询模块,用于向各个参与者发送查询消息,所述查询消息中携带有所述查询消息中携带有事务ID以及对象ID,其中所述事务ID用于标记所述事务,所述对象ID用于标记所述对象;接收模块,用于接收各个参与者对所述查询消息的响应消息,所述响应消息携带所述第五信息,所述表示所述参与者不存在所述事务ID,存在所述对象ID,其中,所述第五信息中还携带有发出响应消息的参与者中所述对象变化信息;决策模块,根据所述响应消息得出结论,所述协调者执行所述结论,所述变化信息与所述对象的内容对应,不同所述变化信息的所述对象的内容不同;并将所述结论发送给所有所述参与者,所述结论包括下述至少一种:如果所述对象在参与者中的变化信息与所述对象在协调者中的变化信息相同,则结论为执行事务;或者,如果所述对象在参与者中的变化信息与所述对象在协调者中的变化信息不同,则结论为终止事务;执行模块,用于执行所述决策模块的结论。
在第四方面的第一种实现方式中,所述结论还包括下述至少一种:如果所有响应消息中均携带有第三信息,则结论包括为执行事务,其中,所述第三信息表示所述参与者存在所述事务ID;如果任意一个响应消息中携带有第四信息,则结论为执行事务,其中,第四信息表示所述参与者不存在所述事务ID,并且所述参与者不存在所述对象ID。
上述各种方面中一种实现方式中,对象的变化信息可以是对象的版本号。
应用本发明实施例提供的方法,通过检测参与者的对象的变化信息,可以获得事务的结论,提高事务处理的效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,下面描述中的附图仅仅是本发明的一些实施例,还可以根据这些附图获得其他的附图。
图1是本发明实施例一种事务处理方法流程图;
图2是本发明实施例一种事务处理方法流程图;
图3是本发明实施例一种事务处理装置示意图;
图4是本发明实施例一种事务处理方法流程图;
图5是本发明实施例一种协调者结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例所获得的所有其他实施例,都属于本发明保护的范围。
事务是一系列操作的一个集合,事务可以包含多个操作,但是其包含的所有操作都是不可分割的,要么在执行所有操作,要么不执行任何操作。可以把对N+M个节点的操作作为一个事务,对任意一个或者多个节点进行操作,那么其他节点也需要执行同样类型的操作。
事务由协调者和参与者共同执行,协调者通过决策产生结论,参与者执行协调者的结论,参与者还可以为协调者提供决策依据。
两阶段提交协议中,系统一般包含两类节点:一类为协调者
(Coordinator),通常一个事务中只有一个;另一类为参与者(Participants),可以有多个。每个节点都可以记录写前日志(Write-ahead Log)并持久性存储,即使节点发生故障日志也不会丢失。一种可行的事务协商方法步骤如下:(1)协调者发送操作请求给各个参与者,操作请求可以是同意执行事务或者不同意执行事务,这个操作请求用于与参与者进行协商,并不需要被参与者执行;(2)参与者收到协调者操作请求后,返回响应消息,响应消息中携带各个参与者是否赞同协调者的操作请求,例如响应消息可以是同意协调者的操作请求、或者拒绝协调者的操作请求,并且参与者进入等待阶段,等待协调者的决策;(3)协调者汇总各个参与者的响应消息进行决策,得出结论,并把结论发给各个参与者;(4)各个参与者收到结论后执行这个结论,然后释放事务占用的资源。
在上述事务的协商处理过程中,有可能发生意外情况,例如步骤(4)也可能是协调者发生故障,导致发往一部分参与者的结论没有成功发出,或者参与者自身故障没有接收到结论,或者其他原因导致部分参与者没有收到结论。这些导致部分参与者没有收到结论的情况,我们统称为协调者失效。协调者失效,导致部分参与者执行了事务的结论;另一部分参与者没有执行事务的结论。这些没有收到结论的参与者会一直停留在等待阶段,或者称为准备(Prepared)状态,事务占用的资源无法及时释放,这种现象我们称为阻塞。
现有技术中,为了避免阻塞,参与者在收到协调者的决策结论后,不能释放事务占用的资源。上述步骤(4)替换为(5)和(6),其中:(5)参与者执行结论后,还需要用日志的方式把自己收到的结论记录下来,然后向其他参与者发送消息,以通知其他参与者自己已经收到了结论;以及(6)当某个参与者收到其他所有参与者的结论后,证明没有意外发生,因此可以释放事务占用的资源,并且再次记录操作日志。
现有技术虽然可以一定程度上解决阻塞的问题,但为了避免发生意外时系统阻塞,不论是否发生意外,每次执行事务都要执行(5)(6)中的协商、记录日志的操作,对系统资源造成了耗费。
为了方便理解,本发明实施例以存储系统,尤其是一种分布式对象存储系统进行举例,但本发明不限于分布式存储,也同样适用于其他需要使用事务的技术领域。在存储领域中,事务可以是写入数据、删除数据或者修改数据。对象是事务操作的目标,例如一段数据。这个数据可以用文件名、流水号、路径、逻辑地址、物理地址进行标记。例如“新建”的事务,可以把新数据写入目标数据中;“删除”事务可以删除目标数据。
需要说明的是,对象存储是分布式存储的一种,本发明实施例可以应用在对象存储中,也可以应用在其他分布式存储中,本发明实施例中的对象并不用于将本发明实施例限制在对象存储的领域。在分布式存储中,被存储的数据都可以称为对象,例如可以是文件、文字、图片、数据流以及计算机代码中的某一种或者某一种的一部分。本发明实施例中,对象是可以被事务所操作的数据。本发明实施例可以把一个数据拆分成多个子数据块,每个子数据块存储到一个存储节点中。存储节点可以是物理上分离的,也可以是逻辑上分离的,存储节点例如可以是存储集群、存储服务器、硬盘、硬盘分区、文件夹等。
本发明实施例中,对象的版本号可以标记对象是否发生变化,对象的版本号用在组成对象的各个子对象中。例如创建或者修改了一个对象,对象会拥有一个新的版本号,对象的子对象版本号也会相应更新。版本号可以标记对象中子对象的一致性。
在其他实施例中,除了版本号,还可以用其他信息来标记对象是否发生变化,例如对象的名称、对象占用存储空间的大小、对象的属性。可以记录所述对象的内容是否发生改变的信息,统称为对象的变化信息,所述变化信息与所述对象的内容对应,不同变化信息的所述对象的内容不同。任意子对象发生改变,则相当于整个对象的内容发生改变,相应的,整个对象的变化信息都需要更新。本发明实施例中,为了方便说明,以对象的版本号为例介绍对象的变化信息。
将一个数据文件对象划分为N个等长的业务数据块,不足的部分可以使用0来补齐。对这N个数据块进行编码计算生成M个校验数据块,将这个N+M个数据块存放到N+M个不同的节点上,其中,N和M都是自然数。任意M份数据故障,都可以利用剩余的N份数据计算出来发生故障的数据,这种数据恢复技术可以称为纠错码(Erasure Code,EC)。我们可以把N+M个数据组成的集合称为对象,N+M个数据中的任意一个称为子对象。
这N+M个子对象是相互关联的,任意一个进行了更新,余下的所有子对象也需要更新,以保持子对象之间的一致性。这N+M个子对象的一致性可以通过事务来保证。在把对象拆分成N个子对象之前,可以为这个对象分配版本号,这个对象的版本号会记录到他生成的N+M个子对象中。因此通过对象的版本号来标识一致性,如果N+M个子对象是一致的,则他们拥有相同的版本号;如果部分节点上的数据与其他节点上的数据的版本号不同,则意味着数据不一致。
造成版本号不同的原因有很多,例如某个节点出现了一段时间的故障,在故障期间这个节点错过了一些写入子对象的操作,那么这个发生过故障的节点上的子对象,就会和其他没有做过写操做的节点上的子对象不一致,并且版本号不同。客户端从分布式存储系统中读取这些子对象时,可以发现这些不一致的子对象,可以利用N份版本一致的子对象通过错误校验的方式对不一致的子对象进行恢复,恢复出与这N份子对象一致的子对象。
应用本发明实施例提供的方法,当原协调者失效后,从参与者中重新选出新的协调者,新的协调者通过检测其他参与者的对象的变化信息,可以得出事务的结论。而现有技术中,为了应对协调者失效时出现阻塞,不论协调者是否失效,都采用同样的处理流程来获得事务的结论。而这个流程比本申请中事务没有失效时,所采用的事务处理技术更加复杂。因此本申请的总体效率更高,通过提供一种异常(例如协调者失效)处理机制,简化了没有发生异常时,事务处理的流程。
即使原协调者没有失效,本申请方案也提出了一种新的协商机制,可以通过协商得出事务结论。实施例一
本发明实施例提供一种事务处理方法,应用于协调者,所述协调者和参与者通信连接,事务操作的对象由多个子对象组成,其中,一个所述子对象位于所述协调者中,其他所述子对象分别位于不同的所述参与者中,该方法包括:所述协调者向各个参与者发送查询消息,所述查询消息中携带有事务ID、对象ID以及所述对象的版本号,其中所述事务ID用于标记所述事务,所述对象ID用于标记所述对象;所述协调者接收各个参与者对所述查询消息的响应消息;所述协调者根据所述响应消息得出结论,所述协调者执行所述结论,并将所述结论发送给所有所述参与者。
所述结论包括下述至少一种:如果任意一个响应消息中携带有第一信息,则结论为执行事务,其中,所述第一信息表示所述参与者不存在所述事务ID,存在所述对象ID,所述对象在参与者中的版本号与所述对象在协调者中的版本号相同;或者,如果任意一个响应消息中携带有第二信息,则结论为终止事务,其中,所述第二信息表示所述参与者不存在所述事务ID,存在所述对象ID,所述对象在参与者中的版本号与所述对象在协调者的版本号不同。
所述结论还包括下述至少一种:如果所有响应消息中均携带有第三信息,则结论包括为执行事务,其中,所述第三信息表示所述参与者存在所述事务ID;如果任意一个响应消息中携带有第四信息,则结论为执行事务,其中,第四信息表示所述参与者不存在所述事务ID,并且所述参与者不存在所述对象ID。
协调者可以同时具有检测第一信息以及第二信息是否存在,并根据检测结果得出结论的功能。也可以同时具有检测第一信息、第二信息、第三信息以及第四信息是否存在,并根据检测结果得出结论的功能。也可以仅具检测第一信息、第二信息、第三信息以及第四信息中任意一种是否存在,并根据检测结果得出结论的功能。
参见图1是本发明实施例一种事务执行方法实施例的具体实现步骤。应用于协调者和多个参与者组成的事务处理系统中,事务操作的对象由多个子对象组成,其中,协调者中可以不存储子对象,协调者对事务进行协调;所述子对象分别位于不同的所述参与者中。参与者例如可以是OSD。事务的执行可以包括以下步骤。
步骤11,协调者发送操作请求给各个参与者,操作请求中携带有事务ID、操作类型、协调者中记录的对象版本号Version_T。如果事务的操作类型是写数据,操作请求中还可以携带待写数据。
所述操作请求可以通知参与者准备为对象进行操作。事务ID标记一个事务,这个被标记的事务与事务所操作的对象关联。
例如发送写(Write)命令给N+M个参与者,写命令中携带事务ID,操作类型,协调者中记录的对象版本号Version_T,操作类型例如是写入、删除。当操作类型是写入时,还可以在写命令中携带准备写入各个子对象的待写数据。
步骤12,协调者发送准备(Prepare)命令给各个参与者,Prepare命令中携带事务ID、对象ID、协调者中记录的对象的版本号,以及参与者清单。
其中,对象ID是事务ID标记的事务所操作的对象的ID,对象的版本号是对象ID所标记的对象的版本号,参与者清单中记录了所有参与者。
步骤13,参与者收到协调者的准备(Prepare)命令后,存储参与者清单,并且为事务分配资源。参与者分配完资源后,发送准备完成(Prepared)消息给协调者,参与者进入Prepared阶段。在其他实施例中,如果参与者没有找到这个事务ID或者不符合执行事务的条件,会发送消息告知协调者。
步骤14,协调者进行决策,并发送决策获得到的结论给各个参与者。例如,当所有参与者都反馈Prepared消息时,决策结论是执行事务,并发送这个结论给各个参与者。当结论是执行事务时,这个结论可以用Commit消息来表示。在其他情况下,结论也可能是终止事务。
步骤15,收到决策者的结论的参与者,执行结论。然后释放事务占用的资源。
现有技术的非阻塞式事务处理方法和步骤11—步骤14不同。例如,步骤(1)不会发送本次事务对象ID,操作类型,版本号Version_T中的任意一个。
应用本发明实施例,减少了节点之间的信息交互,并且减少了需要记录的日志。相较于现有技术占用系统资源更少,处理事务耗费的时间更短。
下面以协调者发生故障为例,介绍一种当出现意外时一种事务处理实施例。需要特别说明的是,由于协调者失效后,会从参与者中选出一个作为新的协调者,为了区分失效的协调者和新选出的协调者,除非特别说明,在步骤21-步骤29及其他相关实施例中,把失效的协调者称为原协调者,原协调者在失效前可以正常工作;把新选出的协调者称为协调者。也就是说,步骤11-步骤15中的协调者,在步骤21-步骤29以及步骤37、38中,被称为原协调者。
实施例二
本发明实施例中,当协调者发生故障时,可以通过参与者之间查询事务状态和当前版本号来保证数据的一致性。本发明实施例中,随着版本的更新,版本号可以采用递增规律,也可以采用递减的规律。在其他实施例中,可以使用例如字母等非数值作为版本号,只要版本号具有唯一性,并且参与者和协调者约定好伴随着版本的更新,版本号的变化规则即可。为了方便介绍,后续以随着版本的更新,版本号的数值递增进行举例。每次写操作导致对象版本递增,并且新版本的内容对旧版本的内容有替代关系,一个新版本的子对象可以与它的旧版本的子对象写到同一个OSD中,并且覆盖旧版本的子对象。事务操作可以针对一个对象的所有子对象的操作,这些子对象分布在不同的OSD中。OSD可以包括控制器和存储介质,控制器用于管理,存储介质用于存储数据,例如硬盘(Hard Disk)、固态硬盘(SSD)或者磁带(Magnetic Tap)。OSD也可以是存储服务器或者个人电脑。
步骤21,分布式存储系统中的原协调者失效后,从参与者中选出一个作为新的协调者。步骤21可以在步骤13或者步骤14之后执行,例如在执行完步骤14后,参与者在预设的时间内没有收到协调者的结论,开始执行步骤21。步骤21是可选步骤。
新的协调者可以通过选举产生,具体选举办法可以有多种,例如可以直接指定一个参与者作为协调者,也可以选择编号最小的参与者作为协调者,或者性能最强的参与者作为协调者。需要说明的是,这个选举出的协调者存储有子对象,因此兼有参与者的部分功能。除非特别说明,后续步骤中提到的协调者都是指新选出的协调者。
本发明实施例中,参与者存储有参与者清单,可以从参与者清单所记录的参与者中,选举出参与者作为协调者,参与者清单中记录有一个对象的所有子对象所在的OSD,本步骤从这N+M个参与者中选出一个新的协调者。
本发明实施例中,协调者失效是一种泛指,指参与者没有收到协调者发送的结论,例如可以是协调者无法正常工作、协调者与参与者之间通信中断、或者参与者发生故障。故障原因可能是软件故障或者硬件故障,在其他实施例中,也可能没有发生物理或者软件故障,而是由管理员指令选举新的对协调者进行更改。
步骤22,协调者向系统中的参与者发送查询消息,查询消息中记录有需要查询的事务的:事务ID、对象ID以及对象的目标版本号Version_T。
事务ID用于标记本次事务的操作,不同事务的事务ID不同,拥有相同事务ID的所有操作是属于同一个事务的操作。本发明实施例中,这些操作由N+M个OSD分别执行。对象ID用于标记事务ID所操作的对象,例如可以用对象的文件名作为对象ID,对象的目标版本号是所述对象ID所标记的对象的目标版本号。如果事务结论是执行事务,则参与者和协调者上存储的子对象的版本都跃迁到这个目标版本号,或者说对象的版本会跃迁到这个目标版本号。除了文件名,也可以用其他方式标记对象ID,存储系统可以使用2K字节的数据量来记录这个标记。查询消息的接收者是参与者清单中,除协调者之外的所有参与者。
参与者收到查询消息后,可以查找自身是否有相同事务ID并且相同对象ID的事务,如果有,则进一步判定参与者的子对象的当前版本号和所述目标版本号是否相同,用版本的一致性来推理事务的结论。
目标版本号可以来自原协调者,例如步骤11。
步骤23,接收到查询消息的参与者,根据查询消息中的事务ID,确认本地是否存在相同的事务。其具体确认方法是是查找本地的事务ID中,是否存在相同的事务ID。如果存在,则进入步骤24;如果不存在,则进入步骤25。
步骤24,接收到查询消息的参与者,返回携带有“存在相同事务”信息的响应消息给协调者,本实施例中,这个响应消息中携带的信息称为第三信息。
这个响应消息是在参与者查找到本地存在相同的事务ID后发出,如果在本地没有查找到具有相同事务ID,不发这个响应消息。响应消息可以告诉决策者,自己已经收到查询消息,并且成功应答。还可以告诉决策者,自己不知道决策结果,处于等待决策的阶段。
步骤25,接收到查询消息的参与者,查找本地是否存在这个对象,也就是确认在所有本地的对象ID中,是否存在与查询消息中相同的对象ID。如果存在,则进入步骤27;如果不存在,则进入步骤26。
步骤26,接收到查询消息的参与者返回响应消息给协调者,告知协调者本地不存在该事务也不存在该对象,这个信息可以用“不存在该对象”或者“不存在该事务、也不存在该对象”表示,这个信息可以称为第四信息。
步骤27,接收到查询消息的参与者,读取对象ID所标记对象的版本号Version_C,比较Version_T与Version_C是否相同,并把比较结果作为查询消息的响应消息反馈给协调者。
以版本越新版本号的数值越大为例。(1)如果Version_C>Version_T,则返回给协调者的信息中携带有“本参与者的对象的版本号比目标版本号更加新”的信息,该消息后文简称为“版本更新”消息,(2)如果Version_C=Version_T,则返回给协调者的信息中携带有“本参与者的对象的版本号与目标版本号相同”的信息,该消息后文用“版本相同”表示;(3)如果Version_C<Version_T;则返回给协调者的信息中携带有““本参与者的对象的版本比目标版本号更加旧”的信息,该消息可以用“版本更旧”表示。
在其他实施例中,由于在后续步骤中“版本更新”和“版本更旧”的处理方式相同,因此这两种情况可以合并,反馈“版本不同”的消息。也就是说,在本步骤中,可以不用比较Version_C与Version_T之间的大小,比较版本是否相同即可,返回的响应消息是“版本相同”或者“版本不同”。
也就是说,本步骤中参与者发送的响应消息可能携带第一信息或者第二信息。第一信息是“版本相同”的信息,信息内容也可以是“Equal”;第一信息可以是参与者经过事务ID判断、对象ID判断、版本号判断后得出;第一信息可以表示所述参与者不存在所述事务ID,存在所述对象ID,所述参与者中的对象版本号与所述目标版本号相同。第二信息是“版本不同”的信息,信息内容也可以“Unequal”,;第二信息可以是参与者经过事务ID判断、对象ID判断、版本号判断后得出;第二信息可以表示所述参与者不存在所述事务ID,存在所述对象ID,所述对象在参与者中的对象版本号与所述目标版本号不同。
步骤28,协调者接收到参与者的响应消息后,响应消息携带第一信息、第二信息、第三信息、第四信息中的一个,根据响应消息的内容得出结论。这个结论需要协调者与参与者执行。协调者执行结论,并发送结论给系统中的参与者,释放事务在协调者上占用的资源。协调者和参与者共同执行这个结论,可以保证事务的一致性。
结论是终止事务或者执行事务。如果是终止事务,则发出Abort的消息,如果结论是执行事务,则发出Commit的消息。如果结论是终止事务,执行方式是终止事务。如果结论是执行事务,则参与者对参与者上的子对象执行事务的一系列操作。
需要说明的是,对一些实施例而言,参与者会分别进行事务ID、对象ID、版本号的判断,因此有可能发出第一信息、第二信息、第三信息、第四信息中的任意一个。但是在其他实施例中,参与者只其中一项进行检测,例如只检测是不是存在第一信息,因此返回给协调者的响应消息是第一信息,不包括第二信息、第三信息或者第四信息,相应的,协调者也不对产生第二信息、第三信息或者第四信息的事务结论。在其他实施例中,也可以检测第一信息以及第二信息。
表1介绍协调者收到参与者反馈的响应消息后,如何根据响应消息携带的信息决策得到结论,结论是终止事务或者执行事务,终止事务可以用Abort命令表示,执行事务可以用Commit命令表示。在决策时还可以考虑事务的操作类型,操作类型可以包括新建、修改以及删除,其中新建和修改都属于写(Write)。操作类型可以来自于原协调者,存储在协调者、参与者中,例如通过步骤11发送给协调者、参与者。协调者发给参与者的查询消息中也可以携带事务的操作类型。
对操作类型是新建或者修改的事务而言,可以有以下规则中的一个或多个:(a)如果任一参与者返回“版本相同”的信息,也就是第一信息,说明返回消息的参与者已经执行了事务,按照事务“同进同退”的原则,则结论是执行事务;(b)如果任一参与者返回“版本不同”的信息,也就是第二信息,说明已经有参与者进行了Abort动作,按照事务“同进同退”的原则,则结论是终止事务;(c)如果所有参与者返回存在该事务的信息,也就是第三信息,说明协调者并没有给出事务的决策结果,此时所有参与者都处于Prepared状态,虽然没有参与者完成事务执行,但都已经做好了执行事务的准备,处于能够正常执行事务的状态,则结论是执行事务;(d)如果任一参与者返回“没有该事务且没有该对象”的信息,也就是第四信息,则结论是终止事务。
对操作类型是删除的事务而言,可以有以下结论中的一个或多个:(a)如果任一参与者返回“版本不同”的信息,也就是第二信息,说明该参与者已经执行了Abort动作,则结论是终止事务;(b)如果所有参与者返回存在该事务的信息,也就是第三信息,说明该参与者已经执行了删除操作,说明协调者并没有给出事务的决策结果,此时所有参与者都处于Prepared状态,虽然没有参与者完成事务执行,但都已经做好了执行事务的准备,则结论是执行事务;(c)如果任一参与者返回“没有该事务且没有该对象”的信息,也就是第四信息,则结论是执行事务。当操作类型是删除时,参与者不会反馈第一信息,因为如果版本相同,对象和事务都会删除,参与者无法查找到对象ID、事务ID,所以实际返回的是没有这个事务且没有这个对象的信息,也就是第四信息。
需要说明的是,操作不同时,对于某些信息的可能得出相同的结论。对这些操作信息,可以不需要判断操作类型,直接根据响应消息携带的信息得出结论。例如,只要任一参与者返回的响应消息携带有“版本不同”的信息,事务的结论就可以确定为Abort,得出这个Abort的结论,并不需要知道事务的操作类型。此外,如果任一参与者返回“版本相同”的信息,也不需要判断操作类型,就可以得出Commit的结论。
协调者得出的结论示例参见表1。
表1
另外需要说明的是,本实施例中查询消息携带有事务ID、对象ID、目标版本号三项内容。由于部分结论不需要进行多次判断即得出,例如当所有参与者返回的响应消息都携带有“存在这个事务”时,已经足以得出执行事务的结论。不需再进一步判断参与者中是否存在事务ID,也不需要判断版本号是否相同。同样的,当任意参与者返回的响应消息携带“存在该事务,并且不存在该对象”信息时,所有参与者都不需要进一步判断参与者的对象版本是否和协调者提供的对象目标版本相同。因此,协调者发送给参与者的的查询消息,可以仅发送事务ID,也可以发送事务ID以及对象ID,也可以发送事务ID、对象ID以及对象的目标版本号。
此外,查询消息还可以分阶段发送:协调者第一次发送事务ID给参与者;当收到的响应消息不足以得出结论时,协调者再发送对象ID给参与者;如果对象ID的响应消息仍然无法得出结论,协调者再继续发送版本号信息给参与者。这些发送方法可以减少查询消息的数据量。
由于当前的协调者是由选举产生,在选举前,协调者自己也是参与者的角色。因此协调者兼有参与者的责任,协调者除了把结论发送给参与者由参与者执行,协调者自己也需要像参与者一样执行结论。本实施例中,如果结论是执行事务,则协调者需要执行事务的一系列操作,例如对协调者上存储的子对象进行删除操作的所需要的一系列操作、或写数据操作一系列操作。执行的方式可以是OSD的控制器生成对存储介质进行操作指令,例如删除存储介质上的数据的指令。在生成对存储介质进行操作的指令后,可以记录日志,这个日志可以是Committed;在操作完成时,也就是控制器完成操作时,可以记录日志,这个日志可以是Cleared。然后释放这个事务所占用的资源,例如存储器资源。启动执行命令的过程,可以称为提交事务。
步骤29,参与者在收到协调者的结论后,执行结论。执行结论后,可以释放事务占用的资源。对协调者来说,步骤29是可选步骤。
如果结论是执行事务,则参与者执行事务的一系列操作,例如对参与者上存储的子对象进行删除操作、写数据操作。具体而言,如果结论是执行,执行的方式可以是OSD的控制器生成对存储介质进行操作指令,例如删除存储介质上的数据的指令。在生成对存储介质进行操作的指令后,可以记录日志,这个日志可以是Committed。在事务执行完成后,也就是控制器完成操作时,可以记录日志,这个日志可以是Cleared。然后释放这个事务所占用的资源,例如存储器资源。
参与者收到的结论可能是Commit,也可能是Abort。参与者收到结论后,可以不用给协调者发送已经收到的确认消息结论给协调者,也可以不发送已经执行结论的确认消息。
步骤21-步骤29的事务处理方法具有独立性,是一个完整的事务处理方法。步骤21-步骤29,可以在步骤13或步骤14之后执行,也可以用于其他场景,例如不是原协调者故障,而是原协调者自始就不存在,仅由若干参与者组成的事务处理系统,通过协商进行事务处理,在这种实施例中,可以没有步骤21。
实施例二的方法中,一部分步骤由协调者执行,另一部分由参与者执行,步骤23-步骤28一共涉及事务ID、对象ID以及版本号三种信息的比较,并可以通过比较结果得出事务结论,这个过程也可以包括如下4种结论,这4种结论之间是并列的,没有相互依存的关系,因此本发明实施例实现其中至少一种就是一个完整的方案。
(1)如果任意一个响应消息中携带有第一信息,则结论为执行事务,其中,第一信息表示发出第一信息的参与者不存在收到的事务ID,存在收到的对象ID,收到的对象的变化信息和自己的对象的变化信息相同。
(2)如果任意一个响应消息中携带有第二信息,则结论为终止事务,其中,第二信息表示发出第二信息的参与者不存在所述事务ID,存在所述对象ID,收到的对象的变化信息和自己的对象的变化信息不同。
(3)如果所有参与者返回的响应消息中携带第三信息,则事务的结论为执行事务,所述第三信息表示发出第三信息的参与者存在收到的事务ID。(4)如果任意参与者返回的响应消息中携带第四信息,对新建或者修改操作,则事务的结论为取消事务执行事务,对删除事务,则事务的结论为执行事务。第四信息表示发出第四信息的参与者不存在收到的事务ID,不存在收到的对象ID。
实施例三
如图3所示,本发明另外一种实施例还提供一种事务处理装置31,可以应用上述实施例二的方法。事务处理装置31与参与者32通信连接,事务操作的对象由多个子对象组成,其中,一个所述子对象位于所述事务处理装置中,其他所述子对象分别位于不同的所述参与者中。事务处理装置31包括查询模块311、接收模块312、决策模块313以及执行模块313。
查询模块311,用于向各个参与者32发送查询消息,所述查询消息中携带有事务ID、对象ID以及所述对象的版本号,其中所述事务ID用于标记所述事务,所述对象ID用于标记所述对象。
接收模块312,用于接收各个参与者对所述查询消息的响应消息;
决策模块313,用于根据所述响应消息得出结论,并将所述结论发送给所有所述参与者,所述结论包括下述至少一种。
(1)如果任意一个响应消息中携带有第一信息,则结论为执行事务,其中,第一信息表示发出第一信息的参与者不存在收到的事务ID,存在收到的对象ID,收到的对象的版本号和自己的对象的版本号相同。
(2)如果任意一个响应消息中携带有第二信息,则结论为终止事务,其中,第二信息表示发出第二信息的参与者不存在所述事务ID,存在所述对象ID,收到的对象的版本号和自己的对象的版本号不同。
(3)如果所有参与者返回的响应消息中携带第三信息,则事务的结论为执行事务,所述第三信息表示发出第三信息的参与者存在收到的事务ID。
(4)如果任意参与者返回的响应消息中携带第四信息,对新建或者修改操作,则事务的结论为取消事务执行事务,对删除事务,则事务的结论为执行事务。第四信息表示发出第四信息的参与者不存在收到的事务ID,不存在收到的对象ID。
执行模块314,用于执行决策模块313的结论,并将结论发送给所有所述参与者32。
参与者32收到执行模块314的结论后,可以执行结论。
在本发明实施例中,协调者31、参与者32都是对象存储设备OSD,所述事务是对所有所述子对象进行读取、对所有所述子对象删除或者对所有所述子对象写入。
实施例四
需要说明的是,如图4所示提供了另外一种事务处理方法的实施方式,这种实施方式与实施例二所揭露的实施方式相似,区别点之一是,Version_C与Version_T是否相同的比较可以由协调者来做。
在这种实施方式中,步骤22中协调者发送的查询消息中,可以不包含对象当前版本号Version_T,因此这个实施例中,参与者发送的响应消息可能携带第三消息或者第四消息,不会携带第一消息或者第二消息。
相应的,在步骤25判断结果为是之后,执行步骤47:收到查询消息的参与者读取对象ID所标记的对象的版本号Version_C,并把Version_C发送给协调者。参与者不执行版本是否相同的比较,也不发送于版本是否相同的应答信息给协调者。
步骤47中,参与者可以发送携带第五消息的响应消息,所述第五信息中还有发出响应消息的参与者中所述对象版本号。第五消息还可以表示所述参与者不存在所述事务ID,存在所述对象ID。
接着执行步骤48:协调者比较响应消息中携带的参与者的对象版本,和协调者记录的目标版本号进行比较,比较方式与步骤27基本相同,不同之处在于执行比较的主体是参与者。获得比较结果以后,依照与步骤28相同的方式得出结论并执行结论。
协调者可以同时具有检测第三信息、第四信息以及第五信息是否存在,并根据检测结果得出结论的功能。也可以仅具检测第三信息、第四信息、第五信息中任意一种是否存在,并根据检测结果得出结论的功能。所述结论包括下述至少一种。
(1)如果所有参与者返回的响应消息中携带第三信息,则事务的结论为执行事务,所述第三信息表示发出第三信息的参与者存在收到的事务ID。
(2)如果任意参与者返回的响应消息中携带第四信息,对新建或者修改操作,则事务的结论为取消事务执行事务,对删除事务,则事务的结论为执行事务。第四信息表示发出第四信息的参与者不存在收到的事务ID,不存在收到的对象ID。
(3)如果任意参与者返回的响应消息中携带第五信息,可以根据第五消息得出结论,所述结论包括下述至少一种:(i)如果参与者返回给协调者的班花信息和协调者记录的目标版本号相同,则结论为执行事务;或者(ii)如果参与者返回给协调者的班花信息和协调者记录的目标版本号不同,则结论为终止事务。其中,第五消息表示所述参与者不存在收到的事务ID,存在收到的对象ID,第五信息中还携带有发出响应消息的参与者中所述对象版本号。
实施例五
同样参考如图3,本发明另外一种实施例提供一种事务处理装置31,可以应用上述实施例四的方法。事务处理装置31与参与者32通信连接,事务操作的对象由多个子对象组成,其中,一个所述子对象位于所述事务处理装置中,其他所述子对象分别位于不同的所述参与者中。事务处理装置31包括查询模块311、接收模块312、决策模块313以及执行模块313。
查询模块311,用于向各个参与者32发送查询消息,所述查询消息中携带有所述查询消息中携带有事务ID以及对象ID,其中所述事务ID用于标记所述事务,所述对象ID用于标记所述对象。
接收模块312,用于接收各个参与者32对所述查询消息的响应消息,所述响应消息携带所述第五信息,所述表示所述参与者不存在所述事务ID,存在所述对象ID,其中,所述第五信息中还携带有发出响应消息的参与者中所述对象版本号。
决策模块313,根据所述响应消息得出结论,所述协调者执行所述结论,并将所述结论发送给所有所述参与者,所述结论包括下述至少一种:如果所述对象在参与者中的版本号与所述对象在协调者中的版本号相同,则结论为执行事务;或者,如果所述对象在参与者中的版本号与所述对象在协调者中的版本号不同,则结论为终止事务。
执行模块,用于执行所述决策模块的结论。
实施例六
如图5所示,本发明另一实施例提供一种协调者51,和参与者42通信连接,事务操作的对象由多个子对象组成,其中,一个所述子对象位于所述协调者中,其他所述子对象分别位于不同的所述参与者中,所述协调者包括处理器(Processor)511以及与处理器通信的存储器512,所述存储器用于存储程序,所述处理器用于执行程序,程序可以执行上述方法中的一种或者多种,例实施例一、实施例二、实施例四所描述方法的一种或多种。
一种实施例中所述处理器511执行的程序用于:向各个参与者发送查询消息,所述查询消息中携带有事务ID、对象ID以及所述对象的版本号,其中所述事务ID用于标记所述事务,所述对象ID用于标记所述对象,所述对象的版本号用于标记所述对象的内容是否发生改变,不同版本号的所述对象的内容不同;接收各个参与者对所述查询消息的响应消息;根据所述响应消息得出结论,执行所述结论,并将所述结论发送给所有所述参与者。所述结论包括下述至少一种:如果任意一个响应消息中携带有第一信息,则结论为执行事务,其中,所述第一信息表示所述参与者不存在所述事务ID,存在所述对象ID,所述对象在参与者中的版本号与所述对象在协调者中的版本号相同;或者,如果任意一个响应消息中携带有第二信息,则结论为终止事务,其中,所述第二信息表示所述参与者不存在所述事务ID,存在所述对象ID,所述对象在参与者中的版本号与所述对象在协调者的版本号不同。
一种实施例中所述处理器511执行的程序用于:向各个参与者发送查询消息,所述查询消息中携带有事务ID以及对象ID,其中所述事务ID用于标记所述事务,所述对象ID用于标记所述对象,所述对象的版本号用于标记所述对象的内容是否发生改变,不同版本号的所述对象的内容不同;接收各个参与者对所述查询消息的响应消息,所述响应消息携带所述第五信息,第五消息表示所述参与者不存在所述事务ID,存在所述对象ID,其中,所述第五信息中还携带有发出响应消息的参与者中所述对象版本号;根据所述响应消息得出结论,所述协调者执行所述结论,并将所述结论发送给所有所述参与者。所述结论包括下述至少一种:如果所述对象在参与者中的版本号与所述对象在协调者中的版本号相同,则结论为执行事务;或者,如果所述对象在参与者中的版本号与所述对象在协调者中的版本号不同,则结论为终止事务。
处理器511可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。存储器512可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。
通过以上的实施方式的描述,可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何人员在本发明揭露的技术范围内,想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (32)
1.一种事务处理方法,应用于分布式存储系统中的协调者,所述协调者和分布式存储系统中的参与者通信连接,事务操作的对象由多个子对象组成,其中,一个所述子对象位于所述协调者中,其他所述子对象分别位于不同的所述参与者中,其特征在于,该方法包括:
所述协调者向各个参与者发送查询消息,所述查询消息中携带有事务ID、对象ID以及所述对象的变化信息,其中,所述事务ID用于标记所述事务,所述对象ID用于标记所述对象,所述变化信息与所述对象的内容对应,不同所述变化信息的所述对象的内容不同;
所述协调者接收各个参与者对所述查询消息的响应消息;
所述协调者根据所述响应消息得出结论,所述协调者执行所述结论,并将所述结论发送给所述参与者,所述结论包括:
对操作类型是新建或者修改的事务,如果任一参与者返回的信息指示了对象的变化信息相同,则结论是执行事务。
2.根据权利要求1所述的方法,其特征在于:
所述协调者、参与者都是对象存储设备OSD,所述事务是对所有所述子对象进行读取、对所有所述子对象删除或者对所有所述子对象写入。
3.根据权利要求1所述的方法,其特征在于,所述对象在参与者中的变化信息与所述对象在协调者的变化信息不同,具体是:
所述对象在参与者中的版本比所述对象在协调者的版本新;或者
所述对象在参与者中的版本比所述对象在协调者的版本旧。
4.根据权利要求1、2或3所述的方法,其特征在于,所述协调者、所述参与者均与原协调者通信连接,所述原协调者无子对象,所述方法之前进一步包括:
原协调者失效后,选择原参与者中的一个作为所述协调者。
5.根据权利要求4所述的方法,其特征在于,原协调者失效之前,所述方法进一步包括:
所述协调者接收原协调者发送所述事务ID、对象ID、对象的变化信息以及参与者清单。
6.根据权利要求4所述的方法,其特征在于,原协调者失效之前,所述方法进一步包括:
所述原协调者发送操作请求给各个参与者,所述操作请求中携带有所述对象ID,操作类型、协调者中记录的对象的变化信息以及参与者清单,所述参与者清单中记录有所述原参与者;
所述协调者发送准备命令给各个参与者,命令中携带事务ID、对象ID、协调者中记录的对象的变化信息,以及参与者清单,以使各个所述原参与者接收存储参与者清单,并为事务分配资源。
7.根据权利要求1、2和3中任一所述的方法,其特征在于:
所述对象的变化信息是对象的版本号。
8.一种事务处理装置,与分布式存储系统中的参与者通信连接,事务操作的对象由多个子对象组成,其中,一个所述子对象位于所述事务处理装置中,其他所述子对象分别位于不同的所述参与者中,其特征在于,该装置包括:
查询模块,用于向各个参与者发送查询消息,所述查询消息中携带有事务ID、对象ID以及所述对象的变化信息,其中所述事务ID用于标记所述事务,所述对象ID用于标记所述对象,所述变化信息与所述对象的内容对应,不同所述变化信息的所述对象的内容不同;
接收模块,用于接收各个参与者对所述查询消息的响应消息;
决策模块,用于根据所述响应消息得出结论,并将所述结论发送给所述参与者,所述结论包括:
对操作类型是新建或者修改的事务,如果任一参与者返回的信息指示了对象的变化信息相同,则结论是执行事务;
执行模块,用于执行所述决策模块的结论。
9.根据权利要求8所述的事务处理装置,其特征在于:
所述协调者、参与者都是对象存储设备OSD,所述事务是对所有所述子对象进行读取、对所有所述子对象删除或者对所有所述子对象写入。
10.根据权利要求8或9所述的事务处理装置,其特征在于,所述协调者、所述参与者均与原协调者通信连接,所述原协调者无子对象,所述接收模块进一步包括:
接收原协调者发送的所述事务ID、对象ID、对象的变化信息以及参与者清单给各个参与者。
11.根据权利要求8和9任一所述的事务处理装置,其特征在于:
所述对象的变化信息是对象的版本号。
12.根据权利要求8或9所述的事务处理装置,其中
所述协调者、参与者都是对象存储设备OSD。
13.一种协调者,和分布式存储系统中的参与者通信连接,事务操作的对象由多个子对象组成,其中,一个所述子对象位于所述协调者中,其他所述子对象分别位于不同的所述参与者中,所述协调者包括处理器以及与处理器通信的存储器,所述存储器用于存储程序指令,所述处理器用于执行程序指令,该程序指令用于:
向各个参与者发送查询消息,所述查询消息中携带有事务ID、对象ID以及所述对象的变化信息,其中所述事务ID用于标记所述事务,所述对象ID用于标记所述对象,变化信息与所述对象的内容对应,不同所述变化信息的所述对象的内容不同;
接收各个参与者对所述查询消息的响应消息;
根据所述响应消息得出结论,执行所述结论,并将所述结论发送给所述参与者,所述结论包括:
对操作类型是新建或者修改的事务而言,如果任一参与者返回对象的变化信息相同的信息,则结论是执行事务。
14.根据权利要求13所述的协调者,其特征在于:
所述协调者、参与者都是对象存储设备OSD,所述事务是对所有所述子对象进行读取、对所有所述子对象删除或者对所有所述子对象写入。
15.根据权利要求13所述的协调者,其特征在于,所述程序指令还用于:
接收原协调者发送的所述事务ID、对象ID、对象的变化信息以及参与者清单。
16.根据权利要求13任一所述的协调者,其特征在于:
所述对象的变化信息是对象的版本号。
17.根据权利要求13所述的事务处理装置,其中
所述协调者、参与者都是对象存储设备OSD。
18.一种事务处理方法,应用于分布式存储系统中的协调者,所述协调者和分布式存储系统中的参与者通信连接,事务操作的对象由多个子对象组成,其中,一个所述子对象位于所述协调者中,其他所述子对象分别位于不同的所述参与者中,其特征在于,该方法包括:
所述协调者向各个参与者发送查询消息,所述查询消息中携带有事务ID以及对象ID,其中所述事务ID用于标记所述事务,所述对象ID用于标记所述对象,变化信息与所述对象的内容对应,不同所述变化信息的所述对象的内容不同;
所述协调者接收各个参与者对所述查询消息的响应消息,所述响应消息携带有发出响应消息的参与者中对象的变化信息;
所述协调者根据所述响应消息得出结论,所述协调者执行所述结论,并将所述结论发送给所述参与者,所述结论包括:
对操作类型是新建或者修改的事务而言,如果任一参与者返回的信息指示了对象的变化信息相同,则结论是执行事务。
19.根据权利要求18所述的方法,其特征在于:
所述协调者、参与者都是对象存储设备OSD,所述事务是对所有所述子对象进行读取、对所有所述子对象删除或者对所有所述子对象写入。
20.根据权利要求18所述的方法,其特征在于,所述对象在参与者中的变化信息与所述对象在协调者的变化信息不同,具体是:
所述对象在参与者中的版本比所述对象在协调者的版本新;或者
所述对象在参与者中的版本比所述对象在协调者的版本旧。
21.根据权利要求18、19或20所述的方法,其特征在于,所述协调者、所述参与者均与原协调者通信连接,所述原协调者无子对象,所述方法之前进一步包括:
原协调者失效后,选择原参与者中的一个作为所述协调者。
22.根据权利要求21所述的方法,其特征在于,原协调者失效之前,所述方法进一步包括:
所述协调者接收原协调者发送的所述事务ID、对象ID、对象的变化信息以及参与者清单。
23.根据权利要求22所述的方法,其特征在于,原协调者失效之前,所述方法进一步包括:
所述原协调者发送操作请求给各个参与者,所述操作请求中携带有所述对象ID,操作类型、协调者中记录的对象的变化信息以及参与者清单,所述参与者清单中记录有所述原参与者;
所述协调者发送准备命令给各个参与者,命令中携带事务ID、对象ID、协调者中记录的对象的变化信息,以及参与者清单,以使各个所述原参与者接收存储参与者清单,并为事务分配资源。
24.根据权利要求18、19和20任一所述的方法,其特征在于:
所述对象的变化信息是对象的版本号。
25.一种事务处理装置,与分布式存储系统中的参与者通信连接,事务操作的对象由多个子对象组成,其中,一个所述子对象位于所述事务处理装置中,其他所述子对象分别位于不同的所述参与者中,其特征在于,该装置包括:
查询模块,用于向各个参与者发送查询消息,所述查询消息中携带有所述查询消息中携带有事务ID以及对象ID,其中所述事务ID用于标记所述事务,所述对象ID用于标记所述对象,变化信息与所述对象的内容对应,不同所述变化信息的所述对象的内容不同;
接收模块,用于接收各个参与者对所述查询消息的响应消息,所述响应消息携带有发出响应消息的参与者中所述对象的变化信息;
决策模块,根据所述响应消息得出结论,协调者执行所述结论,并将所述结论发送给所述参与者,所述结论包括:
对操作类型是新建或者修改的事务而言,如果任一参与者返回的对象的变化信息和所述协调者相同,则结论是执行事务;
执行模块,用于执行所述决策模块的结论。
26.根据权利要求25所述的事务处理装置,其特征在于:
所述协调者、参与者都是对象存储设备OSD,所述事务是对所有所述子对象进行读取、对所有所述子对象删除或者对所有所述子对象写入。
27.根据权利要求25或26所述的事务处理装置,其特征在于,所述协调者、所述参与者均与原协调者通信连接,所述原协调者无子对象,所述接收模块进一步用于:
接收原协调者发送的所述事务ID、对象ID、对象的变化信息以及参与者清单给各个参与者。
28.根据权利要求25-27任一所述的事务处理装置,其特征在于:
所述对象的变化信息是对象的版本号。
29.一种协调者,和分布式存储系统中的参与者通信连接,事务操作的对象由多个子对象组成,其中,一个所述子对象位于所述协调者中,其他所述子对象分别位于不同的所述参与者中,所述协调者包括处理器以及与处理器通信的存储器,所述存储器用于存储程序指令,所述处理器用于执行程序指令,该程序指令用于:
向各个参与者发送查询消息,所述查询消息中携带有事务ID以及对象ID,其中所述事务ID用于标记所述事务,所述对象ID用于标记所述对象,变化信息与所述对象的内容对应,不同所述变化信息的所述对象的内容不同;
接收各个参与者对所述查询消息的响应消息,所述响应消息中携带有发出响应消息的参与者中所述对象的变化信息;
根据所述响应消息得出结论,所述协调者执行所述结论,并将所述结论发送给所述参与者,所述结论包括:
对操作类型是新建或者修改的事务而言,如果任一参与者返回的对象的变化信息和所述协调者相同,则结论是执行事务。
30.根据权利要求29所述的协调者,其特征在于:
所述协调者、参与者都是对象存储设备OSD,所述事务是对所有所述子对象进行读取、对所有所述子对象删除或者对所有所述子对象写入。
31.根据权利要求29所述的协调者,其特征在于,所述程序指令还用于:
接收原协调者发送的所述事务ID、对象ID、对象的变化信息以及参与者清单。
32.根据权利要求29任一所述的协调者,其特征在于:
所述对象的变化信息是对象的版本号。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNPCT/CN2013/086169 | 2013-10-29 | ||
CN2013086169 | 2013-10-29 | ||
CN201380002529.0A CN104220982B (zh) | 2013-10-29 | 2013-11-05 | 一种事务处理方法与装置 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380002529.0A Division CN104220982B (zh) | 2013-10-29 | 2013-11-05 | 一种事务处理方法与装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106997305A true CN106997305A (zh) | 2017-08-01 |
CN106997305B CN106997305B (zh) | 2020-09-29 |
Family
ID=59431131
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710113569.2A Active CN106997305B (zh) | 2013-10-29 | 2013-11-05 | 一种事务处理方法与装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106997305B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109684048A (zh) * | 2018-11-22 | 2019-04-26 | 华为技术有限公司 | 事务提交系统中处理事务的方法及装置 |
CN110764930A (zh) * | 2019-10-21 | 2020-02-07 | 中国民航信息网络股份有限公司 | 基于消息模式的请求或应答处理方法及装置 |
CN112995262A (zh) * | 2019-12-18 | 2021-06-18 | 中国移动通信集团浙江有限公司 | 分布式事务提交方法、系统及计算设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07319748A (ja) * | 1994-05-23 | 1995-12-08 | Internatl Business Mach Corp <Ibm> | データ処理システム内で複写データ一貫性を維持するためのシステムおよび方法 |
US7401084B1 (en) * | 2001-06-14 | 2008-07-15 | Oracle International Corporation | Two-phase commit with queryable caches |
CN101341466A (zh) * | 2005-12-19 | 2009-01-07 | 国际商业机器公司 | 分布式系统中事务的提交 |
CN101706811A (zh) * | 2009-11-24 | 2010-05-12 | 中国科学院软件研究所 | 一种分布式数据库系统事务提交方法 |
JP2012022379A (ja) * | 2010-07-12 | 2012-02-02 | Nippon Telegr & Teleph Corp <Ntt> | 分散トランザクション処理システム、装置、方法およびプログラム |
US8356007B2 (en) * | 2010-10-20 | 2013-01-15 | Microsoft Corporation | Distributed transaction management for database systems with multiversioning |
-
2013
- 2013-11-05 CN CN201710113569.2A patent/CN106997305B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07319748A (ja) * | 1994-05-23 | 1995-12-08 | Internatl Business Mach Corp <Ibm> | データ処理システム内で複写データ一貫性を維持するためのシステムおよび方法 |
US7401084B1 (en) * | 2001-06-14 | 2008-07-15 | Oracle International Corporation | Two-phase commit with queryable caches |
CN101341466A (zh) * | 2005-12-19 | 2009-01-07 | 国际商业机器公司 | 分布式系统中事务的提交 |
CN101706811A (zh) * | 2009-11-24 | 2010-05-12 | 中国科学院软件研究所 | 一种分布式数据库系统事务提交方法 |
JP2012022379A (ja) * | 2010-07-12 | 2012-02-02 | Nippon Telegr & Teleph Corp <Ntt> | 分散トランザクション処理システム、装置、方法およびプログラム |
US8356007B2 (en) * | 2010-10-20 | 2013-01-15 | Microsoft Corporation | Distributed transaction management for database systems with multiversioning |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109684048A (zh) * | 2018-11-22 | 2019-04-26 | 华为技术有限公司 | 事务提交系统中处理事务的方法及装置 |
CN110764930A (zh) * | 2019-10-21 | 2020-02-07 | 中国民航信息网络股份有限公司 | 基于消息模式的请求或应答处理方法及装置 |
CN112995262A (zh) * | 2019-12-18 | 2021-06-18 | 中国移动通信集团浙江有限公司 | 分布式事务提交方法、系统及计算设备 |
CN112995262B (zh) * | 2019-12-18 | 2022-06-10 | 中国移动通信集团浙江有限公司 | 分布式事务提交方法、系统及计算设备 |
Also Published As
Publication number | Publication date |
---|---|
CN106997305B (zh) | 2020-09-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20200167370A1 (en) | Maintaining a relationship between two different items of data | |
US6122630A (en) | Bidirectional database replication scheme for controlling ping-ponging | |
US7627611B2 (en) | Conflict resolution in database replication through autonomous node qualified folding | |
US11841844B2 (en) | Index update pipeline | |
TW522320B (en) | Apparatus and method for recovering a failed database data set | |
CN104094228B (zh) | 用于支持基于二阶段提交调用的严格定序的事务恢复的系统和方法 | |
CN110169040A (zh) | 基于多层一致性哈希的分布式数据存储方法与系统 | |
EP1241592A2 (en) | Collision avoidance in Bidirectional database replication | |
JP2022511084A (ja) | ブロックチェーン技術を用いてデータベースアプリケーションを増強するためのシステムおよび方法 | |
US20150088820A1 (en) | Persistent data storage techniques | |
US8667033B1 (en) | Persistent file system objects for management of databases | |
CN107209704A (zh) | 检测丢失的写入 | |
CN106557514A (zh) | 一种分布式事务回滚方法及装置 | |
CN106777270A (zh) | 一种基于提交点时间线同步的异构数据库复制并行执行系统及方法 | |
WO2007053314A2 (en) | Apparatus and method for creating a real time database replica | |
CN102388369B (zh) | 源自单一备份的粒度应用程序数据的生命周期 | |
CN104657158B (zh) | 一种业务系统中业务处理的方法和装置 | |
JP6475304B2 (ja) | トランザクション処理方法および装置 | |
CN108431808A (zh) | 对分区的数据存储空间当中的结构化数据记录的提醒处理 | |
CN106997305A (zh) | 一种事务处理方法与装置 | |
CN107111534A (zh) | 一种数据处理的方法和装置 | |
CN105892954A (zh) | 基于多副本的数据存储方法和装置 | |
CN103970620B (zh) | 一种准连续性数据复制方法及装置 | |
CN104220982B (zh) | 一种事务处理方法与装置 | |
CN106407385A (zh) | 数据管理方法、设备和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20211223 Address after: 450046 Floor 9, building 1, Zhengshang Boya Plaza, Longzihu wisdom Island, Zhengdong New Area, Zhengzhou City, Henan Province Patentee after: Super fusion Digital Technology Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd. |