一:分享下 对阿里的seata 分布式事务中间件的理解
非分布式系统的业务模式如下图:

传统购物流程事务
购物流程:订单-->支付-->物流 三个模块都是连接同一数据库。把三个模块都放在同一个事务中,就可以保证业务的原子性。
分布式架构中的购物流程如下图:

分布式购物流程事务
订单,交易,物流 这三个模块分别拥有自己的数据库。所以无法把三个模块放在同一个数据库事务中。
那seata 是如何来解决分布式事务的呢?看下图

seata 示意图
先来声明几个名词:
a.事务管理者
b.事务发送者
c.XID(用来标记节点事务归属于那个全局事务)
这3个名词并不完全和seata吻合,只是我的理解。
描述下购物流程。seata 的事务处理流程:
整个购物流程 首先发起于 订单模块:
购物各个模块中引入seata 的客户端用于向事务管理者发送信息。
订单:事务发送者-->创建全局事务(生成XID)-->向事务管理者发送本地事务-->等待
交易: 事务发送者-->向事务管理者发送归属于XID的本地事务-->等待
物流: 事务发送者-->向事务管理者发送归属于XID的本地事务-->等待
物流:事务发送者-->向事务管理者申请提交或回滚全局事务-->等待
事务管理者: 检查这个全局事务链上的每个节点事务状态-->如果有1个需要回滚的事务,那就全体回滚,否则就提交--> 通知所有节点事务提交或回滚。
订单,交易,物流 根据接收到的通知,进行本地事务的 提交或回滚。
这样就保证了所有节点事务都是统一的。
最后献上seata 官网链接:seata 分布式事务
对seata 讲解的非常详细的视频:seata 讲解视频