分布式事务 Distributed Transaction
2023年4月8日大约 2 分钟
CAP
三个特性最多只能同时满足其中两个
一致性(Consistency)
可用性(Availability)
分区容忍性(Partition Tolerance)
- 多节点为了数据一致性,数据同步阻塞服务,可用性就会变差;
- 多节点为了高可用,但数据同步不及时,一致性变差;
- 多节点因为部分节点连接中断,而无法正确提供服务,此为容忍性;
可靠事件队列
譬如 TCP 协议中未收到 ACK 应答自动重新发包的可靠性保障就属于最大努力交付
可靠事件队列只要第一步业务完成了,后续就没有失败回滚的概念,只许成功,不许失败
靠着持续重试来保证可靠性的解决方案
”最大努力交付“(Best-Effort Delivery)
TCC 事务(Try-Confirm-Cancel)
- Try:尝试执行阶段
- Confirm:确认执行阶段
- Cancel:取消执行阶段
用户花钱了冻结金额,用户买书了就冻结书籍状态,讲究资源锁定
业务侵入性很强
SAGA 事务
分布式事务 T 分解为 n 个子事务,命名为 T1,T2,… , 每一个子事务设计对应的补偿动作,命名为 C1,C2,…
1. 子事务必须原子行为
2. Ti和Ci都具备幂等性
3. Ti与Ci满足交换律
4. Ci必须能成功提交
- 正向恢复(Forward Recovery) Ti事务提交失败,则一直对 Ti进行重试,直至成功为止
执行模式为:T1,T2,…,Ti(失败),Ti(重试)…,Ti+1,…,Tn
- 反向恢复(Backward Recovery)Ti事务提交失败,则一直执行 Ci对 Ti进行补偿,直至成功为止
执行模式:T1,T2,…,Ti(失败),Ci(补偿),…,C2,C1