分布式事务
1. 2PC方案(两阶段提交)/XA方案
基于事务管理器,负责协调多个数据库,适合单体应用
缺点:
- 依赖数据库事务
- 效率低
- 需要操作其他服务的数据库,不符合微服务架构
2. TCC方案(Try、Confirm、Cancel)
解释:
- Try:资源预留
- Confirm:实际操作
- Cancel:任何一个操作失败,全部回滚
优点:
- 适用于非数据库服务
缺点:
- 所有操作都需要自己维护回滚代码,难以维护
- 有些操作无法回滚
3. 本地消息表
A执行本地事务,成功后将事务存到本地消息表,通知B,B的本地事务成功则B通知A事务完成,否则,A系统一直根据消息表通知B系统
- B保证幂等
缺点:
- 依赖数据库管理事务,效率较低
4. 事务消息
A先发送prepare消息,然后开始本地事务,MQ轮询本地事务事情结果,如果成功,发送commit消息,如果失败,则不发送prepare消息。B收到commit消息开始本地事务,B失败了只能重试。A发送prepare后,MQ轮询A本地事务是否成功,B这个使用比较广泛。
- B保证幂等,有不断重试机制
- A要实现RM轮询接口
5. 最大努力通知
A事务完成,通知B,如果B响应失败,则A按照通知策略重复通知,要求B能处理重复的通知