seata
2023-02-19 05:54:26 12 举报
AI智能生成
seata总结
作者其他创作
大纲/内容
AT模式(Automatic Transaction)
前提
基于ACID事务的关系型数据库
java应用通过jdbc访问数据库
整体机制:两阶段提交协议演变
第一阶段
业务数据和回滚日志记录在同一个
本地事务内提交,释放本地锁和连接
资源
本地事务内提交,释放本地锁和连接
资源
第二阶段
比较异步化非常快速完成
回滚,通过一阶段的回滚日志进行反向补偿
写隔离
一阶段本地事务提交前,需要先确保先拿到全局锁
拿不到全局锁不能提交本地事务
那全局锁的尝试限制在一定范围内,超出范围将放弃,并回滚本地事务释放本地锁
读隔离
工作机制
一阶段
过程
1、解析SQL:得到SQL类型update,表、条件相关信息
2、查询前镜像:根据解析到的条件信息,生成SQL,定位数据,得到前镜像
3、执行业务SQL更新这条定位出的记录
4、查询后镜像:通过前镜像定位主键,查询更新后的数据,得到后镜像
5、插入回滚日志:把前镜像数据以及业务SQL相关信息组成一条回滚日志,插入到undo_log表中
6、提交前向TC(事务协调者)注册分支,申请在业务主表中,主键值等于1的全局锁
7、本地事务提交:业务数据的更新和前面步骤中生产的undo_log一并提交
8、将本地事务提交上报给TC
二阶段
回滚
1、收到tc的分支的回滚请求,开启一个本地事务
2、通过XID和branchId 查询到响应的undo_log日志
3、数据校验:拿undo_log的后镜数据与当前数据进行比较,如有不同,如有不同说明当前数据被全局事务之外的事务做了修改
这种情况需要根据配合策略进行处理
这种情况需要根据配合策略进行处理
4、根据undo_log的前镜像的业务SQL的相关信息,生产并执行回滚语句
5、提交本地事务,并把本地事务执行的结果(即分支回滚的结果)上报给TC
提交
1、收到TC的分支提交请求,把请求放到一个异步任务的队列中,马上返回提交成功的结果给TC
2、异步任务阶段的分支提交请求将异步和批量的删除对应undo_log日志记录
TCC模式(Try-Confirm-Cancel)
SAGA模式
概述
适用场景
业务流程长
业务流程多
优势
一阶段提交本地事务,无锁高性能
事件驱动架构,参与者可异步执行,高吞吐
补偿服务易于实现
缺点
不保证隔离性
saga的实现
快速开始
Api Reference
XA模式
0 条评论
下一页