SpringCloud - 分布式事务

16.谈谈你对分布式事务的理解?

由于单体事务在不同的微服务中,无法保证全局事务的ACID特性。比如创建订单成功,购物车页清理成功了,但是扣减库存失败,此时购物车中的商品信息也清空了,无法回滚。

Seata是解决分布式事务的中间件,Seata事务管理有三个重要的角色,分别是TC事务协调者、TM事务管理器以及RM资源管理器。其中TC可以协调全局事务提交回滚,TM向TC报告方法的开始和结束,RM负责管理分支事务提交或回滚。

Seata中提供了四种不同的分布式事务解决方案,分别是XATCCATSAGA,我们项目中使用的是AT,在这里主要讲下XA和AT,XA和AT都是采用两阶段提交来解决分支事务问题。

  1. XA就是分支事务执行完SQL语句后,会使用锁来锁定资源,通过RM向TC汇报事务状态。如果TC发现有的分支事务没有执行成功,就通知所有的分支事务进行回滚。如果所有的分支事务都执行成功,那么TC就通知所有的分支事务提交。XA在第一阶段不提交事务,在第二阶段提交或者回滚。可以满足事务的强一致性,但是性能比较差。
  2. AT会先在undo log日志中记录更新前的快照,分支事务执行完SQL之后直接提交,然后向TC汇报事务状态。如果有分支事务没有执行成功,那么TC就通知所有的分支事务回滚,那么分支事务就通过各自的undo log日志恢复数据。如果所有的分支事务都成执行成功,那么就通知分支事务进行提交,分支事务收到提交命令之后直接删除undo log日志中的数据。AT在第一阶段就提交了事务,可以保证最终一致性,但是不能保证强一致性,性能比较好。
相关推荐
考虑考虑2 小时前
Springboot环境变量占位符语法
spring boot·后端·spring
lisanmengmeng3 小时前
分布式追踪与监控:Skywalking介绍(一)
分布式·skywalking
HanhahnaH3 小时前
Redis单线程和Tair多线程架构设计对比
分布式·缓存
rustfs3 小时前
MinIO 国产开源平替正式 GA
分布式·docker·云原生·rust
步行cgn4 小时前
Spring 基于 XML 的自动装配:byName 详解
java·后端·spring
不会c+4 小时前
Day02 - 需求分析与用例建模
spring
LuTshoes4 小时前
spring ai 实战 手搓 PlaneExecuteAgent
java·人工智能·spring·ai
边境悍匪5 小时前
蜗牛学苑 Java 智能体学习 Day42|项目周开发技术汇总 1 思维导图复盘
java·开发语言·spring boot·学习·spring
螺蛳粉 螺蛳粉6 小时前
MySQL 分布式集群系列 · 第五篇——全方位对比:NDB、MGR、主从复制、分库分表怎么选?
数据库·分布式·mysql
paopaokaka_luck6 小时前
小学非遗科普平台(AI 非遗科普问答,ECharts学情数据、非遗资源分类与审核,资源收藏下载与学习记录,学习任务发布和作品评分,活动报名签到与统计)
java·人工智能·spring·信息可视化·数据分析·echarts