分布式事务的几种方案

本文探讨了数据库事务管理中的两阶段提交(2PC/XA)及TCC方案,重点介绍了TCC方案如何通过Try-Confirm-Cancel三个步骤解决分布式事务问题,并对比了其与2PC的区别。

数据库事务方案(2PC/XA)

https://blog.youkuaiyun.com/define_us/article/details/83184753

是唯一一个两阶段提交不能解决的困境是:当协调者在发出commit T消息后宕机了,而唯一收到这条命令的一个参与者也宕机了,这个时候这个事务就处于一个未知的状态,没有人知道这个事务到底是提交了还是未提交,从而需要数据库管理员的介入,防止数据库进入一个不一致的状态。当然,如果有一个前提是:所有节点或者网络的异常最终都会恢复,那么这个问题就不存在了,协调者和参与者最终会重启,其他节点也最终也会收到commit T的信息。

TCC方案

在这里插入图片描述
显然执行者需要至少执行三个接口。

在这里插入图片描述
一般而言,协调者的决策可以让事务的一个参与方进行。但是,一般大公司都会采用单独的协调者,即提供单独应用作为事务服务。

空回滚

所谓空回滚,是指并没有收到try,就要进行cancel操作

事务悬挂问题

表示先收到cancel,在收到try

总结

TCC特别适合在电商场景。用户支付先完成自己的事务,付款

最大努力通知

本地消息表

本地消息表其实就是利用了 各系统本地的事务来实现分布式事务。

本地消息表顾名思义就是会有一张存放本地消息的表,一般都是放在数据库中,然后在执行业务的时候 将业务的执行和将消息放入消息表中的操作放在同一个事务中,这样就能保证消息放入本地表中业务肯定是执行成功的。

然后再去调用下一个操作,如果下一个操作调用成功了好说,消息表的消息状态可以直接改成已成功。

如果调用失败也没事,会有 后台任务定时去读取本地消息表,筛选出还未成功的消息再调用对应的服务,服务更新成功了再变更消息的状态。

消息事务

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值