Seata历史
-
阿里巴巴:
-
TXC:淘宝交易系统的分布式事务框架,阿里巴巴中间件团队自2014年开始启动该项目,用于解决应用架构从单一服务向微服务转变所带来的分布式事务问题;
-
GTS:全球交易服务。TXC作为阿里云中间件产品,新名称GTS于2016年发布;
-
Fescar:2019年开始了基于TXC/GTS的开源项目Fescar,用于开源项目社区发展;最后更名为 Seata
-
-
蚂蚁金服:
- XTS:扩展事务服务。蚂蚁金服中间件团队自2007年开始开发分布式事务中间件,该中间件在蚂蚁金服中得到广泛应用,解决了跨数据库和服务的数据一致性问题。
- DTX:分布式事务扩展。自2013年以来,XTS已在蚂蚁金融云上发布,名称为DTX;
-
Seata社区:
- Seata:简单的可扩展分布式事务解决方案,蚂蚁金服将Fedscar改名为Seata并开源,使其成为一个中立、开放的分布式事务社区。
Seata运行机制
-
Seata包含以下几个角色
- Transaction Coordinator(TC):独立的外部进程,不包含任何业务逻辑,主要职责是维护整个事务的全局状态,通知RM执行回滚或者提交
- Transaction Manager™:职责是开启、回滚、提交一个全局事务。在微服务架构中对应聚合服务
- Resource Manager(RM):对应每个微服务的事务分支,职责是执行分支事务操作
-
Seata角色交互过程
-
交互步骤
- TM 开启全局事务:TM 收到请求之后,开启一个全局的事务并生成一个全局的 XID 编号,并将 XID 编号发送给 TC,同时在 TM 中通过远程调用 RM,发起具体的业务服务调用;
- RM 完成本地操作:RM 收到 TM 发出的请求调用,RM 先完成本地操作之后(AT 与 TCC 与 Saga 模式各有不同),然后再向 TC 发起上报;
- RM 向 TC 上报分支事务: RM 完成本地事务操作(未提交),向 TC 上报分支事务(申请全局锁)
- TM 向 TC 提交全局事务:TM 如果顺利的完成 3 个微服务的调用(没有异常,没有超时),就向 TC 提交全局事务,如果有任何异常或超时,TM 向 TC 提交全局回滚。
- RM 执行提交或回滚操作:RM 收到 TC 的提交或回滚后,执行具体的提交或回滚操作,事务执行完成。
docker-compose安装
-
安装版本seata-server-1.4.2
-
采用Nacos注册中心,Mysql存储。提前准备环境
环境 版本 准备 IP Nacos 2.0.4 创建命名空间seata-namespace 192.168.101.8:8848 Mysql 5.6 创建数据库seata_server 192.168.101.8:3306 Seata 1.4.2 172.26.0.2:8091 -
步骤一:创建数据库seata_server。并执行脚本。参考https://github.com/seata/seata/blob/1.4.2/script/server/db/mysql.sql
CREATE TABLE IF NOT EXISTS `global_table` ( `xid` VARCHAR(128) NOT NULL, `transaction_id` BIGINT, `status` TINYINT NOT NULL, `application_id` VARCHAR(32), `transaction_service_group`