分布式事务
分布式事务
分布式事务
事务
事务特性
分布式事务
分布式事务一致性实现
两阶段提交协议
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