什么是分布式事务
事务是一个程序执行单元,里面的所有操作要么全部执行成功,要么全部执行失败。在分布式系统中,这些操作可能是位于不同的服务中,那么如果也能保证这些操作要么全部执行成功要么全部执行失败呢?这便是分布式事务要解决的问题。
CAP
一致性、可用性、分 区容忍性
- 刚性事务(CP)
遵循ACID,对数据要求强一致性
- 柔性事务(AP)
遵循BASE,允许一定时间内不同节点的数据不一致,但要求最终一致。
分布式刚性事务
两阶段提交
对应技术上的 XA、JTA/JTS。这是分布式环境下事务处理的 典型模式。
三阶段提交
三段提交(3PC)是对两段提交(2PC)的一种升级优化,3PC在2PC的第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前,各参与者节点的状态都一致。同时在协调者和参与者中都引入超时机制,当参与者各种原因未收到协调者的commit请求后,会对本地事务进行commit,不会一直阻塞等待,解决了2PC的单点故障问题,但3PC还是没能从根本上解决数据一致性的问题。
分布式柔性事务
TCC 型事务
TCC(Try-Confirm-Cancel)又被称补偿事务,TCC与2PC的思想很相似,事务处理流程也很相似,但2PC是应用于在DB层面,TCC则可以理解为在应用层面的2PC,是需要我们编写业务逻辑来实现。
SAGA分布式事务
Saga是针对分布式长活事务的解决方案,针对事务长、多、复杂的情况。
SAGA流程失败模式:
1. 在执行“发货”命令时发现“发货失败”,于是“发货服务”反馈给Saga协调器。
2. 此时协调器调用“库存服务”中的“回滚库存”操作,将扣减的库存恢复。
3. 然后调用“支付服务”中的“回滚支付”完成支付退款的工作。
4. 最后,通知订单服务事务处理失败。