分布式事务之二阶段提交、AT模式、TCC模式

本文介绍了分布式事务的二阶段提交(2PC)协议及其问题,探讨了AT模式(Seata实现)和TCC模式的工作原理。在AT模式中,Seata自动生成事务提交和回滚操作,而TCC模式则要求用户实现Try、Confirm、Cancel操作。文章还提到了可靠消息最终一致性方案和Seata的事务协调者、事务管理器和资源管理器的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二阶段提交

常见的分布式事务解决方案:

  • seata
  • 消息队列
  • saga
  • XA

他们都有一个共同点,都是二阶段提交2PC,这四种常见的分布式事务解决方案分别对应着分布式事务的四种模式:AT 、TCC、Saga、XA

两阶段提交Two-Phase Commit,分为两个阶段:预处理阶段Prepare和提交阶段Commit

使用2PC来解决分布式事务一般会引入事务协调者的角色,它用来管理各个参与者,我们可以把参与者理解为数据库,也可以理解为应用,因为二阶段提交它是一种协议,它具有普遍适用性,它不是为某一种技术而制定的。就比如seata的AT模式中参与者就是数据库,而消息队列参与者又是应用。
在这里插入图片描述

2PC步骤:

第一阶段,预处理阶段

  1. 询问

    协调者向所有参与者发送事务请求,询问是否可以执行事务操作,然后等待各个参与者的响应

  2. 执行

    各个参与者接收到协调者事务请求后,执行事务操作(例如更新一个关系型数据表中的记录),并将Undo 和 Redo 信息记录事务日志中

  3. 响应

    如果参与者成功执行了事务并写入的Undo 和 Redo信息,则向协调者返回YES响应,否则返回NO响应。当然参与者有可能宕机不返回响应

提交事务

  1. commit事务

    事务协调者向所有参与者发送commit请求

  2. 事务提交

    参与者收到Commit请求后,执行事务提交,提交完成后释放事务执行期占用的所有资源

  3. 反馈结果

    参与者执行事务提交后向协调者发送ack响应

  4. 完成事务

    接收到所有参与者的ack响应后,完成事务提交

中断事务

在执行Prepare步骤过程中,如果某些参与者执行事务失败、宕机或者网络问题,那么协调者就无法收到参与者的YES响应,或者某个参与者返回了NO响应,此时,协调者就会进入回滚流程

  1. rollback请求

    协调者向所有参与者发送Rollback请求

  2. 事务回滚

    参与者收到rollback后,使用Prepare阶段的Undo日志执行事务回滚,完成后是否事务执行期占用的所有资源

  3. 反馈结果

    参与者执行事务回滚后向协调者发送ack响应

  4. 中断事务

    接收到所有参与者的ack响应后,完成事务中断。

2PC问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值