资讯专栏INFORMATION COLUMN

说说分布式事务(三)

opengps / 3343人阅读

摘要:最终一致性一简介是由支付宝架构师提供的一种柔性解决分布式事务解决方案主要包括三个步骤流程的关键流程如下图以下单和扣减库存为例子预生成订单失败了为什么要通过执行预处理数据回滚可能预生成订单成功但是接口返回失败超时失败所以预处理在某些情况下是有

最终一致性(一) TCC 简介

TCC是由支付宝架构师提供的一种柔性解决分布式事务解决方案,主要包括三个步骤:

TCC流程

TCC的关键流程如下图(以下单和扣减库存为例子)

Q: 预生成订单失败了,为什么要通过TCC执行预处理数据回滚?

A: 可能预生成订单成功,但是接口返回失败(超时失败),所以预处理在某些情况下是有预处理数据,需要清

TCC异常场景

在整个流程,我们主要需要关注的是cancel失败和confirm失败引起的数据不一致现象

注意事项

TCC服务支持接口失败重试,所以对TCC暴露的接口都需要满足幂等性(根据事务Id很好满足)

基于TCC的中心化事务一致性解决方法,各个应用服务器如果需要感知某次事务是否成功的成本很高,所以对于自身而言进行事务补偿成本就会很高.举个例子:

1⃣️每次成功的执行本应用服务器的事务以后,都需要把成功执行的事务Id记录
2⃣️继续confirm或者将confirm完的数据回滚,对用户都很不友好,特别是需要confirm订单或者回滚订单数据
3⃣️可以根据事务开始的时间,并且设计一个事务超时时间,如果在这个时间范围以外事务还没有处理完成,就可以当做这个事务已经失败,将预处理数据删除
总体来说,事务补偿机制,心智负担过于沉重.所以只能依赖TCC服务器的失败重试机制,如果失败重试机制不能处理,只能人肉去处理(建议全程人肉,因为同时进行失败重试和人肉的话,因为如果失败重试和人肉都在操作同一条数据,还需要考虑这种竞争的场景,对重试次数需要限定)

后记

是否一定需要TCC服务器?
不一定,可以让交易链路来充当TCC服务器的角色,但是长期来看,TCC相当于是一个公用的组件,所以其它地方也需要TCC分布式事务,可以公用这一个组件(交易链路可以完成TCC所能完成的一切操作,把TCC多带带部署一个服务,仅仅是考虑整个系统的抽象结构和功能复用)

这里说的预处理,指的是什么?
在整个分布式事务中预处理的含义其实很广泛,比如订单,所谓的预处理就是生成订单,但是用户真实是看不到这些订单的,至于具体实现是在一张新表中记录还是在原有的订单表是加上标记位,具体实现方式由自己统筹考虑(当然还需要考虑记录事务Id);像减库存这种预处理,可以直接减少原始库存,再通过另外一张表来记录这次事务Id操作了哪个Sku的库存数量,当然也可以不减少库存只记录操作,但是这种方式在计算实际库存的时候复杂度会提高(需要减掉预处理的那部分)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64931.html

相关文章

  • 说说布式事务(二)

    摘要:以两阶段提交来说,主持人收到一个提案请求,打电话跟每个组员询问是否通过并统计回复,然后将最后决定打电话通知各组员。三阶段提交即是引入了另一个步骤,主持人打电话跟组员通知请准备通过提案,以避免没人知道真实决定而造成决定不一致的失业危机。 3PC 以两阶段提交来说,主持人收到一个提案请求,打电话跟每个组员询问是否通过并统计回复,然后将最后决定打电话通知各组员。要是主持人在跟第一位组员通完电...

    ysl_unh 评论0 收藏0
  • 说说布式事务(二)

    摘要:以两阶段提交来说,主持人收到一个提案请求,打电话跟每个组员询问是否通过并统计回复,然后将最后决定打电话通知各组员。三阶段提交即是引入了另一个步骤,主持人打电话跟组员通知请准备通过提案,以避免没人知道真实决定而造成决定不一致的失业危机。 3PC 以两阶段提交来说,主持人收到一个提案请求,打电话跟每个组员询问是否通过并统计回复,然后将最后决定打电话通知各组员。要是主持人在跟第一位组员通完电...

    Airy 评论0 收藏0
  • 说说布式事务(一)

    2PC(两阶段事务提交) 两阶段事务提交简化图 showImg(/img/bVsV61); 两阶段事务提交异常点 节点本身故障(比如Down机) 节点之间通信故障 两阶段事务提交错误点分析 showImg(/img/bVsV56); 说明 图中有问号的条目,是我不确定的地方,但是不影响这个分布式事务的结果 图中的感叹号条目,个人感觉其实也是允许先发消息再记录日志的,但是如果这样子做以后发生D...

    chunquedong 评论0 收藏0
  • 说说布式事务(四)

    摘要:最终一致性二基于的分布式事务补偿机制序列图异常场景处理预创建订单失败如果实际预创建订单成功订单定时补偿机制定时删除这部分订单不影响数据一致性下单失败预扣减库存失败如果预扣减库存真实失败则下单失败订单由定时补偿机制定时删除其它应用参照场景的处 最终一致性(二) 基于MQ的分布式事务补偿机制 序列图 showImg(https://segmentfault.com/img/bVzeHX);...

    qiangdada 评论0 收藏0
  • 说说布式事务(四)

    摘要:最终一致性二基于的分布式事务补偿机制序列图异常场景处理预创建订单失败如果实际预创建订单成功订单定时补偿机制定时删除这部分订单不影响数据一致性下单失败预扣减库存失败如果预扣减库存真实失败则下单失败订单由定时补偿机制定时删除其它应用参照场景的处 最终一致性(二) 基于MQ的分布式事务补偿机制 序列图 showImg(/img/bVzeHX); 异常场景处理 预创建订单失败:如果实际预创建...

    Anchorer 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<