有以下几种模式
1、AT模式
2、TCC模式
3、SAGA模式
AT 模式基于 支持本地 ACID 事务 的 关系型数据库:
一阶段 prepare 行为:在本地事务中,一并提交业务数据更新和相应回滚日志记录。
二阶段 commit 行为:马上成功结束,自动 异步批量清理回滚日志。
二阶段 rollback 行为:通过回滚日志,自动 生成补偿操作,完成数据回滚。
相应的,TCC 模式,不依赖于底层数据资源的事务支持:
一阶段 prepare 行为:调用 自定义 的 prepare 逻辑。
二阶段 commit 行为:调用 自定义 的 commit 逻辑。
二阶段 rollback 行为:调用 自定义 的 rollback 逻辑。
另外,我也自己总结了一份我认为这两种模式的差别点(具体差别点导致的原因,留到后续再进行讨论)
AT | TCC | |
---|---|---|
全局锁 | 需要 | 不需要 |
回滚日志 | 需要 | 不需要 |
commit/cancel阶段代码实现 | 不需要 | 需要 |
是否需要开发者解决悬挂和空回滚问题 | 不需要 | 需要 |
性能 | 低(需要全局锁导致) | 高(无锁) |