SpringCloud Alibaba Senta处理分布式事务
分布式事务问题
分布式前
单机单库没这个问题
从1:1 -> 1:N -> N:N
分布式之后
一句话
一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用,就会产生分布式事务问题
Seata简介
Senta是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务
官网地址
http://seata.io/zh-cn/
一个典型的分布式事务过程
分布式事务处理过程的ID+三组件模型
Transaction ID全局唯一的事务ID
三组件概念
TC - 事务协调者
维护全局和分支事务的状态,驱动全局事务提交或回滚。
TM - 事务管理器
定义全局事务的范围:开始全局事务、提交或回滚全局事务。
RM - 资源管理器(数据库)
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
处理过程
去哪下
发布说明: https://github.com/seata/seata/releases
怎么玩
本地@Transational
全局@GlobalTransactional
seata的分布式交易解决方案
Seata-Server安装
1、官网地址
https://seata.io/zh-cn/blog/download.html
2、下载版本
3、seata-server-0.9.0.zip解压到指定目录并修改conf目录下的file.conf配置文件
先备份原始file.conf文件
主要修改:自定义事务组名称+事务日志存储模式为db+数据库连接信息
file.conf
service模块
store模块
4、mysql5.7数据库新建库seata
5、在seata库里建表
建表db_store.sql在\seata-server-0.9.0\seata\conf目录下
db_store.sql
sql
6、修改seata-server-0.9.0\seata\conf目录下的registry.conf配置文件
7、先启动Nacos端口号8848
8、再启动seata-server
\seta\bin\
seata-server.bat
订单/库存/账户业务数据库准备
以下演示都需要先启动Nacos后启动seata,保证两个OK
分布式事务业务说明
创建业务数据库
seata_order:存储订单的数据库
seata_storage:存储库存的数据库
seata_account:存储账户信息的数据库
建库SQL
按照上诉3库分别建对业务表
seata_order库下建t_order表
seata_storage库下建t_storage表
seata_account库下建t_account表
按照上诉3库分别建立对应的回滚日志表
订单-库存-账户3个库下都需要建各自的回滚日志表
\seata-server-0.9.0\seata\conf目录下的db_undo_log.sql
建表sql
最终效果
订单/库存/账户业务微服务准备
业务需求
下订单 -> 减库存->扣余额 ->改(订单)状态
新建订单Order-Module
1、seata-order-service2001
2、POM
我自己配置新增 0.9.0的seata包时报错了
com.google.errorprone
如果你遇到和我一样的错误,建议引入这个包error_prone_core
3、YML
4、file.conf
就是seata文件夹下的file.conf
5、registry.conf
6、domain
CommonResult
Order
7、Dao接口及实现
orderDao
resources文件夹下新建mapper文件夹后添加
8、Service接口及实现
OrderService
StorageService
AccountService
OrderServiceImpl
9、Controller
10、Config配置
MyBatisConfig
DataSourceProxyConfig
11、主启动
新建库存Storage-Module
新建账户Account-Module
Test
数据库初始情况
下订单->减库存->扣余额->改订单状态
正常下单
http://localhost:2001/order/create?userId=1&productId=1&count=10&money=100
数据库情况
超时异常,没加@GlobalTransational
AccountServiceImpl添加超时
数据库情况
故障情况
当库存和账户金额扣减后,订单状态并没有设置为依据完成,没有从零改为1
而且由于feign的重试机制,账户余额还有可能被多次扣减
超时异常,添加@GlobalTransational
结果
各数据库无记录新增
OrderServiceImpl
一部分补充
Seata
2019年1月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案
Simple Extensible Autonomous Transaction Architecture ,简单可扩展自治事务框架
2020起始,参加工作后使用1.0以后的版本
再看TC/TM/RM三大组件
分布式事务的执行流程
TM开启分布式事务(TM向TC注册全局事务记录)
按业务场景,编排数据库、服务等事务内资源(RM向TC汇报资源准备状态)
TM结束分布式事务,事务一阶段结束(TM通知TC提交/回滚分布式事务)
TC汇总事务信息,决定分布式事务是提交还是回滚
TC通知所有RM提交/回滚 资源,事务二阶段结束
AT模式如何做到对业务的无侵入
是什么
一阶段加载
二阶段提交
二阶段回滚
debug
补充
SpringCloud Alibaba Senta处理分布式事务相关推荐
- SpringCloud Alibaba Seata处理分布式事务-微服务(三十九)
订单/库存/账户业务微服务准备 业务需求 下订单->减库存->扣余额->改(订单)状态 新建订单Order-Module seata-order-service2001 POM &l ...
- springCloud整合seata实现分布式事务
seata简介 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用户打造一站式的分布式 ...
- Spring Cloud Alibaba 高级特性 分布式事务:Alibaba Seata 如何实现分布式事务
本讲咱们要解决分布式事务这一技术难题,这一讲咱们将介绍三方面内容: 讲解分布式事务的解决方案: 介绍 Alibaba Seata 分布式事务中间件: 分析 Seata 的 AT 模式实现原理. 分布式 ...
- Spring Cloud Alibaba系列之分布式事务Seata
Spring Cloud Alibaba系列之分布式事务Seata 1.分布式事务 分布式事务不是在现在微服务分布式架构上才产生的问题,在单体应用同样存在分布式事务问题,典型的场景就是单体应用使用了多 ...
- 微服务框架 SpringCloud微服务架构 分布式事务 38 动手实践 38.2 实现XA 模式
微服务框架 [SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务] 分布式事务 文章目录 微服务 ...
- 分布式事务解决方案 - SpringCloud Alibaba Seata
目录 github代码:GitHub - 18409489244/seata: 基于springcloud alibaba seata 的分布式事务demo 一.常见分布式事务解决方案 二.分布式事务 ...
- 电商架构设计与开发 - 20分布式组件-SpringCloud Alibaba简介
Spring Cloud Netflix Spring Cloud Alibaba 注册中心 Eureka Nacos 配置中心 SpringCloud Config Nacos API网关 zuul ...
- 最详细SpringCloud+nacos整合Seata1.4.2 实现分布式事务
SpringCloud整合Seata 实现分布式事务 Seata 简介和工作原理 看seata官网吧 安装Seata 使用浏览器访问"https://github.com/seata/sea ...
- SpringCloud Alibaba实战第九课 分布式事务理论、DevOps运维
22 一致性挑战:微服务架构下的数据一致性解决方案 上一讲我们介绍了如何在微服务架构中设计统一的用户认证方案.本讲咱们填之前埋下的一个坑,如何在微服务架构下有效保障数据一致性问题.本讲咱们涉及三方面内 ...
最新文章
- 清华北大浙大大学开放课程
- 头文件的用法及注意事项
- 随机变量X与随机变量函数Y=g(X)的概率分布
- Linux 命令之 id -- 显示用户ID和组ID
- iOS-自定义导航栏后侧滑返回功能失效
- 高级电工技术实训考核装置
- 新手CrossApp 之demo SecondViewController小结
- java中null字符串与字符串长度为0的区别
- STM32的函数ssert_param(IS_GPIO_ALL_PERIPH(GPIOx));
- 【OpenGL】室内3D弹球
- 尚德机构推出2019版CPA系列纸质书 配套小程序刷题
- 初探HazelCast IMDG内存数据网格-简介
- java实验报告可下载_JAVA实验报告.doc
- 量化初级 -- akshare获得股票代码,最简策略
- 循环队列 C++ 实现
- 第19章、	认识与分析登录档
- 【调剂】北方民族大学2022年硕士研究生调剂公告(二)
- php某年某月某日是否闰年,【后端开发】PHP判断一个年份是否为闰年
- 阿里面试官的”说一下从url输入到返回请求的过程“问的难度就是不一样!
- docker tag详解
热门文章
- 一个食品专业本科生的自白:能不吃最好别吃
- java book打印机_java如何调用本地打印机进行图片打印
- 计算机中bcd的中文意思,BCD码
- 使用DIV+CSS布局设计个人主页 设计个人主页,使用DIV+CSS的方式进行页面布局。
- 中国工商银行网银不能识别U盾或打不开网页
- 企立方集团:拼多多场景推广怎么设置
- CCleaner 垃圾文件清理规则 编写指南
- ssh_init: Network error: Cannot assign requested address的解决办法
- 人工智能泡妞第一步 · 了解学科
- 【大数据/分布式】MapReduce学习-结合6.824课程