CN102521028B - 一种分布式环境下的事务内存系统 - Google Patents
一种分布式环境下的事务内存系统 Download PDFInfo
- Publication number
- CN102521028B CN102521028B CN 201110396585 CN201110396585A CN102521028B CN 102521028 B CN102521028 B CN 102521028B CN 201110396585 CN201110396585 CN 201110396585 CN 201110396585 A CN201110396585 A CN 201110396585A CN 102521028 B CN102521028 B CN 102521028B
- Authority
- CN
- China
- Prior art keywords
- module
- shared data
- affairs
- transaction
- read
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明属于并行程序设计领域,具体为一种分布式环境下的事务内存系统。该系统包括事务逻辑模块、事务管理模块、共享数据管理模块和网络通信模块;事务逻辑模块负责实现单个事务的基本功能,事务管理模块负责管理本系统中存在的大量的事务,共享数据管理模块负责管理系统中全部的分布式共享数据,以及分布式共享数据相关的事务操作;网络通信模块负责接收共享数据管理模块的网络通信消息,并转发到目标节点上的共享数据管理模块。本发明能够对分布式环境下的分布式共享变量的一致性进行控制,使得分布式程序能够以事务的方式访问分布式共享变量,而不需要使用分布式锁来控制共享变量的一致性。
Description
技术领域
本发明属于并行程序设计领域,具体涉及一种基于事务内存的分布式共享内存一致性控制机制的构建及相关系统框架的实现,它适用于在大规模集群中部署具有高扩展性的事务内存,为集群中的分布式共享内存提供基于事务的访问控制方式。
背景技术
事务内存(Transactional Memory)是一种用于并行程序设计的工具,它是一种不同于锁或信号量的共享内存的访问控制机制,它来自于数据库管理系统(DBMS)中的事务(Transaction)概念。
在并行程序设计中,当多个计算任务并行协作时必须考虑任务间共享数据的同步和一致性的问题,最初步也是最通常的方法是使用锁,只有获得了锁的任务才允许访问临界区。但使用锁会出现很多问题——诸如优先级反转(Priority inversion)、死锁(Deadlock)、护航(Convoying)等,这给并行程序的设计和调试带来了很多的麻烦,也增加了并行程序的复杂度。尤其在分布式环境下,分布式锁的复杂度和开销都远高于普通的锁,并且由分布式锁引发的优先级反转、死锁、护航等问题比普通的锁引发的这些问题更难以发现和解决。事务内存做为一种先进的同步和一致性控制机制,能够有效地解决由锁引发的这些问题,将事务内存技术融入到分布式共享内存中,为分布式共享内存提供访问控制机制,可以避免分布式锁的使用,从而降低分布式程序的设计和开发的难度。
目前单机环境下的事务内存按照更新数据时的机制不同,可分为延迟更新(deferred-update)和直接更新(direct-update)两大类。延迟更新软件事务内存实现的基本思想是一个线程在事务中仅对共享数据的一个副本进行改变,如果此次执行不与其他线程发生同步冲突,则此事务成功并执行提交(Commit)动作,将更新原始数据,如果失败则执行回滚(Abort或Rollback)动作。直接更新则是一个线程在事务中直接对共享数据进行更新,并使用显式的同步语句避免其他事务在此事务执行过程中修改此共享数据。显然,在直接更新时需要系统记录此共享数据的原始值,以便在回滚时可以恢复。
根据在事务冲突时的处理机制不同,事务内存又可以分为悲观和乐观的并发控制(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。
实例
本发明的运行过程,下面用一个实例来详细说明
实例初始环境:有三个节点(Node01、Node02、Node03)形成一个分布式系统;在Node01上创建一个共享数据Data01,在Node03上创建一个共享数据Data02,此时,Data01的Original Home和Current Home均为Node01,而Data02的Original Home和Current Home均为Node03;在Node01上运行事务Transaction01,在Node02上运行事务Transaction02,在Node03上运行事务Transaction03和Transaction04,其中Transaction01对Data01执行读操作,Transaction02对Data01执行写操作,Transaction03对Data01执行读操作、对Data02执行写操作,Transaction04对Data02执行写操作。下面按众多执行顺序的一种,来执行这三个事务:
(1)Transaction01对Data01执行读操作。Transaction01通过共享数据寻址方法在本地节点的共享数据池中查找到Data01的原始数据,即对Data01执行读操作(即将当前事务的ID加入当前数据的读列表中)并成功,并拷贝Data01到自身的读缓冲区中。
(2)Transaction02对Data01执行写操作。Transaction02在本地节点(即Node02)的共享数据池中没有查找到Data01的原始数据,即向Data01的Original Home节点(即Node01)发出数据写请求;Node01接收到Transaction02发出的数据写请求后,即在本地共享数据池查找到Data01的原始数据,然后对Data01执行写操作(即将当前事务的ID加入当前数据的写列表中)并成功,修改Data01的Current Home为Transaction02所在的节点(即Node02),然后将Data01打包发送到Node02。Node02收到Data01后,即将Data01放入自身的共享数据池,并产生一份Data01的拷贝,放入Transaction02的写缓冲区中。
(3)Transaction03对Data01执行读操作。Transaction03在本地节点(即Node03)的共享数据池中没有查找到Data01的原始数据,即向Data01的Original Home节点(即Node01)发出数据读请求;Node01接收到Transaction03发出的数据读请求后,检查到Data01的原始数据不在本地,即将该数据读请求转发到Data01的Current Home(即Node02);Node02收到数据读请求后,在本地共享数据池中查找到Data01的原始数据,对Data01执行读操作并成功,然后产生一份Data01的拷贝并发送到Node03。Node02收到Data01的拷贝后,即将拷贝放入Transaction02的读缓冲区中。
(4)Transaction03对Data02执行写操作。Transaction01通过共享数据寻址方法在本地节点的共享数据池中查找到Data02的原始数据,然后对Data02执行写操作并成功,并拷贝Data01到自身的写缓冲区中。
(5)Transaction04对Data02执行写操作。Transaction04通过共享数据寻址方法在本地节点的共享数据池中查找到Data02的原始数据,然后对Data02执行写操作,过程中检测到Data02的写列表中已经有其他事务,即发生冲突(Conflict),于是执行回滚过程。
(6)Transaction01提交。由于Transaction01没用写入任何数据,故不需要获得任何数据的写锁,而其读过Data01,于是向Data01发出提交消息,Node01在本地的共享数据池没有查找到Data01的原始数据,而Node01本身是Data01的原始节点,故Node01向Data01的Current Home(即Node02)发出提交消息;Node02在收到提交消息后,在本地共享数据池查找到Data01的原始数据,并在其读列表中清除(Transaction01的记录)。
(7)Transaction02提交。Transaction02对Data01执行过写操作,首先,Transaction02在本地共享数据池查找到Data01的原始数据,并获得其写锁。然后,Transaction02将自身写缓冲区中的Data01的副本更新到Data01的原始数据中。然后向Data01读列表中的事务(目前仅有Transaction03,Transaction01已在之前提交)发出冲突消息(Conflict),在Data01的写列表中清除Transaction02自身的ID,并释放Data01的写锁。
(8)Transaction03回滚。Transaction03在接收到Transaction02发出的冲突之后执行回滚操作,向其读缓冲中的Data01和写缓冲中的Data02发出回滚消息。由于Data02的原始数据就在本地共享数据池中,故只需清除Data02写列表中Transaction03的ID。而Data01不在本地,故向其OriginalHome(Node02)发出回滚消息。Node01接收到Transaction03发出的回滚消息后,检查到Data01的原始数据不在本地,即将该回滚消息转发到Data01的Current Home(即Node02);Node02收到回滚后,在本地共享数据池中查找到Data01的原始数据,在Data01的读列表中清除Transaction03自身的ID。
以上所述,仅为本发明最佳的具体实现方式,本发明的实现方法并不局限于此,任何在本发明领域内不脱离本发明精神下的改变,都应涵盖在本发明范围内。
Claims (5)
1.一种分布式环境下的事务内存系统,其特征在于,该系统包括事务逻辑模块(1)、事务管理模块(2)、共享数据管理模块(3)和网络通信模块(4);
事务逻辑模块(1)负责实现单个事务的基本功能,包括基于事务的共享数据读写、事务的提交和回滚、事务中共享数据的缓存,并向用户提供编程接口;事务逻辑模块(1)的输入为用户程序的请求,输出为共享数据操作命令、缓存数据和事务状态消息;事务逻辑模块(1)在接受到用户程序的请求后,根据事务当前的状态,对请求进行处理,并根据需要向共享数据管理模块(3)发出共享数据操作命令、向事务管理模块(2)发送事务状态信息、向用户程序回复缓存数据;
事务管理模块(2)负责管理本系统中存在的事务,其功能包括事务的注册,事务信息的更新,事务的删除;其输入有用户程序发出的事务注册请求、事务逻辑模块(1)发出的事务结束消息和共享数据管理模块(3)发出的事务冲突消息;事务管理模块(2)中维护一个事务序列号生成器和一个本地事务集合;在接收到用户程序发出的事务注册请求后,事务管理模块(2)使用序列号生成器生成一个全局唯一的事务序列号,并将该事务序列号返回给用户程序,还将该事务序列号所对应的事务信息加入到本地事务集合;在接收到事务逻辑模块(1)发出的事务结束消息后,事务管理模块(2)将在本地事务集合中删除相应的事务信息;在接收到共享数据管理模块(3)发出的事务冲突消息后,事务管理模块(2)将在本地事务集合中查找到相应事务,并向该事务发出失效消息,强制该事务回滚;
共享数据管理模块(3)负责管理系统中全部的分布式共享数据,以及分布式共享数据相关的事务操作;其输入有:事务逻辑模块(1)的共享数据操作请求和网络通信模块(4)的共享数据操作请求;在接收到共享数据操作请求后,共享数据管理模块(3)根据本地数据当前的状态,会向事务逻辑模块(1)发出事务回复请求、或者向网络通信模块(4)发出网络通信请求、或者向事务管理模块(2)发出事务冲突消息;
网络通信模块(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.2)负责处理用户程序的读请求;其输入为用户程序所发出读请求,在读请求处理结束后向用户回复事务缓存中相应共享数据副本的地址信息;
事务写模块(1.3)负责处理用户程序的写请求;其输入为用户程序所发出写请求,在写请求处理结束后,若发生冲突则抛出事务冲突的异常,否则向用户回复事务缓存中相应共享数据副本的地址信息;
事务提交模块(1.4)负责处理用户程序的提交请求;其输入为用户程序的提交请求,在提交请求处理结束后事务将结束;
事务回滚模块(1.5)负责处理事务执行过程中抛出的事务冲突异常,执行事务的回滚;其输入为事务执行过程中的事务冲突异常,在异常处理结束后事务将重新开始;事务回滚模块(1.5)在接收到事务冲突异常后,调用共享数据缓存模块(1.1)遍历缓存中的所有数据副本,向共享数据管理模块(3)发出相应的共享数据回滚命令,然后调用共享数据缓存模块(1.1)清空缓存中的所有数据。
3.根据权利要求1或2所述的分布式环境下的事务内存系统,其特征在于,共享数据管理模块(3)包括元数据管理模块(3.1)、共享数据寻址模块(3.2)、共享数据读模块(3.3)、共享数据写模块(3.4)、共享数据提交模块(3.5)和共享数据回滚模块(3.6);
元数据管理模块(3.1)为分布式共享数据的状态提供一系列的记录,针对每个共享数据维护了相应读列表、写列表、读写锁、全局序列号和当前所在节点编号;元数据管理模块(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)发出的寻址请求,输出为相应共享对象的当前地址;
共享数据读模块(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.2);接收网络包收发模块(4.2)的网络包,将该网络包按相应格式反序列化为网络通信消息,发送到共享数据管理模块(3);
网络包收发模块(4.2)用于接收序列化与反序列化模块(4.1)的网络包通过TCP连接发送到指定节点,并通过TCP连接接收网络包,输出到序列化与反序列化模块(4.1)。
5.根据权利要求3所述的分布式环境下的事务内存系统,其特征在于,网络通信模块(4)包括序列化与反序列化模块(4.1)和网络包收发模块(4.2);
序列化与反序列化模块(4.1)用于接收共享数据管理模块(3)的网络通信消息,将该网络通信消息按相应格式序列化为网络包,输出到网络包收发模块(4.2);还用于接收网络包收发模块(4.2)的网络包,将该网络包按相应格式反序列化为网络通信消息,发送到共享数据管理模块(3);
网络包收发模块(4.2)用于接收序列化与反序列化模块(4.1)的网络包通过TCP连接发送到指定节点,并通过TCP连接接收网络包,输出到序列化与反序列化模块(4.1)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110396585 CN102521028B (zh) | 2011-12-02 | 2011-12-02 | 一种分布式环境下的事务内存系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110396585 CN102521028B (zh) | 2011-12-02 | 2011-12-02 | 一种分布式环境下的事务内存系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102521028A CN102521028A (zh) | 2012-06-27 |
CN102521028B true CN102521028B (zh) | 2013-07-24 |
Family
ID=46291963
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110396585 Expired - Fee Related CN102521028B (zh) | 2011-12-02 | 2011-12-02 | 一种分布式环境下的事务内存系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102521028B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105389161B (zh) * | 2014-09-09 | 2018-11-30 | 龙芯中科技术有限公司 | 事务内存的冲突检测方法、事务内存系统及微处理器 |
CN107025130B (zh) * | 2016-01-29 | 2021-09-03 | 华为技术有限公司 | 处理节点、计算机系统及事务冲突检测方法 |
CN106168915A (zh) * | 2016-04-25 | 2016-11-30 | 云南电网有限责任公司昆明供电局 | 分布式系统架构数据处理一致性保障方法 |
US10698724B2 (en) * | 2018-04-10 | 2020-06-30 | Osisoft, Llc | Managing shared resources in a distributed computing system |
CN109033364A (zh) * | 2018-07-26 | 2018-12-18 | 郑州云海信息技术有限公司 | 一种处理分布式事务的方法、配置中心及节点 |
CN110134704B (zh) * | 2019-05-31 | 2021-11-02 | 厦门大学嘉庚学院 | 一种基于分布式缓存的大数据集群事务实现方法 |
CN111309310B (zh) * | 2020-03-02 | 2023-04-28 | 上海交通大学 | 面向非易失性内存的JavaScript对象持久化框架 |
WO2022213526A1 (zh) * | 2021-04-06 | 2022-10-13 | 华为云计算技术有限公司 | 事务处理方法、分布式数据库系统、集群及介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101510162A (zh) * | 2009-03-26 | 2009-08-19 | 浙江大学 | 一种基于延时策略的软件事务内存的实现方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102006044764A1 (de) * | 2006-09-20 | 2008-04-03 | Wabco Gmbh | Ventilsteuereinheit, insbesondere Vorsteuereinheit für einen Druckmodulator eines Nutzfahrzeuges |
-
2011
- 2011-12-02 CN CN 201110396585 patent/CN102521028B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101510162A (zh) * | 2009-03-26 | 2009-08-19 | 浙江大学 | 一种基于延时策略的软件事务内存的实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102521028A (zh) | 2012-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102521028B (zh) | 一种分布式环境下的事务内存系统 | |
US7120651B2 (en) | Maintaining a shared cache that has partitions allocated among multiple nodes and a data-to-partition mapping | |
US10430298B2 (en) | Versatile in-memory database recovery using logical log records | |
US6832298B2 (en) | Server system operation control method | |
US11487435B1 (en) | System and method for non-volatile memory-based optimized, versioned, log-structured metadata storage with efficient data retrieval | |
CN101452400B (zh) | 处理多处理器系统中事务缓冲器溢出的方法和系统 | |
CN108509462B (zh) | 一种同步活动事务表的方法及装置 | |
US20130110767A1 (en) | Online Transaction Processing | |
US20100191713A1 (en) | Unbundled storage transaction services | |
US9922086B1 (en) | Consistent query of local indexes | |
CN101548268A (zh) | 高级竞争检测 | |
KR20180057639A (ko) | 선택적 리소스 이동을 이용하는 네트워크 결합 메모리 | |
CN111125049B (zh) | 基于rdma与非易失内存的分布式文件数据块读写方法及系统 | |
CN101133397A (zh) | 用于直连客户端服务器系统中的在线恢复的操作日志记录 | |
CN105955804A (zh) | 一种处理分布式事务的方法与设备 | |
US6874065B1 (en) | Cache-flushing engine for distributed shared memory multi-processor computer systems | |
CN102681890B (zh) | 一种应用于线程级推测并行的限制性值传递方法和装置 | |
CN112104504B (zh) | 一种大规模资源访问的事务管理框架、设计方法及云平台 | |
CN102110019B (zh) | 一种基于众核处理器和分区结构的事务存储方法 | |
US11392576B2 (en) | Distributed pessimistic lock based on HBase storage and the implementation method thereof | |
CN101339527A (zh) | 影子内存的备份方法及装置 | |
CN103164384B (zh) | 多机系统共享内存的同步实现方法及其系统 | |
US20220207025A1 (en) | Data storage method and system | |
US20080082533A1 (en) | Persistent locks/resources for concurrency control | |
JP4604032B2 (ja) | 非共有データベースシステムにおける1段階コミット |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130724 Termination date: 20151202 |
|
EXPY | Termination of patent right or utility model |