旅游门户网站建设方案温州云优化seo
文章目录
- 基于 XA 协议的两阶段提交(2PC)
- 三阶段提交(3PC)
- TCC(Try-Confirm-Cancel)
- Saga 模式
- 消息队列(可靠消息最终一致性)
分布式事务是指在分布式系统中,涉及多个节点或服务之间的数据操作,需要保证这些操作要么全部成功提交,要么全部回滚,以维持数据的一致性。以下是几种常见的分布式事务原理:
基于 XA 协议的两阶段提交(2PC)
准备阶段:事务协调者向所有参与者发送Prepare请求,参与者执行事务操作,但不提交。参与者检查自身事务执行情况,如果可以提交,则记录日志并响应Yes给协调者;否则响应No。
提交阶段:协调者根据参与者的响应来决定下一步操作。如果所有参与者都返回Yes,协调者发送Commit请求,参与者正式提交事务;如果有任何一个参与者返回No或者在规定时间内没有收到响应,协调者发送Rollback请求,参与者回滚事务。
三阶段提交(3PC)
CanCommit 阶段:协调者向参与者发送CanCommit请求,询问是否可以执行事务提交操作。参与者检查自身状态,如果可以进行事务提交,则返回Yes,否则返回No。
PreCommit 阶段:如果协调者收到所有参与者的Yes响应,会进入PreCommit阶段,向参与者发送PreCommit请求,参与者执行事务操作,但不提交。此时参与者会记录事务日志,为可能的提交或回滚做准备。
DoCommit 阶段:如果协调者在PreCommit阶段收到所有参与者的成功响应,或者等待超时后没有收到任何参与者的失败响应,就会发送DoCommit请求,让参与者提交事务。如果在PreCommit阶段有参与者返回失败响应,或者等待超时,协调者会发送Abort请求,让参与者回滚事务。
TCC(Try-Confirm-Cancel)
Try 阶段:主要是对业务系统做检测及资源预留。比如在一个涉及资金转账的分布式事务中,在Try阶段,会先冻结转出账户的资金,检查转入账户是否正常等操作。
Confirm 阶段:如果Try阶段所有操作都成功,那么在Confirm阶段就会真正执行提交操作,比如将冻结的资金进行实际的转账操作。这个阶段要求操作具有幂等性,即多次执行的结果和执行一次的结果是一样的。
Cancel 阶段:如果Try阶段中任何一个操作失败,或者后续出现了需要回滚的情况,就会进入Cancel阶段,进行资源的释放和回滚操作。比如将之前冻结的资金解冻。
Saga 模式
事务分解:将一个大的分布式事务分解为一系列的本地事务,每个本地事务都有对应的正向操作和补偿操作。
顺序执行:按照一定的顺序依次执行这些本地事务的正向操作。例如,在一个电商订单处理的分布式事务中,可能依次执行创建订单、扣减库存、更新物流信息等本地事务。
补偿机制:如果在执行过程中某个本地事务失败了,就会按照相反的顺序执行已经执行成功的本地事务的补偿操作,来达到回滚的目的。比如,如果扣减库存失败,那么就需要回滚创建订单的操作。
消息队列(可靠消息最终一致性)
消息发送:在事务操作前,先将消息发送到消息队列。消息中包含了需要在其他服务或节点上执行的操作信息。比如在一个订单创建和库存扣减的分布式事务中,订单服务在创建订单前,先将包含订单商品信息的消息发送到消息队列。
本地事务执行:发送消息成功后,执行本地事务,比如创建订单记录等操作。
消息消费:其他服务从消息队列中获取消息,并根据消息内容执行相应的操作,比如库存服务获取到消息后,执行扣减库存的操作。通过消息的可靠投递和消费确认机制,保证最终数据的一致性。如果消息消费失败,可以进行重试或者通过补偿机制来处理。