分布式事务解决方案:2PC,TCC以及基于消息的最终一致性

各种形态的分布式事务

分布式事务有多种主流形态,包括:

基于消息实现的分布式事务
基于补偿实现的分布式事务
基于TCC实现的分布式事务
基于SAGA实现的分布式事务
基于2PC实现的分布式事务
这些形态的原理已经在很多文章中进行了剖析,用“分布式事务”关键字就能搜到对应的文章,本文不再赘述这些形态的原理,并将重点放在如何根据业务选择对应的分布式事务形态上。
分布式事务解决方案汇总

接下来,以一个典型的分布式事务问题——“转账”为例,详细探讨分布式事务的各种解决方案。

以支付宝为例,要把一笔钱从支付宝的余额转账到余额宝,支付宝的余额在系统A,背后有对应的DB1;余额宝在系统B,背后有对应的DB2;蚂蚁借呗在系统C,背后有对应的DB3,这些系统之间都要支持相关转账。所谓“转账”,就是转出方的系统里面账号要扣钱,转入方的系统里面账号要加钱,如何保证两个操作在两个系统中同时成功呢?

2PC

(1)2PC理论。在讲MySQL Binlog和Redo Log的一致性问题时,已经用到了2PC。当然,那个场景只是内部的分布式事务问题,只涉及单机的两个日志文件之间的数据一致性;2PC是应用在两个数据库或两个系统之间。

2PC有两个角色:事务协调者和事务参与者。具体到数据库的实现来说,每一个数据库就是一个参与者,调用方也就是协调者。2PC是指事务的提交分为两个阶段,如图10-1所示。

阶段1:准备阶段。协调者向各个参与者发起询问,说要执行一个事务,各参与者可能回复YES、NO或超时。

阶段2:提交阶段。如果所有参与者都回复的是YES,则事务协调者向所有参与者发起事务提交操作,即Commit操作,所有参与者各自执行事务,然后发送ACK。

如果有一个参与者回复的是NO,或者超时了,则事务协调者向所有参与者发起事务回滚操作,所有参与者各自回滚事务,然后发送ACK,如图10-2所示。

图10-1 2PC事务提交示意图
在这里插入图片描述

在这里插入图片描述
图10-2 事务回滚示意图

所以,无论事务提交,还是事务回滚,都是两个阶段。

(2)2PC的实现。通过分析可以发现,要实现2PC,所有参与者都要实现三个接口:Prepare、Commit、Rollback,这也就是XA协议,在Java中对应的接口是javax.transaction.xa.XAResource,通常的数据库也都实现了这个协议。开源的Atomikos也基于该协议提供了2

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCC(Try-Confirm-Cancel)是一种分布式事务解决方案,它通过将一个事务拆分成三个阶段(Try、Confirm、Cancel)来保证事务的一致性。而在分布式环境下,TCC通常使用3PC协议来实现。 3PC(Three-Phase Commit)协议是一种常用的分布式事务协议,它将一个分布式事务分为三个阶段(CanCommit、PreCommit、DoCommit),并通过协调者(Coordinator)和参与者(Participant)之间的消息交换来实现事务的原子性和一致性。 具体来说,TCC使用的3PC协议流程如下: 1. CanCommit 阶段:协调者向参与者发送CanCommit请求,询问参与者是否可以执行该事务。如果参与者可以执行,则发送Yes响应,否则发送No响应。 2. PreCommit 阶段:协调者向参与者发送PreCommit请求,告诉参与者可以执行该事务,并让它准备好提交或撤销事务。如果参与者准备好了,则发送Ack响应。 3. DoCommit 阶段:协调者向参与者发送DoCommit请求,告诉参与者提交该事务。如果参与者成功提交了事务,则发送Ack响应,否则发送Abort响应。 如果任何一个阶段出现问题,协调者会向参与者发送Cancel请求,撤销事务。 需要注意的是,在TCC中,Try阶段和Cancel阶段由应用程序自己来实现,3PC协议主要用于Confirm和DoCommit阶段的协调。此外,由于3PC协议的复杂性和性能问题,TCC并不适用于所有的分布式事务场景,开发者需要根据具体的业务需求来选择合适的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值