对于分布式系统,事务一致性的处理是比较困难的,幸好借助seata能够快速地解决分布式事务的问题。由于seata at模式对系统的侵入性小,操作上也比较简单,所以项目中大部分情况都是使用该模式。
那 seata at模式对事务一致性是如何处理?是否该方式就能完美解决分布式事务的所有问题?下面是我的一些理解和思考。
seata at模式是通过两阶段提交的机制:
一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
二阶段:
- 提交异步化,非常快速地完成。
- 回滚通过一阶段的回滚日志进行反向补偿。
写隔离
- 一阶段本地事务提交前,需要确保先拿到 全局锁 。
- 拿不到 全局锁 ,不能提交本地事务。
- 拿 全局锁 的尝试被限制在一定范围内,超出范围将放弃,并回滚本地事务,释放本地锁。
以一个示例来说明:
两个全局事务 tx1 和 tx2,分别对 a 表的 m 字段进行更新操作,m 的初始值 1000。
tx1 先开始,开启本地事务,拿到本地锁,更新操作 m &#