分布式事务

2020-05-09  本文已影响0人  lsh的学习笔记

什么是XA事务?

XA协议由Tuxedo首先提出的,并交给X/Open组织,作为资源管理器(数据库)与事务管理器的接口标准。

目前,OracleInformixDB2Sybase等各大数据库厂家都提供对XA的支持。

XA协议采用两阶段提交方式来管理分布式事务

什么是分布式事务?

指的是允许多个独立的事务资源(transactional resources)参与到一个全局事务中。

InnoDB 对分布式事务的支持

InnoDB存储引擎提供了对XA事务的支持,并通过XA事务来支持分布式事务实现

在使用分布式事务时,InnoDB存储引擎的事务隔离级别必须设置为SERIALIZABLE

有哪些部分组成?

XA事务由一个或多个资源管理器(ResourceManagers)、一个事务管理器(TransactionManager)以及一个应用程序(ApplicationProgram)组成。

工作流程

分布式事务使用两段式提交(two phase commit)的方式。

第一阶段

所有参与全局事务的节点都开始准备(PREPARE),告诉事务管理器它们准备好提交了。

第二阶段

事务管理器告诉资源管理器执行 ROLLBACK 还是 COMMIT 。

如果任何一个节点显示不能提交,则所有的节点都被告知需要回滚。

与本地事务的不同

分布式事务需要多一次的 PREPARE 操作,待收到所有节点的同意信息后,再进行 COMMIT 或是 ROLLBACK 操作。

语法

MySQL数据库XA事务的SQL语法如下:

XA [START|BEGIN] xid [JOIN|RESUME];
XA END xid [SUSPEND[FOR MIGRATE]];
XA PREPARE xid;
XA COMMIT xid [ONE PHASE];
XA ROLLBACK xid;
XA RECOVER;

限制

在单个节点上运行分布式事务没有太大的实际意义,但是要在MySQL数据库的命令下演示多个节点参与的分布式事务也是行不通的。

通常来说,都是通过编程语言来完成分布式事务的操作的。

当前Java的JTA(JavaTransactionAPI)可以很好地支持MySQL的分布式事务,需要使用分布式事务应该认真参考其API。

上一篇 下一篇

猜你喜欢

热点阅读