Seata AT模式适用场景及相关原理

简介: Seata AT模式适用场景及相关原理

适用场景

Seata AT模式是无侵入的分布式事务解决方案,适用于不希望对业务进行改造的场景,几乎0学习成本。在业务开发过程中,开发人员只需要关注自己需要处理的业务逻辑即可,编码方式几乎和没有分布式事务一样,Seata AT模式会自动完成二阶段的提交和回滚操作。


image.png

从上图可以看出,整个业务功能开发中,只有业务SQL这块是需要开发人员关心的,其他阶段全部交由Seata框架来托管。

原理

  • 一阶段
    在一阶段,Seata会针对DataSource进行代理,从而拿到用户需要执行的业务SQL,通过对业务SQL的语义解析,在业务数据被更改前,记录为BeforeImage,然后再执行业务SQL,在业务数据更改后的,将其记录为AfterImage,并生成行锁(通过RM分支事务注册的方式),最后提交本地数据库事务。上述操作必须在一个数据库事务内完成,保证一阶段的原子性。


image.png

  • 二阶段提交
    如果所有的分支事务一阶段全部提交成功,那么二阶段只需要删除一阶段记录的BeforeImageAfterImage和行锁即可。

image.png

二阶段回滚

如果一阶段一旦有任何的分支事务出现异常或者产生超时,都会触发Seata发起全局事务的回滚指令。Seata利用一阶段记录的BeforeImage生成反向SQL来还原业务数据。默认情况下,在还原前需要校验当前业务数据是否与AfterImage记录的数据一致来判断是否被脏写了。如果出现数据被脏写的情况,就需要人工介入处理。

image.png

小结

在Seata AT模式当中,一阶段以及二阶段的提交和回滚均由框架自动完成,开发人员只需要关注业务SQL即可,所以说AT模式是一种无侵入的分布式事务解决方案。


相关文章
|
6月前
|
自然语言处理 监控 Dubbo
Seata常见问题之使用tcc模式配置yml如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
205 4
|
6月前
|
数据库
|
30天前
|
SQL JavaScript 数据库连接
Seata的工作原理
【10月更文挑战第30天】
28 3
|
5月前
|
Apache 开发者
Apache Seata 如何解决 TCC 模式的幂等、悬挂和空回滚问题
【6月更文挑战第8天】Apache Seata 是一款分布式事务框架,解决TCC模式下的幂等、悬挂和空回滚问题。通过记录事务状态处理幂等,设置超时机制避免悬挂,明确标记Try操作成功来处理空回滚。Seata 提供丰富配置和管理功能,确保分布式事务的可靠性和效率,支持复杂事务处理场景,为企业业务发展提供支持。
219 7
|
6月前
|
存储 Java Nacos
Seata常见问题之xa模式出现错误xid is not valid如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
212 4
|
6月前
|
NoSQL Java 数据库
Seata常见问题之xa模式下插入一条数据再更新这条数据会报错如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
195 2
|
6月前
|
SpringCloudAlibaba Java 数据库
SpringCloud Alibaba微服务 -- Seata的原理和使用
SpringCloud Alibaba微服务 -- Seata的原理和使用
|
6月前
|
数据库 开发者
Seata的 TCC 模式
Seata的 TCC 模式
|
6月前
|
监控 API 数据库
Seata常见问题之Seata AT的设计不支持使用临时表如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
|
6月前
|
Java 关系型数据库 微服务
Seata常见问题之项目一直启动不成功如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
545 0
下一篇
无影云桌面