分布式事务之seata


            _       _       
           | |     | |      
  ___  __ _| |_   _| |_ ___ 
 / __|/ _` | | | | | __/ _ \
 \__ \ (_| | | |_| | ||  __/
 |___/\__,_|_|\__,_|\__\___|
                            

在这里插入图片描述
在这里插入图片描述
首先,给出Seata生命周期的定义

  • TM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID。
  • XID 在微服务调用链路的上下文中传播。
  • RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖。
  • TM 向 TC 发起针对 XID 的全局提交或回滚决议。
  • TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求。

一开始不太理解seata的生命周期(调用过程),反复多次阅读文档后,发现seata的生命周期如果不那么术语化去理解反而更好理解,

这里我们用一个生活中的例子来理解

首先,将TM比作村委会,TC比作当地政府,RM比作村民

1.首先村委会商议决议出一个提案为村民谋福利,将提案上报给当地政府 — 申请开启全局事务

当地政府下发提案申请表,要求村委会将详细说明填写好后提交 — 提案申请表就是那个全局唯一的 XID

2.村委会下发该提案告知村民,并征集村民意见 — 村民都知道消息了就相当于XID 在微服务调用链路的上下文中传播

3.村民统一意见后,上报给村委会 — 就相当于村民加入了这个事务

4.虽然决定由村民决定,但是对接政府的是村委会 — 相当于TM 向 TC 发起针对 XID 的全局提交或回滚决议

5.政府接收到消息后,执行该提案(或是拨款,或是给补给) — TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求

猜你喜欢

转载自blog.csdn.net/codedecentt/article/details/112998995