Spring Cloud Alibaba 之 Seata分布式事务服务;AT事务模式(二十)
AT 模式
前提
1、 基于支持本地ACID事务的关系型数据库;
2、 Java应用,通过JDBC访问数据库;
整体机制
两阶段提交协议的演变:
1、 一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源;
2、 二阶段:;
(1)提交异步化,非常快速地完成
(2)回滚通过 一阶段的回滚日志进行反向补偿
写隔离
1、 一阶段本地事务提交前,需要确保先拿到全局锁;
2、 拿不到全局锁,不能提交本地事务;
3、 拿全局锁的尝试被限制在一定范围内,超出范围将放弃,并回滚本地事务,释放本地锁;
读隔离
在数据库本地事务隔离级别 读已提交(Read Committed) 或以上的基础上,Seata(AT 模式)的默认全局隔离级别是 读未提交(Read Uncommitted) 。
如果应用在特定场景下,必需要求全局的 读已提交 ,目前 Seata 的方式是通过 SELECT FOR UPDATE 语句的代理。
一、AT事务模式:SpringBoot单体应用多数据源AT分布式事务

在Spring Boot单体项目中,使用了多数据源,就要保证多个数据源的数据一致性,即产生了分布式事务的问题,采用Seata的AT事务模式来解决该分布式事务问题
以下图购物下单为例

1、创建数据库、表、插入数据等
(1)accountdb账户库、account账户表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for account
-- ----------------------------
DROP TABLE IF EXISTS account;
CREATE TABLE account (
id int(20) NOT NULL AUTO_INCREMENT,
user_id int(20) NULL DEFAULT NULL,
balance decimal(20, 0) NULL DEFAULT NULL,
update_time datetime(6) NULL DEFAULT NULL,
PRIMARY KEY (id) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;