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

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

 
阅读更多

    由于事务须要实现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
分享到:
评论

相关推荐

    分布式事务两阶段提交协议的实现方法研究.pdf

    两阶段提交协议是实现分布式事务保证原子性、一致性、隔离性和持久性(即ACID属性)的关键技术之一。 传统的两阶段提交协议(2PC)将事务处理分为两个阶段:预提交阶段和决策阶段。在预提交阶段,事务协调者询问...

    数据库一阶段提交和两阶段提交区别和说明

    一阶段提交(One-Phase Commit)和两阶段提交(Two-Phase Commit)是分布式事务中常见的两种提交协议,它们主要用于保证跨多个数据库节点的事务一致性。 1. **一阶段提交** 一阶段提交简单直接,应用程序向数据库...

    XA两阶段提交及一阶段提交说明

    XA接口支持两阶段提交协议,确保跨多个资源的事务一致性。JTA在Java平台上提供了对XA事务的支持,其规范定义了接口,但具体的实现由供应商提供,如J2EE容器的JTA实现或独立的JTA实现(如JOTM, Atomikos)。 【二...

    分布式事务之两阶段提交,转载自:银河里的星星

    两阶段提交协议(2PC)就是为了实现这种原子性而设计的。它主要分为两个阶段: 1. 准备阶段(Prepare Phase): 在这个阶段,事务协调者(通常是事务发起者)询问所有参与者(每个涉及事务的节点)是否准备执行...

    分布式数据库两阶段提交协议研究与改进.pdf

    《分布式数据库两阶段提交协议研究与改进》这篇论文主要探讨了分布式数据库中的关键问题——如何确保分布式事务的ACID特性,即原子性、一致性、隔离性和持久性。为了解决这一问题,文章深入研究了两阶段提交(2PC)...

    分布式短事务系统中提交协议的研究.pdf

    由于短事务的这些特点,传统的两阶段提交协议不适合直接应用于短事务系统。因此,研究者通过创新设计了一种适合短事务特点的提交协议,既保留了传统协议的可靠性,同时克服了它们在短事务场景下的不足,提高了系统的...

    基于非阻塞的分布式事务提交协议的实现.pdf

    标题《基于非阻塞的分布式事务提交协议的实现》和描述提到了关于分布式事务提交协议的最新研究和实现,具体内容中介绍了两阶段提交(2PC)和三阶段提交(3PC)协议的缺点,并提出了一种新的基于非阻塞的两阶段提交协议...

    WebSphere MQ与Oracle 数据库的XA事务(两阶段提交)实现

    XA事务是一种两阶段提交(Two-Phase Commit, 2PC)协议,广泛应用于多资源协调的分布式系统中。 首先,让我们了解一下MQ独立事务。在WebSphere MQ中,每个消息发送或接收操作都可以作为一个事务进行。这意味着如果...

    mysql索引,分布式事务,三阶段协议,b+树

    为了缓解2PC的问题,提出了三阶段提交协议,分为预准备、预备和提交三个阶段。3PC增加了确认阶段,降低了阻塞概率,但仍然存在网络延迟和单点故障的风险。 四、Java与MySQL交互 Java是常用的数据库操作语言,通过...

    关于2PC协议对分布式数据库的事务恢复机制.pdf

    二阶段提交协议(2PC)是分布式数据库系统中的一种事务提交协议,它可以确保分布式数据库系统中的事务恢复机制。2PC协议可以分为两个阶段:准备阶段和提交阶段。在准备阶段,所有结点都将其事务状态设置为“准备”...

    一种基于非阻塞的分布式数据库原子提交协议.pdf

    NB-DACP协议的主要特点在于它消除了三阶段提交协议中的“投票”阶段,这一阶段的消除对于提高事务的执行效率至关重要。通过严格的并发控制协议,参与者可以保证事务的提交是在并发机制下串行进行,从而确保了事务的...

    心跳技术3阶段协议

    根据给定文件的信息,本文将深入探讨一种新颖的基于心跳技术的三阶段提交协议(3PC),这是一种在分布式数据库管理中确保数据一致性和事务正确性的关键机制。文章首先概述了分布式事务提交的主要背景及其重要性,并...

    atomikos分布式事务提交框架

    协调器通过两阶段提交(2PC)协议确保所有参与事务的节点都能达成一致。 4. **可扩展性**:Atomikos设计时考虑了高并发和大规模分布式系统的需要,能够处理大量并发的事务,并且可以动态调整事务管理的性能和资源...

    两阶段提交1

    两阶段提交(Two-Phase Commit, 2PC)是一种分布式系统中常见的用于保证事务一致性的协议,主要用于解决数据库集群中的事务处理问题。该协议确保所有参与者(如数据库节点)对事务的提交或回滚达成一致,以保持数据...

    分布式系统一致性发展史(二)丨两阶段和三阶段提交1

    【分布式系统一致性发展史(二)】:两阶段与三阶段提交 在分布式系统中,一致性是确保系统在面临各种网络、硬件故障时仍然能够保持数据一致性的关键特性。本篇将探讨两种早期用于解决一致性问题的协议:两阶段提交...

    会员版分布式事务.rar

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

    greenplum两阶段事务详解

    在Greenplum数据库中,事务是通过两阶段提交协议来实现的,即Prepare和Commit两个阶段。 在事务的开始阶段,客户端会向服务器发送BeginTransaction命令,以启动事务。服务器收到命令后,会创建一个事务块...

    oracle-mysql 两阶段提交例子(ejb3)

    两阶段提交协议包括两个主要阶段: 1. **准备阶段**(Prepare Phase):在这个阶段,事务协调者向所有参与事务的资源管理器发送“准备”命令。每个资源管理器执行事务操作,并记录必要的信息以便能够在后续阶段进行...

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

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

Global site tag (gtag.js) - Google Analytics