SpringCloud Day13---SpringCloud Alibaba Seata 处理分布式事务(三)

简介: SpringCloud Day13---SpringCloud Alibaba Seata 处理分布式事务(三)

16.6 Test

462d942bb9a70c81ae5e9eeb889bfe8d.jpg

16.6.1 数据库初始情况


SELECT * FROM seata_order.t_order


7213f86ef6fc76b4a0ac6be591f5f107.png


SELECT * FROM seata_storage.t_storage


607a6ec3e28ddc00bd9b6d5c1726a987.png


SELECT * FROM seata_account.t_account;


3d8b3e30edd542fd032cb4fd82b80ddf.png


16.6.2 正常下单


访问: http://localhost:2001/order/create?userId=1&productId=1&count=10&money=100


数据库情况:


b59cb977ef48eefb736535272f393719.png


aa3d4968b12f725ff998cd16f86dd1ed.png

396b774f99be0385bc984e3e2fdb6c04.png

16.6.3 超时异常,没加@GlobalTransactional


AccountServiceImpl添加超时

4e8dc4811ab853f3936d49fc2717d50e.png

数据库情况:


a277a8cd543edca3add2495144045b61.png

8d25a3bb38a9d8be808dedd67b38dc7e.png


384423982d071ec507a7fa51cbd70e7b.png

故障情况:


当库存和账户金额扣减后,订单状态并没有设置为已经完成,没有从零改为1.而且由于feign的重试机制,账户余额还有可能被多次扣减


16.6.4 超时异常,添加@GlobalTransactional


AccountServiceImpl添加超时

OrderServiceImpl添加@GlobalTransactional


57878fabb04319838ae562d5f9de653c.png


结果:下单后数据库数据并没有任何改变,记录都添加不进来


16.7 补充

16.7.1 Seata


  • 2019年1月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案
  • Simple Extensible Autonomous Transaction Architecture,简单可扩展自治事务框架
  • 2020起始,参加工作后用1.0以后的版本


2837f3c552780a7eb761036b6772c3de.png


16.7.2 再看TC/TM/RM三大组件


省略…


16.7.3 AT模式如何做到对业务的无侵入


  • 是什么


6be0ed456b71ae77aae18ffc565a4788.png




一阶段加载


在一阶段,Seata 会拦截“业务 SQL”,

1 解析 SQL 语义,找到“业务 SQL”要更新的业务数据,在业务数据被更新前,将其保存成“before image”,

2 执行“业务 SQL”更新业务数据,在业务数据更新之后,

3 其保存成“after image”,最后生成行锁。

以上操作全部在一个数据库事务内完成,这样保证了一阶段操作的原子性。


49b860e5844f221fba198004a63c793e.png



  • 二阶段提交


二阶段是顺利提交的情况

因为“业务 SQL”在一阶段已经提交至数据库,所以Seata框架只需将一阶段保存的快照数据和行锁删掉,完成数据清理即可。


027f0f11eaa4daf058cc9f52c8fe3faa.png


二阶段回滚


二阶段如果是回滚的话,Seata 就需要回滚一阶段已经执行的“业务 SQL”,还原业务数据。

回滚方式便是用“before image”还原业务数据;但在还原前要首先要校验脏写,对比“数据库当前业务数据”和 “after image”,如果两份数据完全一致就说明没有脏写,可以还原业务数据,如果不一致就说明有脏写,出现脏写就需要转人工处理。


2d46760a521655c593f1c60b31ac451b.png

16.7.4 Debug过程分析


5cfd94abe6565b51a884a6e3a7db2d1a.png

相关文章
|
1月前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
10天前
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
Springcloud Alibaba + jdk17+nacos 项目实践
|
5天前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
5天前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
1月前
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
|
1月前
|
SQL NoSQL 数据库
SpringCloud基础6——分布式事务,Seata
分布式事务、ACID原则、CAP定理、Seata、Seata的四种分布式方案:XA、AT、TCC、SAGA模式
SpringCloud基础6——分布式事务,Seata
|
1月前
|
消息中间件 Java 对象存储
数据一致性挑战:Spring Cloud与Netflix OSS下的分布式事务管理
数据一致性挑战:Spring Cloud与Netflix OSS下的分布式事务管理
39 2
|
2月前
|
人工智能 前端开发 Java
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
本文介绍了如何使用 **Spring Cloud Alibaba AI** 构建基于 Spring Boot 和 uni-app 的聊天机器人应用。主要内容包括:Spring Cloud Alibaba AI 的概念与功能,使用前的准备工作(如 JDK 17+、Spring Boot 3.0+ 及通义 API-KEY),详细实操步骤(涵盖前后端开发工具、组件选择、功能分析及关键代码示例)。最终展示了如何成功实现具备基本聊天功能的 AI 应用,帮助读者快速搭建智能聊天系统并探索更多高级功能。
1000 2
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
|
1月前
|
人工智能 前端开发 Java
Spring Cloud Alibaba AI,阿里AI这不得玩一下
🏀闪亮主角: 大家好,我是JavaDog程序狗。今天分享Spring Cloud Alibaba AI,基于Spring AI并提供阿里云通义大模型的Java AI应用。本狗用SpringBoot+uniapp+uview2对接Spring Cloud Alibaba AI,带你打造聊天小AI。 📘故事背景: 🎁获取源码: 关注公众号“JavaDog程序狗”,发送“alibaba-ai”即可获取源码。 🎯主要目标:
51 0
|
5月前
|
存储 关系型数据库 MySQL
基于Seata实现分布式事务
通过以上步骤,你可以使用 Seata 实现分布式事务,确保在微服务架构中的事务一致性。Seata 支持多种语言和框架,能够满足不同业务场景的需求。欢迎关注威哥爱编程,一起学习成长。
142 1

热门文章

最新文章