3.4 原子事务.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.4 原子事务.doc

3.4 原子事务 迄今为止我们已经研究的所有同步技术在其本质上来说都是处于底层的,比如信号量。这些技术需要程序员密切注意互斥、临界区管理、死锁预防、崩溃恢复等问题的细节。而我们真正喜欢的是更高层次的抽象,也就是要隐藏这些技术问题,允许程序员将精力集中在算法和进程如何并行运行上。这样的抽象是存在的,而且被广泛应用在分布式系统中。我们称其为原子事务,或简称为事务。术语原子操作也被广泛使用。本节将会涉及原子事务的使用、设计和实现。 3.4.1 原子事务简介 原子事务的最初模型来源于商业社会。假设International Dingbat公司需要一批装饰品,他们与潜在的供应商(因产品质量而远近闻名的美国Widget公司)进行了联系,希望六月份能交付10万件10厘米的紫色装饰品。Widget公司提出12月份交付10万件淡紫色装饰品。Dingbat公司同意对方开出的价格,但不喜欢淡紫色,并且希望6月份到货,而且因为自己的客户是国际客户,因此坚持要10厘米的产品。Widget公司答复说10月份提供3 15/16英寸的淡紫色装饰品。经过更近一步的谈判,双方最终同意8月15日交付3 959/1024英寸的紫罗兰色装饰品。 到此为止,双方就可以自由中断本次讨论了,这样就返回到了开始谈判前的状态。然而,一旦公司双方签定了合同,那么不论发生什么事情,他们在法律上都有责任完成该合约。因此在双方还未签字之前,任何一方都可以反悔,就象什么都没有发生一样,但是一旦双方都签了字,他们就不能再反悔,事务就必须被执行。 计算机模型有些类似。一个进程宣布它想同其他的一个或几个进程开始一个事务。它们可以就不同的选择进行协商、创建、删除对象,执行一段时间的操作。然后发起者宣布它希望其它进程能保证任务完成。如果其它进程都同意,那么就达成了永久的协议。如果有一个或几个进程拒绝(或在同意前崩溃),那么就会返回到事务开始前的状态。这时对象,文件,数据库等方面的副作用都会神奇地消失。这种要么全有要么全无的特性简化了程序员的工作。 计算机系统中对事务的使用可以回溯到20世纪60年代。在硬盘和在线数据库出现之前,所有的文件都保存在磁带上。设想有一个有自动盘点系统的超级市场,每天关门后,计算机对两盘作为输入的磁带进行处理,第一盘磁带存有当天早晨开门以前的所有库存,第二盘存有当天的更新列表:已销售给客户的产品和供应商交付的产品。计算机从两盘磁带上读取数据,并生成新的主库存磁带,如图3-14所示。 图3-14 更新主磁带是容错的 这种设计的最大优点(尽管与它生活在一起的人们并没有意识到)在于对任何原因引起的运行错误,所有的磁带都可以倒卷(rewound),其工作可以毫无损失的重新开始。因此老式的磁带系统具有了原子事务要么全有要么全无的特性。 现在来看一个当前如何在线更新数据库的银行应用的例子。客户通过带有调制解调器的PC机连接到银行,想将一个帐户下的钱取出再存入另一帐户。 操作通过下面两步执行: 提取(金额,帐户1)。 存入(金额,帐户2)。 如果电话连接在第一步之后第二步之前中断,那么第一个帐户已被取出而第二个帐户却没有存入。钱就消失在了未知的空间中。 将这两个操作组成一个原子事务可以解决这个问题。要么两个都执行,要么一个也不执行。关键是事务执行失败后能返回到最初状态。我们真正需要的是象使用磁带时那样的对数据库倒卷的方法。这种能力是原子事务必须提供的。 3.4.2 事务模型 现在将就什么是事务以及它的属性是什么提出一个更精确的模型。假设系统由一些相互独立的进程组成,每个进程都会随机出错。通讯一般来说是不太可靠的,消息会丢失。但是底层可以采用超时重发协议恢复丢失的消息。因此我们可以假定通信错误已经被底层软件透明的处理了。 稳定存储器 存储器有三种分类。第一种是普通的RAM存储器,当电源出错或机器崩溃时会丢失信息。第二种是磁盘存储器,它不受CPU错的影响,但磁头错会导致信息丢失。 最后一种是稳定存储器(stable storage)。它不受洪水地震之类大灾难之外的任何其它错误的影响。稳定存储器(stable storage)可以通过两个普通磁盘来实现。如图3-15(a)所示。驱动器2上的每一块是驱动器1上相应块的精确拷贝。当更新一个块时,首先更新并检查驱动器1上的块,然后驱动器2上的块。 图3-15 (a)稳定存储器 (b)盘1更新后崩溃 (c)错误的地方 假设系统在更新驱动器1之后更新驱动器2之前崩溃,如图3-15(b)所示。在恢复时,磁盘可以一块一块的进行比较,当两个相应块不一致时,可以假定驱动器1是正确的(因为驱动器1总是先于驱动器2更新),因此将新块从驱动器1拷贝到驱动器2。当恢复过程完成后,两个驱动器又一致了。 另一个潜在的问题是磁盘块的自然损坏。垃圾微粒或者一般的磨损和破裂

文档评论(0)

gshshxx + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档