diff --git "a/\345\210\206\345\270\203\345\274\217\344\272\213\345\212\241/\344\272\213\345\212\241\346\241\206\346\236\266/Seata/02~\345\244\232\344\272\213\345\212\241\346\250\241\345\274\217/AT \346\250\241\345\274\217/99~\345\217\202\350\200\203\350\265\204\346\226\231/2022~\345\210\206\345\270\203\345\274\217\344\272\213\345\212\241 AT \346\250\241\345\274\217\347\232\204\350\204\217\345\206\231\351\227\256\351\242\230.md" "b/\345\210\206\345\270\203\345\274\217\344\272\213\345\212\241/\344\272\213\345\212\241\346\241\206\346\236\266/Seata/02~\345\244\232\344\272\213\345\212\241\346\250\241\345\274\217/AT \346\250\241\345\274\217/99~\345\217\202\350\200\203\350\265\204\346\226\231/2022~\345\210\206\345\270\203\345\274\217\344\272\213\345\212\241 AT \346\250\241\345\274\217\347\232\204\350\204\217\345\206\231\351\227\256\351\242\230.md" new file mode 100644 index 00000000..51f5143c --- /dev/null +++ "b/\345\210\206\345\270\203\345\274\217\344\272\213\345\212\241/\344\272\213\345\212\241\346\241\206\346\236\266/Seata/02~\345\244\232\344\272\213\345\212\241\346\250\241\345\274\217/AT \346\250\241\345\274\217/99~\345\217\202\350\200\203\350\265\204\346\226\231/2022~\345\210\206\345\270\203\345\274\217\344\272\213\345\212\241 AT \346\250\241\345\274\217\347\232\204\350\204\217\345\206\231\351\227\256\351\242\230.md" @@ -0,0 +1,26 @@ +> [原文地址](https://cloud.tencent.com/developer/article/2048786),这篇文章讨论了分布式事务中的 AT 模式(Automatic > Transaction)及其可能出现的脏写问题,以及如何解决这些问题。 +> +> 以下是文章的主要内容概述: +> +> 1. **AT 模式原理**: +> - AT 模式是一种分阶段提交的事务模型,与 XA 模型相比,它解决了资源锁定周期过长的问题。 +> - 在 AT 模式下,事务执行完 SQL 后直接提交,同时 RM(资源管理器)记录更新前后的数据快照到`undo_log`中。 +> - 阶段一包括注册分支事务、记录 undo-log、执行业务 SQL 并提交、报告事务状态。 +> - 阶段二如果是提交,RM 只需删除 undo-log;如果是回滚,则根据 undo-log 恢复数据。 +> 2. **AT 模式的脏写问题**: +> - 脏写问题发生在并发事务中,一个事务读取了另一个事务未提交的数据,并基于此进行操作,导致数据不一致。 +> - 文章通过一个具体案例说明了脏写问题的发生过程。 +> 3. **AT 模式的写隔离机制**: +> - 引入全局锁来解决脏写问题,全局锁由 TC(事务协调器)记录,确保同一行数据在同一时间只被一个事务操作。 +> - 如果两个事务都被 Seata 管理,它们会通过全局锁来避免脏写。 +> - 如果只有一个事务被 Seata 管理,另一个非 Seata 管理的事务可能会引起脏写问题。 +> 4. **两种事务管理情况下的讨论**: +> - 如果两个事务都被 Seata 管理,通过全局锁和重试机制可以避免死锁和脏写。 +> - 如果只有一个事务被 Seata 管理,Seata 会记录两份快照(修改前后),在回滚时进行比对,如果发现不一致,则释放全局锁并记录异常。 +> 5. **结论**: +> - AT 模式通过全局锁和快照机制解决了脏写问题,保证了数据的一致性。 +> - 与 XA 模式相比,AT 模式在某些情况下提供了更好的性能和灵活性。 +> +> 文章还提到了 Seata 框架,它是一个开源的分布式事务解决方案,支持 AT 模式。文章最后提到了作者参与腾讯云自媒体同步曝光计划,并说明了原始发表时间。 + +# 分布式事务 AT 模式的脏写问题 diff --git "a/\345\210\206\345\270\203\345\274\217\344\272\213\345\212\241/\344\272\213\345\212\241\346\241\206\346\236\266/Seata/09~Seata \346\236\266\346\236\204\345\216\237\347\220\206/README.md" "b/\345\210\206\345\270\203\345\274\217\344\272\213\345\212\241/\344\272\213\345\212\241\346\241\206\346\236\266/Seata/09~Seata \346\236\266\346\236\204\345\216\237\347\220\206/README.md" new file mode 100644 index 00000000..e69de29b