谈谈你对分布式事务的理解

说到分步式事务 ,

1,我们熟悉的基于xa规范的两阶段提交,比如 开源框架atomilkos,以及阿里的seata at模式,不过at模式是两阶段的一个演变,第一阶段提交了,第二阶段类似于undolog的反向补偿, 比如,我们在保存商品的时候,有时候要保存优惠券,积分,需要用到分布式事务,最适合seata事务

2,TCC柔性事务,为什么要说柔性事务呢,因为它遵循base理论,阿里的seata tcc模式 ,最终一致性,允许一定时间内 不同的节点的数据不一致,但是要求最终一致性

3,最大努力通知,适用一些最终一致性要求不高的业务,不保证一定能通知到,但是可以提供接口查询,比如,付款成功后的通知,,这种就特别适合

4 ,可靠消息最终一致性方案,一两有两种实现: 

a,本地消息表方案,这个方案最初有ebay提出,此方案的核心是通过本地事务保证数据业务操作和消息的一致性,然后通过定时任务将消息发送到消息中间件,待确认消息发给消费方成功后,再把消息删除.

 b,rocket事务消息

 这些强一致的方案并不适合高并发的场景,因为有很多全局锁

我们一般使用的是终一致性的方案

====================================================

2PC :缺点:单点故障问题, 一旦协调者出现问题,参与者将会处于锁定事务资源的状态中,而无法继续完成事务操作

3pc:  引入超时机制 解决了单点故障问题,由于网络原因,由于网络原因参与者之间存在数据不    协调者所在的节点和参与者无法进行正常的网络通信,节点会自动提交数据,,这必然出现数据     的不一致性。

TCC基本流程:

Try:通过Try操作来检查、预留需要的库存,比如需要2台iphone12并进行冻结

Confirm:真正执行业务操作,在之前预留的资源基础上完成购买和创建订单

Cancel:在Try阶段预留2台iphone12失败,则取消所有业务资源的预留(也就是恢复try之前)

优点:

性能提升:  依据业务来控制资源锁的粒度,不会控制整个资源

效了的避免了XA两阶段提交占用资源锁时间过长导致的性能地下问题。

不足:. 代码侵入性强:开发量很大;且如果要保证数据一致性,需要自己实现幂等性

。为了满足一致性的要求,confirm和cancel接口还必须实现幂等。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java大猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值