1.分布式事务的问题
当我们的单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源,业务需要调用三个服务来完成。
例如:下订单的操作需要不同服务来提供支持
仓储服务:维护商品的库存信息
订单服务:根据采购需求创建订单
账户服务:从用户账户中扣除余额
此时,每个服务内部的数据一致性由本地事务来保证,
但是全局的数据一致性问题没法保证。
总之,一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用,就会产生分布式事务问题
2.什么是Seata?
Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。
官网地址:http://seata.io/zh-cn/
3.Seata组成
seata是由 分布式事务处理过程的唯一ID+三组件模型 组成的
Transaction ID XID:全局唯一的事务ID
Transaction Coordinator(TC) :事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚;
Transaction Manager(TM):控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议;
Resource Manager(RM):控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚。
处理过程:
①TM向TC申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的XID;
②XID在微服务调用链路的上下文中传播;
③RM向TC注册分支事务,将其纳入XID对应全局事务的管辖;
④TM向TC发起神对XID的全局提交或回滚决议;
⑤TC调度XID下管辖的全部分支事务完成提交或回滚请求;
3.安装
下载地址:http://seata.io/zh-cn/blog/download.html
我下载的是0.9版本的,这个版本的数据库脚本就在conf下。
下载解压好后我们同样可以看到目录结构
bin里面放的是启动脚本,conf里放的是配置文件,lib里放的是依赖包
3.1修改file.conf文件
这个文件要修改的地方有两处一个是service模块和store模块
service模块要修改的是事务组的名字
store模块要改的是存储日志的方式以及数据库信息
3.2修改registry.conf文件
将type改成nacos即可
3.3创建数据库并导入mysql脚本
mysql脚本在conf下的db_store.sql
先创建好数据库,导入成功后会看到三张表
这样,Seata的准备工作就做好了
4.测试
测试要先启动nacos再启动seata
我们看到日志中出现started就说明我们的seata启动成功啦!
使用mysql8的小伙伴记得把mysql的连接包换成mysql8的!