xa readme updated

This commit is contained in:
yedongfu 2021-07-01 17:02:09 +08:00
parent 89879aba1a
commit 2fbbc5efc1

View File

@ -43,14 +43,32 @@ UPDATE accounts SET balance = balance + 100 WHERE id = 2;
### XA ### XA
XA是由X/Open组织提出的分布式事务的规范XA规范主要定义了(全局)事务管理器(TM)和(局部)资源管理器(RM)之间的接口。本地的数据库如mysql在XA中扮演的是RM角色
XA一共分为两阶段 XA一共分为两阶段
第一阶段prepare事务管理器向所有本地资源管理器发起请求,询问是否是 ready 状态,所有参与者都将本事务能否成功的信息反馈发给协调者; 第一阶段prepare即所有的参与者RM准备执行事务并锁住需要的资源。参与者ready时向TM报告已准备就绪。
第二阶段 (commit/rollback)事务管理器根据所有本地资源管理器的反馈,通知所有本地资源管理器,步调一致地在所有分支上提交或者回滚 第二阶段 (commit/rollback)当事务管理者(TM)确认所有参与者(RM)都ready后向所有参与者发送commit命令
目前主流的数据库基本都支持XA事务包括mysql、oracle、sqlserver、postgre 目前主流的数据库基本都支持XA事务包括mysql、oracle、sqlserver、postgre
我们看看本地数据库是如何支持XA的
第一阶段 准备
```
XA start '4fPqCNTYeSG'
UPDATE `user_account` SET `balance`=balance + 30,`update_time`='2021-06-09 11:50:42.438' WHERE user_id = '1'
XA end '4fPqCNTYeSG'
XA prepare '4fPqCNTYeSG'
```
当所有的参与者完成了prepare就进入第二阶段 提交
```
xa commit '4fPqCNTYeSG'
```
### xa实践 ### xa实践
介绍了这么多我们来实践完成一个微服务上的xa事务加深分布式事务的理解这里将采用[dtm](https://github.com/yedf/dtm.git)作为示例 介绍了这么多我们来实践完成一个微服务上的xa事务加深分布式事务的理解这里将采用[dtm](https://github.com/yedf/dtm.git)作为示例
@ -97,6 +115,11 @@ xa commit '4fPqCNTYeSG'
xa commit '4fPqCPijxyC' xa commit '4fPqCPijxyC'
``` ```
整个交互的时序详情如下
<img src="https://pic2.zhimg.com/v2-4b8483ebc69d3b19adc761c7ebd83f61_b.png" />
### 总结 ### 总结
至此一个完整的xa分布式事务介绍完成。
在这篇简短的文章里,我们大致介绍了 事务->分布式事务->微服务处理XA事务。有兴趣的同学可以通过[dtm](https://github.com/yedf/dtm)继续研究分布式事务 在这篇简短的文章里,我们大致介绍了 事务->分布式事务->微服务处理XA事务。有兴趣的同学可以通过[dtm](https://github.com/yedf/dtm)继续研究分布式事务