Seata 分布式事务原理
Seata整体机制
两阶段提交协议的演变:
一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
二阶段:
提交异步化,非常快速地完成。
回滚通过一阶段的回滚日志进行反向补偿。
一阶段
过程:
1、解析 SQL:得到 SQL 的类型(UPDATE),表(product),条件(where name = 'TXC')等相关的信息。
2、查询前镜像:根据解析得到的条件信息,生成查询语句,定位数据。
1 select id, name, since from product where name = 'TXC';
得到前镜像:
idnamesince
1
TXC
2014
3、执行业务 SQL:更新这条记录的 name 为 'GTS'。
4、查询后镜像:根据前镜像的结果,通过 主键 定位数据。
1 select id, name, since from product where id = 1;
得到后镜像:
idnamesince
1
GTS
2014
5、插入回滚日志:把前后镜像数据以及业务 SQL 相关的信息组成一条回滚日志记录,插入到 UNDO_LOG 表中。
1 {2 "branchId": 641789253,3 "undoItems": [{4 "afterImage": {5 "rows": [{6 "fields": [{7 "name": "id",8 "type": 4,9 "value": 1
10 }, {11 "name": "name",12 "type": 12,13 "value": "GTS"<