其他分享
首页 > 其他分享> > 分布式事务解决方案学习--2PC(两阶段提交)

分布式事务解决方案学习--2PC(两阶段提交)

作者:互联网

分布式事务解决方案学习

2PC(两阶段提交)

2PC即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段P(Prepare phase),提交阶段C(commit phase),2是指两个阶段

解决方案 seata

Seata 是阿里开源的一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。
图片来源于官网http://seata.io/zh-cn/
在这里插入图片描述
seata把一个分布式事务理解成一个包含若干分支事务和全局事务,全局事务的职责是协调其下管理的分支事务达成一致,要么一起成功提交,要么一起失败回滚
在这里插入图片描述
seata定义了3个组件来协调分布式事务的处理过程

  1. 用户服务的TM向TC申请开启一个全局事务,全局事务创建成功并生成一个全局的XID
  2. 用户服务的RM向TC注册分支事务,该分支事务在用户服务执行新增用户逻辑,并该分支事务纳入XID管辖
  3. 用户服务执行分支事务,向用户表插入一条记录
  4. 远程调用积分服务,由用户服务把XID下传播,积分服务的RM向TC注册分支事务,该分支事务在用户服务执行新增用户逻辑,并该分支事务纳入XID管辖
  5. 积分服务执行分支事务,向积分表插入一条记录
  6. 各分支事务执行完毕
  7. TM向TC发起针对该XID的提交或回滚决议
  8. TC调度XID其下的分支事务回滚或者提交

AT模式和XA模式

先看文档说明 图片来源官网
AT模式
在这里插入图片描述
在这里插入图片描述
自我总结理解:

AT案例实际操作

mysql安装(有数据库环境可忽略)

为简化安装步骤mysql采用docker的方式安装,如服务器没有docker环境请自行安装docker
链接: docker安装

进入Docker Hub 链接: Docker Hub
在这里插入图片描述
搜索我们需要的mysql镜像
在这里插入图片描述
找到mysql镜像
在这里插入图片描述

这里我们选择通用的5.7版本
拉取镜像

 docker pull mysql:5.7

在这里插入图片描述

docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=这里写自己的密码 -d mysql:5.7

在这里插入图片描述
启动成功docker成功,我们来连接测试下
在这里插入图片描述
docker真的很方便两步操作mysql就搭建完了非常赞!

找到seata示例

代码地址 链接: https://github.com/seata/seata-samples
在这里插入图片描述
这里有seata很多的示例,就来试试spring-boot + mybatis的这个应该在项目中场景多点
在这里插入图片描述

示例说明

在这里插入图片描述
下载TC (Transaction Coordinator) - 事务协调者
在这里插入图片描述
运行bin下的bat文件即可
在这里插入图片描述
在这里插入图片描述

数据准备

修改配置文件
在这里插入图片描述

在这里插入图片描述
运行案例提供的sql
在这里插入图片描述
在这里插入图片描述
用户表数据
在这里插入图片描述
订单表数据
在这里插入图片描述
库存表数据
在这里插入图片描述

测试

启动各服务
在这里插入图片描述
案例给我们准备了成功和失败的接口
在这里插入图片描述
在这里插入图片描述
成功
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在试试回滚代码,看到是在扣减账号后抛异常的
在这里插入图片描述
请求

在这里插入图片描述
在这里插入图片描述
明确的看到是在sql执行后才报错的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
看到数据没有发生变化回滚成功

在报错之前打个断点来看看undo_log的数据是什么样的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里看到了xid和他管辖的各分支事务id

标签:回滚,seata,--,事务,2PC,提交,分支,TC,分布式
来源: https://blog.csdn.net/qq_43539962/article/details/116560915