seata几种模式介绍
一、AT(auto transaction)模式
这是一种无侵入式分布式事务解决方案,该模式下,用户只需要关注自己的“业务SQL”(这是第一个阶段),seata框架会自动生成分布式事务的二阶段提交或回滚。
一阶段:
在该阶段,seata会拦截业务SQL,首先解析SQL语义,找到对应要更新的业务数据,在业务数据更新之前,将其保存成“before image”(未更新前的原始数据--回滚数据),然后执行业务SQL,更新业务数据。在更新之后,再将其保存为“after image”(更新之后的数据--提交数据),最后生成行锁,以上操作全部在一个数据库事务内完成,这样保证了一阶段事务的原子性。
二阶段提交:
二阶段如果是提交的话,因为业务SQL在一阶段已经提交至数据库,所以seata框架只需要将一阶段保存的快照数据和行锁删掉即可。
二阶段回滚:
seata需要回滚一阶段已经执行的业务SQL,使用一阶段存储的“before image”还原业务数据;但在还原前,要首先校验脏写,对比数据库当前业务数据和“after image”,如果两份数据完全一样,说明没有脏写,
可以还原业务数据,如果不一致,说明出现脏写,需要人工干预。
二、TCC模式
该模式需要用户根据自己的业务场景(因此侵入性太强,但是整个过程不涉及锁,性能较高),实现Try、Confirm和Cancel三个操作,事务发起方在一阶段执行Try方法,二阶段执行Confirm或Cancel方法。
三、可靠消息最终一致性
这里我们一般选择RocketMQ。
转载:基于RocketMQ分布式事务 - 完整示例 - 知乎 (zhihu.com)