开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(三):MyCat - 架构剖析 - 核心技术之分布式事务的支持】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/757/detail/13301
MyCat - 架构剖析 - 核心技术之分布式事务的支持
内容介绍
一、 MyCat 分布式事务实现
二、 Mycat SQL 路由实现
三、 Mycat 跨库 JOIN
四、 Mycat 数据汇聚与排序
一、 MyCat 分布式事务实现
在这一章节主要讲解在 Mycat 当中如何支持分布式事务,不讲解分布式事务的解决方案,如两阶段提交、分阶段提交事务补偿以及基于 MQ 来实现事务的最终一致性。
Mycat 在 1.6 版本以后已经支持 XA 分布事务类型,具体使用流程如下:
1.在应用层需要设置事物不能自动提交(开启事务的手动提交)
set autommit=0
2.在 SQL 中设置 XA 为开始状态(开启一个基于 XA 的分布式事务类型)
set xa=on
3.执行 SQL
(1)insert into user(id,name,sex)values(1,‘Tom’,‘1’),(2,‘rose’,‘2’),(3,‘leo’,‘1’)(4,‘lee’,‘1’)
4.对事务进行提交或回滚
(1)commit/rollback
这幅流程图描述了应用程序操作 Mycat,Mycat 最终操作底层的 MySQL 的流程。
在应用程序中要执行一个比较复杂的操作,涉及到事务的话,首先要设置提交方式为手动提交;其次设置标识为二;标识已经开启了命令为XA的事务管理器,XA事务管理器需要通知底层的 MySQL 要进行的一些事务的操作,然后再进行一个预操作。
预操作指的是要插入对应的数据,插入数据是要到各个节点中去插入数据,如果有任何一个节点在执行 insert 语句返回的结果是失败,那么整个事物都要进行回滚(rollback),在分布式事务当中,这个事物叫群居事物;每一个 MySQL 事务是分支事务,在分支事务当中有任何一个事务在执行中失败了,那么整个群居事务都需要回滚(rollback),即其他的节点也需要回滚(rollback),以保证事物的一致性。
假如在执行 insert 语句时,三个 MySQL 都执行成功了,那么整个事务都可以进行提交(commit)