Seata的AT模式

212 阅读2分钟

分布式事务:跨服务、跨库、分库分表

一、2PC(两阶段提交)

二、Seata的AT模式

image.png

本地事务 + 二阶段提交 = 最终一致性的解决方案

image.png

1、强一致性:基于CAP理论,对于应用的性能和可用性都会有影响(XA-二阶段提交协议来完成)

2、最终一致性(弱一致性),针对数据一致性要求不高的场景(TCC、可靠性消息模型来实现)

seata四种模式:

image.png

AT模式 = 本地事务 + 二阶段提交 = 最终一致性解决方案

TCC模式 = 三个阶段

2.1 三个核心角色

  • TC:事务协调者,即seata-server客户端,接收事务的注册、提交和回滚。
  • TM:事务发起者,即告诉TC全局事务开始,体积和回滚。
  • RM:事务资源,每一个RM都会作为一个分支事务注册到TC中。

2.2 AT原理

image.png

2.2.1 第一阶段

1、TM向TC开启一个全局事务,此时会创建一个全局的XID,贯穿在整个微服务链路中。

2、首先解析SQL,查询执行前(镜像前)的数据,再执行SQL,再查询执行后(镜像后)的数据。

3、把镜像前后的数据以及业务SQL组成一条回滚日志记录,插入到undo_log表中。

image.png

4、提交前,RM向TC进行注册分支,将当前这条数据设置一个全局锁。

5、本地事务提交,将最终的提交结果上报给TC

2.2.2 第二阶段

提交阶段:

image.png

1、收到TC的分支事务请求后,把请求放入到一个异步队列中,马上返回提交成功的结果给TC。 2、异步任务阶段的分支,根据分支ID,XID,找到相应的undo_log日志进行删除。

回滚阶段:

image.png

1、开启本地事务:收到TC请求之后,开启一个本地事务

2、找出undo log日志:通过分支ID和XID找到undo log日志

3、数据校验:将镜像前后的数据做一个校验,如果有脏数据,seata无法感知何时发生的,介入人工处理

4、根据undo log中的镜像前的数据生成回滚日志

5、提交本地事务,告知TC