分布式事物解决方案_XA方案
什么是DTP
2PC的传统方案是在数据库层面实现的,如Oracle、MySQL都支持 2PC协议,为了统一标准减少行业内不必要的对接成本,需要制定 标准化的处理模型及接口标准,国际开放标准组织Open Group定 义分布式事务处理模型DTP(Distributed Transaction Processing Reference Model)。
分布式事物解决方案_Seata实现
Seata是什么
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简 单易用的分布式事务服务。Seata 为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
Seata整体框架
全局事务与分支事务的关系图
与传统2PC的模型类似,Seata定义了三个组件来协议分布式事务的处理过程
还拿新用户注册送积分举例Seata的分布式事务过程
执行流程 :
Seata实现2PC与传统2PC的差别
Seata提供XA模式实现分布式事务_业务说明
业务说明
本实例通过Seata中间件实现分布式事务,模拟两个账户的转账交易 过程。两个账户在两个不同的银行(张三在bank1、李四在 bank2),bank1和bank2是两个微服务。交易过程中,张三给李四 转账制定金额。上述交易步骤,要么一起成功,要么一起失败,必须是一个整体性的事务。
工程环境
创建数据库
bank1库,包含张三账户
CREATE DATABASE /*!32312 IF NOT EXISTS*/`bank1` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `bank1`; /*Table structure for table `account_info` */ DROP TABLE IF EXISTS `account_info`; CREATE TABLE `account_info` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `account_name` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '户主姓名' , `account_no` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '银行卡号' , `account_password` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '帐户密码' ,`account_balance` double DEFAULT NULL COMMENT '帐户余额' , PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC; /*Data for the table `account_info` */ insert into `account_info`(`id`,`account_name`,`account_no` ,`account_password`,`account_balance`) values(2,'张三','1',NULL,1000);
bank2库,包含李四账户
CREATE DATABASE /*!32312 IF NOT EXISTS*/`bank2` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `bank2`; /*Table structure for table `account_info` */ DROP TABLE IF EXISTS `account_info`; CREATE TABLE `account_info` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `account_name` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '户主姓名' , `account_no` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '银行卡号' , `account_password` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '帐户密码' ,`account_balance` double DEFAULT NULL COMMENT '帐户余额' , PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC; /*Data for the table `account_info` */ insert into `account_info`(`id`,`account_name`,`account_no` ,`account_password`,`account_balance`) values(3,'李四','2',NULL,0);
Seata提供XA模式实现分布式事务_下载启动Seata服务
下载seata服务器
解压并启动
tar -zxvf seata-server-1.4.2.tar.gz -C /usr/local/ #后台运行 nohup sh seata-server.sh -p 9999 -h 192.168.66.100 -m file &> seata.log &
注意:
其中9999为服务端口号;file为启动模式,这里指seata服务将采用文件的方式存储信息。
测试
查看启动日志
cat seata.log
分布式事物【Seata实现、下载启动Seata服务、搭建聚合父工程构建】(四)-全面详解(学习总结---从入门到深化)(下):https://developer.aliyun.com/article/1419973