`
shuzheng5201314
  • 浏览: 198283 次
  • 来自: 北京
社区版块
存档分类
最新评论

事务的一阶段提交协议和二阶段提交协议

 
阅读更多

    由于事务须要实现ACID,即原子性、一致性、隔离性、持久性,所以须要採用一定的机制来保证,通常採用的是分阶段提交的方式。

 

    XA:XA协议。规定事务管理器和资源管理器接口。採用二阶段提交协议。

一阶段提交协议

    一阶段提交协议相对简单。例如以下图:

    

    当然,前提是开启了事务,然后在应用程序发出提交/回滚请求后,数据库运行操作,而后将成功/失败返回给应用程序。程序继续运行。

    一阶段提交协议相对简单。简单带来的长处就是,它不用再与其它的对象交互。节省了推断步骤和时间,所以在性能上是在阶段提交协议中对好的。

二阶段提交协议

    一阶段提交协议有其长处,但缺点也非常明显:

 

  • 数据库确认运行事务的时间较长。出问题的可能性就随之增大。
  • 假设有多个数据源,一阶段提交协议无法协调他们之间的关系。

     

 

   所以在一阶段协议的基础上。有了二阶段协议,二阶段协议的优点是加入了一个管理者角色,例如以下:

    

    非常明显。二阶段协议通过将两层变为三层。添加了中间的管理者角色,从而协调多个数据源之间的关系,二阶段提交协议分为两个阶段。

    第一阶段

    

    应用程序调用了事务管理器的提交方法。此后第一阶段分为两个步骤:

 

  • 事务管理器通知參与该事务的各个资源管理器。通知他们開始准备事务。
  • 资源管理器接收到消息后開始准备阶段,写好事务日志并运行事务,但不提交,然后将是否就绪的消息返回给事务管理器(此时已经将事务的大部分事情做完,以后的内容耗时极小)。

     

 

    第二阶段

    

    第二阶段也分为两个步骤:    

 

  • 事务管理器在接受各个消息后,開始分析,假设有随意其一失败。则发送回滚命令,否则发送提交命令。
  • 各个资源管理器接收到命令后,运行(耗时非常少)。并将提交消息返回给事务管理器。

     

    事务管理器接受消息后。事务结束。应用程序继续运行。
    为什么要分两步运行?一是由于分两步。就有了事务管理器统一管理的机会;二尽可能晚地提交事务,让事务在提交前尽可能地完毕全部能完毕的工作,这样。最后的提交阶段将是耗时极短。耗时极短意味着操作失败的可能性也就减少。
    同一时候。二阶段提交协议为了保证事务的一致性,无论是事务管理器还是各个资源管理器。每运行一步操作。都会记录日志,为出现问题后的恢复准备根据。
    二阶段提交协议的存在的弊端是堵塞,由于事务管理器要收集各个资源管理器的响应消息,假设当中一个或多个一直不返回消息,则事务管理器一直等待,应用程序也被堵塞,甚至可能永久堵塞。

事务与协议

    那么本地事务和分布式事务,分别採用的是哪些协议?我在RedBooks的一个文档中看到的是:
Global transactions
    Although the XAResource interface is intended to support two phase commit, the specification does not force an adapter to support two phase commit. However, if the resource adapter does implement XAResource it must also implement support for one phase commit. This allows the transaction manager to do one phase commit optimization (explained later) by setting the onePhase flag to true when doing acommit.……
Local transactions
    A local transaction is managed by the resource manager without the need for an 
external transaction manager, and can be utilized when only one resource is 
involved. Local transactions only support one phase commit, because they only 
reference one EIS.……
    大意是:尽管实现XA接口的目的是为了支持二阶段提交协议,可是它也支持一阶段提交协议。本地事务仅仅支持一阶段提交。分布式事务默认採用的是二阶段提交。假设在分布式事务中非得使用一阶段提交协议。那么仅仅要数据源多余一个就会抛出异常。假设仅仅有一个数据源则正确运行。

总结

    一阶段提交协议和二阶段提交协议仅仅是比較经常使用的两个,此外还有其它协议,可自行研究。
 
转自:http://www.cnblogs.com/blfshiye/p/5207901.html
分享到:
评论

相关推荐

    会员版分布式事务.rar

    在分布式事务两阶段提交协议中,有一个主事务管理器负责充当分布式事务协调器的角色。事务协调器负责整个事务并使之与网络中的其他事务管理器协同工作。 为了实现分布式事务,必须使用一种协议在分布式事务的各个...

    分布式事务思想和分布式系统入门.txt

    交易中间件与数据库通过 XA 接口规范,使用两阶段提交来完成一个全局事务, XA 规范的基础是两阶段提交协议。 第一阶段是表决阶段,所有参与者都将本事务能否成功的信息反馈发给协调者;第二阶段是执行阶段,协调者...

    分布式实时事务一阶段实时提交 (2006年)

    在此基础上,提出了适合于分布式实时事务的一致性实时提交协议——一阶段实时提交协议(1PRCP),1PRCP通过参与者与协调者的一次消息交换,在一个阶段完成分布式实时事务的提交活动。结合超时恢复协议,1PRCP能避免...

    论文研究-移动广播环境中实时事务处理性能研究.pdf

    第一阶段在移动主机(mobile hosts,MHs)上处理,第二阶段在服务器上处理。移动主机(MHs) 上所有移动事务执行局部部分向后有效性确认,与在服务器提交事务进行有效性确认。如果移动事务通过MH上部分有效性确认,提交...

    事务讨论笔记

    XA 是一个两阶段提交协议,该协议分为以下两个阶段: 第一阶段:事务协调器要求每个涉及到事务的数据库预提交(precommit)此操作,并反映是否可以提交. 第二阶段:事务协调器要求每个数据库提交数据。 BASE理论 ...

    数据库并发控制技术论文

    2PC是指Oracle的两阶段提交协议(Two-Phase Commit protocol)。 2PC用于确保所有分布式事务能够同时提交(Commit)或者回滚(Rollback),以便使的数据库能够处于一致性状态(consistent state)。 分布式事务可以...

    分布式系统中的事务-研究论文

    它们涉及使用两阶段事务提交协议。 第一阶段称为准备阶段。 在第二阶段中,将提交事务或将其回滚。 简体中文:考虑不同类型的交易。 当一个或多个操作员被两个或多个数据库中的数据更新时,将发生分布式事务。 他们...

    嵌入式系统/ARM技术中的浅谈事务管理器的事务恢复处理方案

    随来社会的进步,计算机的广泛应用,很多事务处理过程中事务的恢复...假定回滚是事务二阶段提交协议的一种效率优化策略,事务发起者在决定提交之前和资源在准备好之前都不用写任何日志。这样在失败发生后重新启动时,所

    一种基于两阶段封锁的分布式实时提交协议 (2009年)

    分析了当提交状态参与者允许执行状态的参与者访问其数据时,由数据冲突访问而引起的各种依赖关系,提出了一种基于两阶段封锁的乐观提交协议(OCP)。让参与者先发送一个WORK-STARTED消息来代替WORKDONE消息,考虑依赖关系...

    淘淘商城taotao.mail

    三阶段提交协议,是二阶段提交协议的改进阶段,插入了一个preCommit阶段,使得原先的二阶段提交 执行步骤: 1.协调者向所有参与者发出包含的事务内容的canCommit请求,询问是否可以提交事务,并等待所有参与者回复 2....

    我叫王小贱之简易项目

    三阶段提交协议,是二阶段提交协议的改进阶段,插入了一个preCommit阶段,使得原先的二阶段提交 执行步骤: 1.协调者向所有参与者发出包含的事务内容的canCommit请求,询问是否可以提交事务,并等待所有参与者回复 2....

    分布式事务入门GitChat问题实录解答

    单数据库的事物隔离级别, 三阶段协议币两阶段提交协议多了一个阶段,那么多出来的那一个阶段操作带来什么好处

    xaplus-engine:基于XA和XA +协议的事务处理引擎

    这是两阶段协议,其中包含准备事务和决定提交/回滚的步骤。 接下来,引擎使用XA +接口(请参阅2)与全局事务参与者之间进行通信。 上级引擎或全局事务的发起者还可以使事务记录事务的所有决策,并在需要时进行...

    Web服务事务处理系统的研究与实现 (2005年)

    Web服务具有良好的互操作性,能有效地支持软件的集成。在集成和交互过程中,Web服务需要事务的支持获得一致和可靠的结果...在协调器和参与者的交互过程中使用两阶段提交协议保证事务的原子性和一致性。该系统在处理过程中

    数据库原理与应用试题及答案.pdf

    在数据库系统中,读脏数据是指一个事务读了另一个事务( ) A. 未更新的数据 B. 未撤销的数据 C. 未提交的数据 D. 未刷新的数据 3. 加锁协议中规定“先申请先服务”的原则,可以避免数据库系统出现( ) A. 活锁 B. ...

    微服务架构分布式事务解决方案设计思路

    一、分布式事务方案:最终一致性、事务补偿、TCC、两阶段提交、最大能力通知等。具体结合业务场景。很多大型企业自主研发了自己的分布式事务解决方案,如:支付宝 XTS,去哪儿QMQ。1.基于可靠消息的最终一致性解决...

    数据库原理与应用试题及答案.doc

    在数据库系统中,读脏数据是指一个事务读了另一个事务( ) A. 未更新的数据 B. 未撤销的数据 C. 未提交的数据 D. 未刷新的数据 3. 加锁协议中规定“先申请先服务”的原则,可以避免数据库系统出现( ) A. 活锁 B. ...

    clepsydra:小型分布式数据库协议

    OV 将复制、事务提交和并发控制组合到一个协议中。概括该协议的简短版本是: 事务表示为快照上的确定性 thunk。 每个事务都分配了一个全局唯一的时间戳。 交易分为两个阶段:S 阶段和 E 阶段。 S 阶段(存储)由无...

    tapir:TAPIR分布式事务存储系统

    一种旨在与VR配合使用的可扩展,分布式存储系统的实现,该系统使用两阶段提交来支持分布式事务,并同时支持乐观并发控制和严格的两阶段锁定。 回购的结构如下: / lib-节点之间通信的传输库。 这包括基于UD

    Atomikos3.9官方包文档以及实例

    XA协议采用两阶段提交方式来管理分布式事务。XA接口提供资源管理器与事务管理器之间进行通信的标准接口。XA协议包括两套函数,以xa_开头的及以ax_开头的。 以下的函数使事务管理器可以对资源管理器进行的操作: 1)...

Global site tag (gtag.js) - Google Analytics