-
Notifications
You must be signed in to change notification settings - Fork 303
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
4cd16c2
commit eaa9639
Showing
2 changed files
with
26 additions
and
0 deletions.
There are no files selected for viewing
26 changes: 26 additions & 0 deletions
26
分布式事务/事务框架/Seata/02~多事务模式/AT 模式/99~参考资料/2022~分布式事务 AT 模式的脏写问题.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 模式的脏写问题 |
Empty file.