时间:2014-03-06 10:41 文章来源:http://www.lunwenbuluo.com 作者:孙勇 点击次数:
摘要:对于读密集型的云计算应用,现有系统很难同时满足它们对性能、一致性与可用性的需求。因此提出了一种基于事务内存和云存储技术的编程与存储模型TMC,能为云应用提供可配置的事务特性与数据存储服务。TMC包括事务与存储两个组件,事务组件允许所有只读事务无需远程验证即可顺利提交,其他事务则采用2PC算法提交;存储组件负责实现系统的可扩展性与可用性。仿真实验结果表明,TMC具有较高的性能与可用性。系统若经进一步改进和优化,将具有应用于实际生产环境中的潜力,可为用户提供高质量的云计算服务。
关键词:读密集;事务内存;云计算;数据副本;一致性
中图分类号:TP302文献标志码:A文章编号:1006-8228(2014)02-11-04
0引言
事务内存[1]是一种通过事务来实现并发控制的编程范式,事务的ACI特性由事务内存引擎来保证,无需开发者关心。与其他并发控制方法(例如锁)相比,事务内存具有安全、易用等优点,近年来在学术界受到了广泛关注。在云计算环境下,为了让系统管理员和应用开发者充分地利用云计算带来的强扩展和可用性,设计实现新型的适用于云计算的编程模型是一项极其紧迫的任务。当前已初露端倪的云计算编程模型以MapReduce[2]为代表,其他大体上是其变种,MapReduce的缺点是需要遵循复杂的开发模式,实际效率低下。事务内存是另一种可以作为云计算编程模型的技术,在开发复杂的分布式应用程序过程中,使用事务内存技术可以加快生产率,缩短开发周期,提高代码质量。但现有的事务内存研究多集中于共享内存多处理器的单机环境下,而适用于分布式环境、能满足云计算应用需求的研究迄今尚未出现。
现实中存在着大量读密集型应用(例如数据仓库),本文提出的面向读密集型应用的事务内存云(TransactionalMemoryCloud,以下简称TMC),基于事务内存与云存储技术,设计了一种新型云计算编程存储模型,保证所有的只读事务均不会被撤销,系统可用性与可靠性则通过异步数据副本策略实现。以上特性使得TMC适用于对性能、可扩展性和数据一致性均有严格要求的读密集型应用。
1相关工作
云计算为工业和学术界带来了大机遇,同时也为有效利用云中各类资源提出了挑战。尽管不同的云计算应用存在一定差异,但总的来说云计算应用的支撑平台应具有良好的性能、可扩展性和可靠性。
当前已有的商用云计算系统大多不支持事务特性,但各类相关应用对事务支持的需求却从未停止,例如社交网络、协作编辑、在线游戏等。将一致性检查等工作交给上层用户处理是目前常见的策略[3],但其方法增加了开发者负担,显然不是一种有效的手段。利用事务内存技术实现对云计算应用事务特性的支持是一种可行的新思路,但在研究应用过程中需要注意对各种云计算系统特性的权衡。
文献[4]提出的P-Store能够保证云计算系统的可扩展性和强一致性,但该协议要求只读事务在提交时首先要完成分布式验证,并有可能被回滚或撤销,而本文的TMC则不存在以上限制。文献[5]利用软件事务内存与多版本并发控制技术来支持分布式事务的一致性,但对其他诸如扩展性、可用性等系统特性并未提及,TMC则通过将事务组件与存储组件的解耦,对其进行了统筹权衡的考虑。
2系统建模
TMC包括事务和存储两大组件,事务组件提供逻辑上的并发事务处理,无需了解数据的物理位置;存储组件负责存储数据副本,并保证其一致性,但不必关心事务特性。TMC系统模型如图1所示。
图1中的DC为数据中心,这些数据中心可通过10Gb/s的专用以太网互联(图1中以环为例),被部署为“私有云”或“公有云”。在每个数据中心内部,包含着成千上万台计算/存储机器节点(简称节点)。事务组件负责通过协调管理每个节点上的事务组件代理来接收处理用户通过互联网发来的事务处理请求,存储组件则通过共识协议和链路管理数据及其元数据的所有副本,并向事务组件提供一致、透明和弹性的数据访问服务。
TMC是一个通过消息传递进行通信的分布式系统,其中每个节点只能运行一个内存事务,令Γ={Tx1,…,Txn}表示系统中全体事务的集合。每个数据项则由三元组do=表示,其中do.id为数据项标识,do.value为原始数据,do.ver为数据项版本号。对于某个数据项doi,rep(doi)表示存储doi全部数据副本的节点集合。
任一个内存事务Txi均由事务开始操作Start、针对数据项的读(Read)写(Write)操作序列、事务提交操作Commit或事务撤销操作Abort三部分构成。Txi可由任一个节点启动并读写任一个数据项,事务集T(T?Γ)的历史HIS(T)是由T上的事务操作(Start,Read,Write,Commit,Abort)事件组成的集合。每个Txi还需要维护三个属性writeID、nextID和ts,writeID用于记录Txi中最近提交的写事务(至少包含一个写操作)的时间戳;nextID用于记录下一个将要提交的事务(至少访问Txi中的一个数据项)的时间戳;ts用于记录Txi执行第一个读操作Read1的时间戳,设Read1所访问的数据项所在的内存事务为Txj,则ts=max(Txi.writeID,Txj.writeID),Read1之后读操作所访问的数据项的版本号均不能大于ts。
3事务组件
联系方式
随机阅读
热门排行