分布式事务

分布式事务

分布式事务

事务

事务特性

分布式事务

分布式事务一致性实现

两阶段提交协议

Dynamic Two Phase Commitment (D2PC) protocol

三阶段提交协议

Paxos

分布式事务实现

事务

事务是计算机应用中不可或缺的组件模型,它保证了用户操作的原子性 ( Atomicity )、一致性 ( Consistency )、隔离性 ( Isolation ) 和持久性 ( Durabilily )。 

事务存在本地事务和分布式事务。本地事务的处理局限在当前事务资源内。

所谓资源,比如数据库连接、数据源、连接的数据库都可以认为是一种资源,数据源可以认为对应的就是连接的那个数据库。

数据库事务是我们经常接触到的一个事务场景,实际上,除了数据库事务之外,我们很少能遇到甚至直接考虑事务的案例。虽然,但是,事务的确不只是说的数据库事务,也不仅限于数据库事务,除了数据库事务之外,也存在其他很多需要考虑事务的情况,只是一般很难碰到这样的特殊场景罢了。

如在单数据源的情况下,对应数据库DBA,数据库连接connection,通过这个connection往数据库中插入2条记录,执行插入后,完成事务提交,本地事务就能保证完成(成功或失败)。这个是最常见的一个本地事务场景,在这个例子中,本地事务实际上依赖于数据库对事务的支持,如果数据库不支持事务,那么在这个例子中,本地事务也无法保证事务完成(成功或失败) 。

但如果是多数据源的情况下,比如有两个数据库DBA,DBB,对应的数据库连接dbca,dbcb,通过dbca往数据库DBA插入一条数据A,通过dbcb往数据库DBB插入一条数据B,完成事务提交,这种情况下本地事务就无法保证事务完成,可能出现A数据插入成功而B数据插入失败,这个时候就需要使用分布式事务了。

事务

事务特性

事务的5个基本特性:

原子性

Atomicity

一致性

Consistency 

隔离性

Isolation 

持久性

Durability 

分布式事务

分布式事务一致性实现

两阶段提交协议

角色

协调者

参与者

基本算法

准备阶段

提交阶段

消息

协议实现

JOTM

JOTM2

两阶段提交协议

角色

协调者

参与者

基本算法

两阶段提交协议由两阶段组成:

准备阶段

准备阶段(Prepare  phase)或叫作准备提交阶段、提交请求阶段(Commit request phase)、请求提交阶段、投票阶段(Voting phase )

提交阶段

提交阶段(Commit phase)或叫作执行阶段、完成阶段(Completion phase )

两阶段提交协议

消息

prepare

Prepare消息也称vote request消息、query to commit消息

agreement 

abort 

commit 

acknowledgment 

rollback 

事务协调者(通常是事务管理器)向每个参与者发送prepare消息时,由于网络故障或者所有参与者都由于故障宕机而无法接收prepare消息,则整个事务过程还没开始就直接结束。

分布式事务实现

JOTM

JOTM2

Atomikos

JBoss JTA

… …

JOTM

资源

资源管理器 

协调者

参与者

事务

事务管理器

JOTM Java Open Transaction Manager实例

JOTM

JOTM(Java Open Transaction Manager)是ObjectWeb的一个开源JTA实现,本身也是开源应用程序服务器JOnAS(Java Open Application Server)的一部分,为其提供JTA分布式事务的功能。 

JOTM

资源

org.objectweb.jotm.Resource资源

javax.transaction.xa.XAResource资源

JOTM

org.objectweb.jotm.Resource资源

实现

org.objectweb.jotm.ControlImpl

实现接口

org.objectweb.jotm.Coordinator

org.objectweb.jotm.RecoveryCoordinator

org.objectweb.jotm.Terminator

org.objectweb.jotm.TimerEventListener

org.objectweb.jotm.Resource

org.objectweb.jotm.Control

实现

org.objectweb.jotm.SubCoordinator

实现接口

org.objectweb.jotm.Resource

JOTM

javax.transaction.xa.XAResource资源

JOTM

协调者

实现

org.objectweb.jotm.ControlImpl

实现接口

org.objectweb.jotm.Coordinator

org.objectweb.jotm.RecoveryCoordinator

org.objectweb.jotm.Terminator

org.objectweb.jotm.TimerEventListener

org.objectweb.jotm.Resource

org.objectweb.jotm.Control

实现

org.objectweb.jotm.SubCoordinator

实现接口

org.objectweb.jotm.Resource

协调者源代码分析

org.objectweb.jotm.ControlImpl

org.objectweb.jotm.SubCoordinator

实际上,org.objectweb.jotm.SubCoordinator才是真正的协调者实现

prepare方法

prepare 方法对应两阶段提交协议的第一阶段准备阶段(Prepare  phase),协调者向所有参与者节点发起Prepare消息询问各个参与者节点是否可以执行提交操作,并开始等待各参与者节点的响应。 关键代码在doPrepare方法中。

JOTM

参与者

JOTM

事务管理器

实现

org.objectweb.jotm.Current

实现接口

javax.transaction.UserTransaction

javax.transaction.TransactionManager

javax.naming.Referenceable

java.io.Serializable

JOTM

JOTM Java Open Transaction Manager实例

JOTM2

Atomikos

X/Open DTP——分布式事务模型, http://www.cnblogs.com/aigongsi/archive/2012/10/11/2718313.html 

相关推荐