分布式事务之Seata的AT模型

在Seata的事务管理中有三个重要的角色:

  • TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。
  • TM (Transaction Manager) - 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。
  • RM (Resource Manager) - 资源管理器:管理分支事务,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
    Seata支持四种不同的分布式事务解决方案:
  • XA
  • TCC
  • AT
  • SAGA
    在这里先简要说一下AT模型
    AT模型是分为两个阶段来工作的,并且该模型保证了事务的最终一致性,但是中间可能会有数据不一致的情况,比如一个交易服务在结算购物车订单时,会将购物车中被结算的商品清空,然后减少被清除的商品的库存,倘若结账时出现错误,并且结账和清空购物车两个接口在不同的事务中,这样就会导致商品未结算,但是实际上购物车中的商品已经被清空了,这样就导致了数据的不一致。
    不过这只是暂时的,因为AT模型的原理是全局事务中有一个事务未提交成功,那么所有的事务都会回滚,并且恢复数据,具体如下:

基本流程图

image

首先该模型开启全局事务
阶段一:所有事务首先向TC注册分支事务,然后执行sql后都会直接提交,并且在undo-log表中存放临时数据,也就是数据快照,以防后面回滚时恢复数据,最后TC报告自己的事务状态。
阶段二:所有事务如果都提交成功,那么所有的分支事务都删除undo-log表中的数据快照,如果有一个及以上的事务提交失败,那么所有已经提交过的事务都回滚,并且恢复数据。

posted @ 2024-10-13 23:29  我睡觉时候不困  阅读(56)  评论(0)    收藏  举报