分布式事务
流芳不待人 9/14/2022
微服务,分布式大行其道。
然而实现可靠的分布式系统却并不简单。
分布式事务的概念多,有些名词在不同场景代表的是不同含义。
单从理论来学习分布式事务,未免晦涩枯燥,且无法落地。
因此本系列将从几个实际场景出发,逐步推导出可靠方案,然后再辅以理论层面上的总结。
# A.实现方式
常用的有三种
- 幂等设计
- 本地消息
- TCC
不可能使用的方式
- XA
- 三阶段提交
# 1.幂等设计
适用场景一般要满足两个条件
- 业务最终必定成功,不需要回滚
- 业务自带重试的场景
# 2.本地消息
本地消息是幂等设计的补充,适用条件:
- 不需要回滚(同幂等设计)
- 业务不带重试逻辑,需要开发者来保证后续重试逻辑
# 3.TCC
TCC应用场景最少。适用于
- 允许回滚的场景
- 需要本地消息方式做支撑
# B.技术支撑
- 分布式锁
- 乐观锁
- 悲观锁
- 数据库事务(包括 MySQL事务和Redis事务)
这里没有列出MQ,因为MQ并不是分布式事务的必要元素,没有MQ也能保证分布式事务。