分布式带来的事务失效解决方案总结
分布式带来的事务失效解决方案总结
当应用业务到多个数据库时,事务升级为分布式事务,数据一致性强度有所降低。如何从短期和长期去解决这个问题呢?
解决方案
长期方案
从总体来说,可以分成三种: 1、缩小事务边界,收敛到单一库内,避免分布式事务 2、引入分布式事务的方案,来达到最终一致性。 3、移除不必要的事务
结合迁库场景来看:
- 是否可以收敛事务到单一库? 在这种场景下,无法寻找到一个都可以保证不失效的分库键
- 引入分布式事务解决方案,将事务转换为柔性事务(BASE,基本可用,最终一致),这里可以参见支付宝的分布式事务解决方案 两阶段 补偿型 异步确保型 最大努力通知型
- 将不需要紧密相连的业务操作原子化,例如批量操作。
短期方案
无法修改代码来解决分布式事务的情况下,记录事务回滚现场。
- 使用自定义TransactionInterceptor, 增加监控
- 记录事务回滚现场,包括方法、参数、回滚异常信息、回滚时间等
