分布式事务:跨服务、跨库、分库分表
一、2PC(两阶段提交)
二、Seata的AT模式
本地事务 + 二阶段提交 = 最终一致性的解决方案
1、强一致性:基于CAP理论,对于应用的性能和可用性都会有影响(XA-二阶段提交协议来完成)
2、最终一致性(弱一致性),针对数据一致性要求不高的场景(TCC、可靠性消息模型来实现)
seata四种模式:
AT模式 = 本地事务 + 二阶段提交 = 最终一致性解决方案
TCC模式 = 三个阶段
2.1 三个核心角色
- TC:事务协调者,即seata-server客户端,接收事务的注册、提交和回滚。
- TM:事务发起者,即告诉TC全局事务开始,体积和回滚。
- RM:事务资源,每一个RM都会作为一个分支事务注册到TC中。
2.2 AT原理
2.2.1 第一阶段
1、TM向TC开启一个全局事务,此时会创建一个全局的XID,贯穿在整个微服务链路中。
2、首先解析SQL,查询执行前(镜像前)的数据,再执行SQL,再查询执行后(镜像后)的数据。
3、把镜像前后的数据以及业务SQL组成一条回滚日志记录,插入到undo_log表中。
4、提交前,RM向TC进行注册分支,将当前这条数据设置一个全局锁。
5、本地事务提交,将最终的提交结果上报给TC
2.2.2 第二阶段
提交阶段:
1、收到TC的分支事务请求后,把请求放入到一个异步队列中,马上返回提交成功的结果给TC。 2、异步任务阶段的分支,根据分支ID,XID,找到相应的undo_log日志进行删除。
回滚阶段:
1、开启本地事务:收到TC请求之后,开启一个本地事务
2、找出undo log日志:通过分支ID和XID找到undo log日志
3、数据校验:将镜像前后的数据做一个校验,如果有脏数据,seata无法感知何时发生的,介入人工处理
4、根据undo log中的镜像前的数据生成回滚日志
5、提交本地事务,告知TC