一种分布式环境下的事务内存系统的制作方法

文档序号:6440008阅读:224来源:国知局
专利名称:一种分布式环境下的事务内存系统的制作方法
一种分布式环境下的事务内存系统技术领域
本发明属于并行程序设计领域,具体涉及一种基于事务内存的分布式共享内存一致性控制机制的构建及相关系统框架的实现,它适用于在大规模集群中部署具有高扩展性的事务内存,为集群中的分布式共享内存提供基于事务的访问控制方式。
背景技术
事务内存(Transactional Memory)是一种用于并行程序设计的工具,它是一种不同于锁或信号量的共享内存的访问控制机制,它来自于数据库管理系统(DBMS)中的事务 (Transaction)概念。
在并行程序设计中,当多个计算任务并行协作时必须考虑任务间共享数据的同步和一致性的问题,最初步也是最通常的方法是使用锁,只有获得了锁的任务才允许访问临界区。但使用锁会出现很多问题——诸如优先级反转(Priority inversion)、死锁 (Deadlock)、护航(Convoying)等,这给并行程序的设计和调试带来了很多的麻烦,也增加了并行程序的复杂度。尤其在分布式环境下,分布式锁的复杂度和开销都远高于普通的锁, 并且由分布式锁引发的优先级反转、死锁、护航等问题比普通的锁引发的这些问题更难以发现和解决。事务内存做为一种先进的同步和一致性控制机制,能够有效地解决由锁引发的这些问题,将事务内存技术融入到分布式共享内存中,为分布式共享内存提供访问控制机制,可以避免分布式锁的使用,从而降低分布式程序的设计和开发的难度。
目前单机环境下的事务内存按照更新数据时的机制不同,可分为延迟更新 (deferred-update)和直接更新(direct-update)两大类。延迟更新软件事务内存实现的基本思想是一个线程在事务中仅对共享数据的一个副本进行改变,如果此次执行不与其他线程发生同步冲突,则此事务成功并执行提交(Commit)动作,将更新原始数据,如果失败则执行回滚(Abort或Rollkick)动作。直接更新则是一个线程在事务中直接对共享数据进行更新,并使用显式的同步语句避免其他事务在此事务执行过程中修改此共享数据。显然,在直接更新时需要系统记录此共享数据的原始值,以便在回滚时可以恢复。
根据在事务冲突时的处理机制不同,事务内存又可以分为悲观和乐观的并发控制 (pessimistic & optimistic concurrency control)两大类。在悲观的并发控制中,冲突一旦发生就必须要得到侦测并加以解决,而在乐观的并发控制里,冲突的侦测和解决可以延迟,只要是在事务提交之前进行就可以了。
事务内存中还存在数据粒度(granularity)的概念最容易让程序员理解的粒度是对象粒度;在此粒度下,任何冲突发生的判决是在对象范围内进行的即使两个事务修改的内存块不重合,只要他们是在同一个对象内,那么就可以判断这两个事务冲突。更精细的粒度是字粒度(word granularity)禾口字节粒度(byte granularity),在这两禾中粒度下, 冲突的检测更精细,更利于事务内存系统性能的提升,但是却会给程序员带来不小的麻烦。发明内容
本发明的目的是提供一种分布式环境下的事务内存系统,该系统能够对分布式环境下的分布式共享变量的一致性进行控制,使得分布式程序能够以事务的方式访问分布式共享变量,而不需要使用分布式锁来控制共享变量的一致性。
本发明提供的一种分布式环境下的事务内存系统,其特征在于,该系统包括事务逻辑模块、事务管理模块、共享数据管理模块和网络通信模块;
事务逻辑模块负责实现单个事务的基本功能,包括基于事务的共享数据读写、事务的提交和回滚、事务中共享数据的缓存,并向用户提供完善的编程接口 ;事务逻辑模块的输入为用户程序的请求,输出为共享数据操作命令、缓存数据和事务状态消息;事务逻辑模块在接受到用户程序的请求后,根据事务当前的状态,对请求进行处理,并根据需要向共享数据管理模块发出共享数据操作命令、向事务管理模块发送事务状态信息、向用户程序回复缓存数据;
事务管理模块负责管理本系统中存在的大量的事务,其功能包括事务的注册,事务信息的更新,事务的删除;其输入有用户程序发出的事务注册请求、事务逻辑模块发出的事务结束消息和共享数据管理模块发出的事务冲突消息;事务管理模块中维护一个事务序列号生成器和一个本地事务集合;在接收到用户程序发出的事务注册请求后,事务管理模块使用序列号生成器生成一个全局唯一的事务序列号,并将其返回给用户程序,并将该事务信息加入到本地事务集合;在接收到事务逻辑模块发出的事务结束消息后,事务管理模块将在本地事务集合中删除相应的事务信息;在接收到共享数据管理模块发出的事务冲突消息后,事务管理模块将在本地事务集合中查找到相应事务,并向该事务发出失效消息,强制其回滚;
共享数据管理模块负责管理系统中全部的分布式共享数据,以及分布式共享数据相关的事务操作;其输入有事务逻辑模块的共享数据操作请求和网络通信模块的共享数据操作请求;在接收到共享数据操作请求后,共享数据管理模块根据本地数据当前的状态, 会向事务逻辑模块发出事务回复请求、或者向网络通信模块发出网络通信请求、或者向事务管理模块发出事务冲突消息;
网络通信模块负责接收共享数据管理模块的网络通信消息,并转发到目标节点上的共享数据管理模块。
如背景技术中所描述,现有的单机事务内存存在着多种不同的处理机制,本发明针对分布式的特定环境,在设计策略上做出了合理的取舍,并在部分策略上进行更优的设计。本发明在数据更新策略上选择延迟更新,从而降低网络负载和减小通信时延,以此获得了更高的整体性能;在数据粒度上,本发明采用对象粒度,将共享数据以对象的形式封装和实现,从而简化编程模型,提高了系统的可用性。在冲突处理策略上,本发明使用乐观控制与悲观控制相结合的方式对于产生冲突率较高的操作(例如对共享数据的写操作)采用悲观控制策略,第一时间对冲突进行侦测和解决;对于产生冲突率较低的操作(例如对共享数据的读操作)采用乐观控制策略,推迟对冲突的侦测,在事务结束时才侦测并解决可能产生的冲突。在这种优化的策略下,系统即减少了无效计算的时间,又保证了分布式环境下较低的通信时延。在共享数据的寻址方面,本发明使用了有效的两段寻址过程,降低了共享数据的寻址复杂度,降低网络负载。


图1为本发明的系统架构示意图2为本发明的系统模块结构示意图3为本发明的事务逻辑模块子模块示意图4为本发明的共享数据管理模块和网络通信模块子模块结构示意图5为本发明的共享数据二段寻址过程示意图。
具体实施方式
如图1所示,本发明的系统适用于分布式环境,能够在多个节点上高效地执行计算任务。其中用户程序是由使用本系统的用户开发,在用户程序中可以使用事务访问共享数据。用户程序可以在同一个节点上同时使用多个事务。事务管理器负责对节点上所有的事务进行管理,并向用户程序反馈事务信息。共享内存管理器负责对节点上所有的共享数据进行管理,并与其他节点上的共享内存管理器合作,通过网络通信层来实现共享数据的拷贝和迁移。
如图2所示,本系统可分为如下几个模块事务逻辑模块1、事务管理模块2、共享数据管理模块3和网络通信模块4。
下面通过借助实施例更加详细地说明本发明,但以下实施例仅是说明性的,本发明的保护范围并不受这些实施例的限制。
如图3所示,事务逻辑模块1可分为如下几个子模块共享数据缓存模块1. 1、事务读模块1. 2、事务写模块1. 3、事务提交模块1. 4和事务回滚模块1. 5。用户程序均可直接访问这些模块的相应接口。
共享数据缓存模块1. 1负责事务中共享数据副本的缓存,向用户程序提供共享数据副本读写功能,并向事务读模块1. 2、事务写模块1. 3、事务提交模块1. 4和事务回滚模块 1. 5提供共享数据副本查询、添加和删除功能。缓存分为只读数据区和读写数据区两个部分,其中只读数据区保存事务只读过的共享数据副本,读写数据区则保存事务写过的共享数据副本。用户程序可直接通过内存地址读写缓存中的共享数据,其中只读数据区中的数据是不可写的。
事务读模块1. 2负责处理用户程序的读请求。其输入为用户程序所发出读请求, 在读请求处理结束后向用户回复事务缓存中相应共享数据副本的地址信息。具体逻辑如下事务读模块1. 2在接收到用户程序的读请求后,解析该读请求,获取用户所需数据的全局序列号,然后调用共享数据缓存模块1. 1检查共享数据缓存中是否已存在该数据的副本,若共享数据缓存模块1. 1回复数据已存在,则向用户程序直接回复该数据副本的地址; 若该共享数据不在缓存中,则向共享数据管理模块3发出共享数据读命令,然后等待共享数据管理模块3回复相应共享数据的副本或者事务冲突消息,若发生冲突则事务冲突的异常触发事务回滚,否则调用共享数据缓存模块1. 1,将该数据副本添加入共享数据缓存的只读数据区中,并向用户程序回复该数据副本的地址。
事务写模块1. 3负责处理用户程序的写请求。其输入为用户程序所发出写请求, 在写请求处理结束后,若发生冲突则抛出事务冲突的异常,否则向用户回复事务缓存中相应共享数据副本的地址信息。具体逻辑如下事务写模块1. 3在接收到用户程序的写请求后,解析该写请求,获取用户所需数据的全局序列号,然后调用共享数据缓存模块1. 1检查共享数据缓存的读写数据区中是否已存在该数据的副本,若共享数据缓存模块1. 1回复数据已存在,则向用户程序直接回复该数据副本的地址;若该共享数据不在缓存读写数据区中,则向共享数据管理模块3发出共享数据写命令,然后等待共享数据管理模块3回复相应共享数据的副本或者事务冲突消息,若发生冲突则事务冲突的异常触发事务回滚,否则调用共享数据缓存模块1. 1,将该数据副本存入共享数据缓存的读写缓存区中,并删除只读缓冲区中该数据的副本(如果存在),并向用户程序回复该数据副本的地址。
事务提交模块1.4负责处理用户程序的提交请求。其输入为用户程序的提交请求,在提交请求处理结束后事务将结束。具体逻辑如下事务提交模块1. 4在接收到用户程序的提交请求后,执行二段提交过程——调用共享数据缓存模块1. 1,遍历缓存读写缓存区中的数据副本,向共享数据管理模块3发出相应的共享数据预提交命令,收到共享数据管理模块3回复的全部预提交成功消息后,再调用共享数据缓存模块1. 1遍历缓存中的所有数据副本,向共享数据管理模块3发出相应的共享数据提交命令,然后调用共享数据缓存模块1. 1清空缓存中的所有数据。二段提交过程完成后事务向事务管理模块2发出事务结束消息。
事务回滚模块1. 5负责处理事务执行过程中抛出的事务冲突异常,执行事务的回滚。其输入为事务执行过程中的事务冲突异常,在异常处理结束后事务将重新开始。具体逻辑如下事务回滚模块1. 5在接收到事务冲突异常后,调用共享数据缓存模块1. 1遍历缓存中的所有数据副本,向共享数据管理模块3发出相应的共享数据回滚命令,然后调用共享数据缓存模块1. 1清空缓存中的所有数据。
共享数据管理模块3分为如下几个子模块元数据管理模块3. 1、共享数据寻址模块3. 2、共享数据读模块3. 3、共享数据写模块3. 4、共享数据提交模块3. 5和共享数据回滚模块3. 6。
元数据管理模块3. 1为分布式共享数据的状态提供一系列的记录,针对每个共享数据维护了相应读列表、写列表、读写锁、全局序列号和当前所在节点编号。读列表用于记录正在读该共享数据的事务,写列表用于记录正在写该共享数据的事务,读写锁用于该数据的底层访问控制。全局序列号是在共享数据创建的时候由元数据管理模块3. 1为其分配的序列号,是一个共享数据的唯一标示,其中,全局序列号中的高字节为该数据创建时所在的节点编号(以下我们将其简称为Original Home节点),而在当前所在节点编号(以下我们将其简称为Current Home节点)实际上是指“本节点所知”的最近该数据所在的节点编号。对于所有节点来说,一个共享数据的Original Home都是相同且不变的,而Current Home会存在差异。分布式环境下的所有元数据都将存储在各个节点的元数据集合中,与各个节点上的共享数据一一映射,可使用共享数据的全局序列号来对元数据进行访问。对共享数据所有的事务操作都必须在其相应的元数据上完成。元数据管理模块3. 1向共享数据寻址模块3. 2、共享数据读模块3. 3、共享数据写模块3. 4、共享数据提交模块3. 5、共享数据回滚模块3. 6提供元数据的直接访问接口。
共享数据寻址模块3. 2通过两段寻址协议定位共享数据所在的节点。共享数据寻址模块3. 2的输入为共享数据读模块3. 3、共享数据写模块3. 4、共享数据提交模块3. 5、共享数据回滚模块3. 6等发出的寻址请求和网络通信模块4发出的寻址请求,输出为相应共享对象的当前地址。当共享对象初始化时,其全局序列号中包含了其初始化时所在的节点的ID (即OriginalHome),而初始化后其当前所在节点号(Current Home)与Original Home 是相同的,但在事务执行的过程中,共享数据会在节点间迁移(在写操作过程中将详述), 即Current Home会改变,而共享数据寻址模块3. 2负责定位共享数据的位置。当共享数据寻址模块3. 2从本地事务逻辑模块1接收到一个共享数据操作命令时(包括读、写、提交、 回滚等操作),若该共享数据就在本地,则可直接访问,寻址模块向发出请求的模块返回共享数据的地址信息;若共享数据不在本地,则寻址模块通过网络通信模块4向共享数据的 Original Home发出数据操作请求的信息(以下简称为OperationRequest)。当Original Home节点上的共享数据寻址模块3. 2从网络通信模块4接收到Operation Request后,检查该共享数据是否在其本地,若在本地,则向发出请求的模块返回共享数据的地址信息;若不在其本地,则通过网络通信模块4将Operation Request转发到其本地所记录的该数据的CurrentHome,由Current Home向发出请求的模块返回共享数据的地址信息。其具体的执行步骤如图5所示。
共享数据读模块3. 3负责响应事务逻辑模块1发出的事务读命令,输入为事务读命令,输出为共享数据拷贝或事务冲突消息。当共享数据读模块3. 3接收到事务逻辑模块1 发出的事务读命令之后,调用共享数据寻址模块3. 2定位到共享数据所在地址。然后检查该共享数据的读写锁,若写锁已经被其他事务所占有(即有事务正在提交),则向当前试图读该数据的事务逻辑模块1回复事务冲突消息(Conflict)。若写锁没被占有,则在数据的读列表中加入该事务的ID,并生成一份共享数据的拷贝返回给事务逻辑模块1。
共享数据写模块3. 4负责响应事务逻辑模块1发出的事务写命令,输入为事务写命令,输出为共享数据拷贝或事务冲突消息。当共享数据写模块3. 4接收到事务逻辑模块1 发出的事务写命令之后,调用共享数据寻址模块3. 2定位到共享数据所在地址。然后检查该共享数据的读写锁,若写锁已经被其他事务所占有(即有事务正在提交),则向当前试图写该数据的事务逻辑模块1回复事务冲突消息(Conflict)。若写锁没被占有,检查共享数据写列表中是否已有其他事务,若存在,则向当前试图读该数据的事务逻辑模块1回复事务冲突消息(Conflict);若数据写列表为空,则在数据的写列表中加入该事务的ID,然后一份共享数据的拷贝返回给事务逻辑模块1。共享数据不在访问该事务所在的节点上,则调用元数据管理模块3. 1修改共享数据的Current Home为事务所在节点,并通过网络通信模块4将元数据迁移到事务所在节点。
共享数据提交模块3. 5负责响应事务逻辑模块1发出的事务预提交和提交命令, 输入为事务预提交和提交命令,输出为事务预提交和提交完成消息。当共享数据提交模块 3. 5接收到事务逻辑模块1发出的事务预提交命令之后,调用共享数据寻址模块3. 2定位到共享数据所在地址,占有相应共享数据的写锁。当共享数据提交模块3. 5接收到事务逻辑模块1发出的事务提交命令之后,将共享数据更新为事务提交命令中携带的数据。通过事务管理模块2向这些共享数据的读列表中的事务发出冲突消息(Conflict),然后清空读列表,然后释放原始数据的写锁。
共享数据回滚模块3. 6负责响应事务逻辑模块1发出的事务回滚命令,输入为事务回滚命令。在共享数据回滚模块3. 6收到事务逻辑模块1发出的事务回滚命令后,经过寻址过程找到共享数据的元数据,将共享数据读或写列表中该事务的记录清除。回滚过程结束。
网络通信模块4分为序列化与反序列化模块4. 1和网络包收发模块4. 2两个部分。
序列化与反序列化模块4. 1集成实现了两个功能接收共享数据管理模块3的网络通信消息,将其按相应格式序列化为网络包,输出到网络包收发模块4. 2 ;接收网络包收发模块4. 2的网络包,将其按相应格式反序列化为网络通信消息,发送到共享数据管理模块3。
网络包收发模块4. 2实现了两个功能接收序列化与反序列化模块4. 1的网络包通过TCP连接发送到指定节点;通过TCP连接接收网络包,输出到序列化与反序列化模块 4. 1。
实例
本发明的运行过程,下面用一个实例来详细说明
实例初始环境有三个节点(NodeO 1、Node02、Node03)形成一个分布式系统; 在NodeOl上创建一个共享数据DataOl,在Node03上创建一个共享数据Data02,此时, DataOl 的 Original Home 禾口 Current Home 均为 NodeOl,而 Data02 的 Original Home 禾口 Current Home 均为 Node03 ;在 NodeOl 上运 亍事务 TransactionOl,在 Node02 上运行事务 Transaction。〗,在 Node03 上运行事务 Transaction03 禾口 Transaction04, 其中TransactionOl对DataOl执行读操作,Transaction。〗对DataOl执行写操作, Transaction03 对 DataOl 执行读操作、对 Data02 执行写操作,Transaction04 对 Data02 执行写操作。下面按众多执行顺序的一种,来执行这三个事务
(I)TransactionOl对DataOl执行读操作。iTransactionOl通过共享数据寻址方法在本地节点的共享数据池中查找到DataOl的原始数据,即对DataOl执行读操作(即将当前事务的ID加入当前数据的读列表中)并成功,并拷贝DataOl到自身的读缓冲区中。
(2)TransactionO2 对 DataOl 执行写操作。TransactionO2 在本地节点(即 Node02)的共享数据池中没有查找到DataOl的原始数据,即向DataOl的Original Home节点(即NodeOl)发出数据写请求;NodeOl接收到Transaction02发出的数据写请求后,即在本地共享数据池查找到DataOl的原始数据,然后对DataOl执行写操作(即将当前事务的ID加入当前数据的写列表中)并成功,修改DataOl的Current Home为I^ransactionO〗 所在的节点(即Node02),然后将DataOl打包发送到Node02。Node02收到DataOl后,即将 DataOl放入自身的共享数据池,并产生一份DataOl的拷贝,放入TransaCtiOn02的写缓冲区中。
(3) Transaction03 对 DataOl 执行读操作。Transaction03 在本地节点(艮P Node03)的共享数据池中没有查找到DataOl的原始数据,即向DataOl的Original Home节点(即NodeOl)发出数据读请求;NodeOl接收到TransactiOn03发出的数据读请求后,检查到DataOl的原始数据不在本地,即将该数据读请求转发到DataOl的Current Home (即 Node02) ;Node02收到数据读请求后,在本地共享数据池中查找到DataOl的原始数据,对 DataOl执行读操作并成功,然后产生一份DataOl的拷贝并发送到Node03。Node02收到 DataOl的拷贝后,即将拷贝放入Transaction02的读缓冲区中。
(4) Transaction03对Data02执行写操作。iTransactionOl通过共享数据寻址方法在本地节点的共享数据池中查找到Data02的原始数据,然后对Data02执行写操作并成功,并拷贝DataOl到自身的写缓冲区中。
(5) Transaction04对Data02执行写操作。Transaction04通过共享数据寻址方法在本地节点的共享数据池中查找到Data02的原始数据,然后对Data02执行写操作,过程中检测到Data02的写列表中已经有其他事务,即发生冲突(Conflict),于是执行回滚过程。
(6) TransactionOl提交。由于iTransactionOl没用写入任何数据,故不需要获得任何数据的写锁,而其读过DataOl,于是向DataOl发出提交消息,NodeOl在本地的共享数据池没有查找到DataOl的原始数据,而NodeOl本身是DataOl的原始节点,故NodeOl向 DataOl的Current Home (即Node02)发出提交消息;Node02在收到提交消息后,在本地共享数据池查找到DataOl的原始数据,并在其读列表中清除(TransactionOl的记录)。
(7)Transaction02 提交。Transaction02 对 DataOl 执行过写操作,首先, TransactionO〗在本地共享数据池查找到DataOl的原始数据,并获得其写锁。然后, Transaction02将自身写缓冲区中的DataOl的副本更新到DataOl的原始数据中。然后向 DataOl读列表中的事务(目前仅有iTransactionOS, TransactionOl已在之前提交)发出冲突消息(Conflict),在DataOl的写列表中清除Transaction02自身的ID,并释放DataOl 的写锁。
(8)Transaction03 回滚。Transaction03 在接收至Ij Transaction02 发出的7中突之后执行回滚操作,向其读缓冲中的DataOl和写缓冲中的Data02发出回滚消息。由于 Data02的原始数据就在本地共享数据池中,故只需清除Data02写列表中TransactiOn03 的ID。而DataOl不在本地,故向其OriginalHome (Node02)发出回滚消息。NodeOl接收到 Transaction03发出的回滚消息后,检查到DataOl的原始数据不在本地,即将该回滚消息转发到DataOl的Current Home (即Node02) ;Node02收到回滚后,在本地共享数据池中查找到DataOl的原始数据,在DataOl的读列表中清除Transaction03自身的ID。
以上所述,仅为本发明最佳的具体实现方式,本发明的实现方法并不局限于此,任何在本发明领域内不脱离本发明精神下的改变,都应涵盖在本发明范围内。
权利要求
1.一种分布式环境下的事务内存系统,其特征在于,该系统包括事务逻辑模块(1)、事务管理模块O)、共享数据管理模块C3)和网络通信模块(4);事务逻辑模块(1)负责实现单个事务的基本功能,包括基于事务的共享数据读写、事务的提交和回滚、事务中共享数据的缓存,并向用户提供完善的编程接口 ;事务逻辑模块 (1)的输入为用户程序的请求,输出为共享数据操作命令、缓存数据和事务状态消息;事务逻辑模块(1)在接受到用户程序的请求后,根据事务当前的状态,对请求进行处理,并根据需要向共享数据管理模块C3)发出共享数据操作命令、向事务管理模块( 发送事务状态信息、向用户程序回复缓存数据;事务管理模块( 负责管理本系统中存在的大量的事务,其功能包括事务的注册,事务信息的更新,事务的删除;其输入有用户程序发出的事务注册请求、事务逻辑模块(1)发出的事务结束消息和共享数据管理模块(3)发出的事务冲突消息;事务管理模块O)中维护一个事务序列号生成器和一个本地事务集合;在接收到用户程序发出的事务注册请求后,事务管理模块(2)使用序列号生成器生成一个全局唯一的事务序列号,并将其返回给用户程序,并将该事务信息加入到本地事务集合;在接收到事务逻辑模块(1)发出的事务结束消息后,事务管理模块( 将在本地事务集合中删除相应的事务信息;在接收到共享数据管理模块C3)发出的事务冲突消息后,事务管理模块( 将在本地事务集合中查找到相应事务,并向该事务发出失效消息,强制其回滚;共享数据管理模块C3)负责管理系统中全部的分布式共享数据,以及分布式共享数据相关的事务操作;其输入有事务逻辑模块(1)的共享数据操作请求和网络通信模块(4) 的共享数据操作请求;在接收到共享数据操作请求后,共享数据管理模块C3)根据本地数据当前的状态,会向事务逻辑模块(1)发出事务回复请求、或者向网络通信模块(4)发出网络通信请求、或者向事务管理模块( 发出事务冲突消息;网络通信模块(4)负责接收共享数据管理模块(3)的网络通信消息,并转发到目标节点上的共享数据管理模块(3)。
2.根据权利要求1所述的分布式环境下的事务内存系统,其特征在于,事务逻辑模块 (1)包括共享数据缓存模块(1.1)、事务读模块(1.2)、事务写模块(1.3)、事务提交模块 (1. 4)和事务回滚模块(1. 5);共享数据缓存模块(1. 1)负责事务中共享数据副本的缓存,向用户程序提供共享数据副本读写功能,并向事务读模块(1.2)、事务写模块(1.3)、事务提交模块(1.4)和事务回滚模块(1. 5)提供共享数据副本查询、添加和删除功能;事务读模块(1. 负责处理用户程序的读请求;其输入为用户程序所发出读请求,在读请求处理结束后向用户回复事务缓存中相应共享数据副本的地址信息;事务写模块(L3)负责处理用户程序的写请求;其输入为用户程序所发出写请求,在写请求处理结束后,若发生冲突则抛出事务冲突的异常,否则向用户回复事务缓存中相应共享数据副本的地址信息;事务提交模块(1.4)负责处理用户程序的提交请求;其输入为用户程序的提交请求, 在提交请求处理结束后事务将结束;事务回滚模块(1. 负责处理事务执行过程中抛出的事务冲突异常,执行事务的回滚;其输入为事务执行过程中的事务冲突异常,在异常处理结束后事务将重新开始;事务回滚模块(1. 在接收到事务冲突异常后,调用共享数据缓存模块(1. 1)遍历缓存中的所有数据副本,向共享数据管理模块C3)发出相应的共享数据回滚命令,然后调用共享数据缓存模块(1. 1)清空缓存中的所有数据。
3.根据权利要求1或2所述的分布式环境下的事务内存系统,其特征在于,共享数据管理模块( 包括元数据管理模块(3. 1)、共享数据寻址模块(3. .2)、共享数据读模块(3. 3)、 共享数据写模块(3. 4)、共享数据提交模块(3. 和共享数据回滚模块(3.6);元数据管理模块(3. 1)为分布式共享数据的状态提供一系列的记录,针对每个共享数据维护了相应读列表、写列表、读写锁、全局序列号和当前所在节点编号;元数据管理模块 (3. 1)向共享数据寻址模块(3. 2)、共享数据读模块(3. 3)、共享数据写模块(3. 4)、共享数据提交模块(3.幻、共享数据回滚模块(3.6)提供元数据的直接访问接口 ;共享数据寻址模块(3. 2)通过两段寻址协议定位共享数据所在的节点;共享数据寻址模块(3. 的输入为共享数据读模块(3. 3)、共享数据写模块(3. .4)、共享数据提交模块 (3. 5)和共享数据回滚模块(3. 6)发出的寻址请求和网络通信模块(4)发出的寻址请求,输出为相应共享对象的当前地址;共享数据读模块(3. 3)负责响应事务逻辑模块(1)发出的事务读命令,输入为事务读命令,输出为共享数据拷贝或事务冲突消息;当共享数据读模块(3. 3)接收到事务逻辑模块(1)发出的事务读命令之后,调用共享数据寻址模块(3. 2)定位到共享数据所在地址;然后检查该共享数据的读写锁,若写锁已经被其他事务所占有,则向当前试图读该数据的事务逻辑模块(1)回复事务冲突消息;若写锁没被占有,则在数据的读列表中加入该事务的 ID,并生成一份共享数据的拷贝返回给事务逻辑模块(1);共享数据写模块(3.4)负责响应事务逻辑模块(1)发出的事务写命令,输入为事务写命令,输出为共享数据拷贝或事务冲突消息;共享数据提交模块(3. 5)负责响应事务逻辑模块(1)发出的事务预提交和提交命令, 输入为事务预提交和提交命令,输出为事务预提交和提交完成消息;共享数据回滚模块(3.6)负责响应事务逻辑模块(1)发出的事务回滚命令,输入为事务回滚命令;在共享数据回滚模块(3. 6)收到事务逻辑模块(1)发出的事务回滚命令后,经过寻址过程找到共享数据的元数据,将共享数据读或写列表中该事务的记录清除;回滚过程结束。
4.根据权利要求1或2所述的分布式环境下的事务内存系统,其特征在于,网络通信模块(4)包括序列化与反序列化模块(4. 1)和网络包收发模块(4. .2);序列化与反序列化模块(4. 1)集成实现了两个功能接收共享数据管理模块(3)的网络通信消息,将其按相应格式序列化为网络包,输出到网络包收发模块(4. ;接收网络包收发模块(4. 的网络包,将其按相应格式反序列化为网络通信消息,发送到共享数据管理模块⑶;网络包收发模块(4. 2)用于接收序列化与反序列化模块(4. 1)的网络包通过TCP连接发送到指定节点,并通过TCP连接接收网络包,输出到序列化与反序列化模块(4. 1)。
5.根据权利要求1或2所述的分布式环境下的事务内存系统,其特征在于,网络通信模块(4)包括序列化与反序列化模块(4. 1)和网络包收发模块(4. .2);序列化与反序列化模块(4. 1)用于接收共享数据管理模块(3)的网络通信消息,将其按相应格式序列化为网络包,输出到网络包收发模块(4. ;还用于接收网络包收发模块(4.2)的网络包,将其按相应格式反序列化为网络通信消息,发送到共享数据管理模块 ⑶;网络包收发模块(4. 2)用于接收序列化与反序列化模块(4. 1)的网络包通过TCP连接发送到指定节点,并通过TCP连接接收网络包,输出到序列化与反序列化模块(4. 1)。
全文摘要
本发明属于并行程序设计领域,具体为一种分布式环境下的事务内存系统。该系统包括事务逻辑模块、事务管理模块、共享数据管理模块和网络通信模块;事务逻辑模块负责实现单个事务的基本功能,事务管理模块负责管理本系统中存在的大量的事务,共享数据管理模块负责管理系统中全部的分布式共享数据,以及分布式共享数据相关的事务操作;网络通信模块负责接收共享数据管理模块的网络通信消息,并转发到目标节点上的共享数据管理模块。本发明能够对分布式环境下的分布式共享变量的一致性进行控制,使得分布式程序能够以事务的方式访问分布式共享变量,而不需要使用分布式锁来控制共享变量的一致性。
文档编号G06F9/46GK102521028SQ20111039658
公开日2012年6月27日 申请日期2011年12月2日 优先权日2011年12月2日
发明者喻之斌, 彭鑫, 曾敬翔, 范学鹏, 金海 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1