15 | 分布式事务之TCC与SAGA
TCC 事务的实现过程
- 深入了解
- 翻译
- 解释
- 总结
分布式事务是分布式系统中的重要组成部分,而TCC和SAGA是两种主流的分布式事务实现方式。TCC采用Try-Confirm-Cancel的实现过程,适合需要强隔离性的场景,但业务侵入性较强;而SAGA适用于需要灵活性的场景,通过将大事务拆分为一系列子事务和设计对应的补偿动作来实现。相比TCC,SAGA不需要为资源设计冻结状态和撤销冻结的操作,补偿操作相对容易实现。另外,文章还介绍了AT事务,它采用异步提交的模式,提升了系统的吞吐量水平,但牺牲了隔离性。总的来说,分布式事务中并没有一种解决方案能够解决所有问题,而是需要根据具体场景选择合适的事务处理方案。文章通过介绍可靠事件队列、TCC和SAGA,展示了实现最终一致性的三种主流模式,为读者提供了深入了解分布式事务实现方式的指导。 总结:文章介绍了TCC和SAGA两种主流的分布式事务实现方式,以及AT事务的异步提交模式。它们各有优缺点,适用于不同的场景。通过介绍这三种主流模式,文章展示了实现最终一致性的多种方式,为读者提供了深入了解分布式事务实现方式的指导。
请先领取课程
全部留言(36)
- 最新
- 精选
- 公众号:业余草比如执行都哪一步或者补偿到哪一步了。这段话感觉读不通
作者回复: 感谢,是“比如执行都【到】一步或者补偿到哪一步了”,编辑同时看到了请更新一下。
2021-01-045 - 渁皛の巧尅劦老师 可靠事件队列存在隔离线问题 会出现超售 tcc资源锁定可以解决超售,可是saga的反向恢复可以解决超售问题吗,我理解正向恢复就是可靠事件的实现方式,反向恢复是对于tcc的撤销优化 但是能解决超售吗?
作者回复: 设想以下:手上10本书,同时卖给了2个人每人6本,此时反向恢复应该如何写?能够如何写?
2021-03-3062 - 漂泊的小飘为什么saga要求ti和ci有交换性呢,不都是ti执行过或者执行不成功后执行ci吗
作者回复: 便于简化重试的场景。当ti反复执行多次,其中已经失败到一定次数,就可以开始ci。
2021-03-031 - Helios为什么消息队列会有隔离性问题呢,不是能通过topic隔离么
作者回复: 隔离性是数据库的Isolation属性,topic隔离了消息,只能保证每个消息的消费者独立执行,但并不代表这些消费者操作的数据就天然地具备Isolation
2021-02-031 - 丁乐洪周博士的书必须买呀
作者回复: 感谢支持
2021-01-221 - 恒仁老师,我理解不管采用哪种方式,库存本身的设计也应该保证在调用库存系统扣减库存时不会超售的情况呢?
作者回复: 可是“库存”并不是一个整体,它是有多个独立节点构成的集群,如果不做额外处理,并不会有什么天然的约束去保证不会超售。
2020-12-225 - 子夜枯灯感谢老周的持续分享,整体学习下来干货满满。来龙去脉讲的很清晰。
作者回复: 感谢认可
2020-12-21 - zhanydTCC Try: 尝试执行阶段,完成所有业务检查,锁定必须的业务资源(冻结金额,库存等) Confirm:确认执行阶段,利用锁定的业务资源,来完成业务处理 Cancel:取消执行阶段,释放Try阶段锁定的业务资源 优点:几乎不会涉及到锁和资源的争用,具有很高的性能潜力。 缺点:Try,Confirm,Cancel功能需要自己编码实现,业务侵入性较强。 Saga 把大事务拆分成若干个子事务,T1,T2,…,Ti,…,Tn 每一个子事务都对应一个补偿动作,C1,C2,…,Ci,…,Cn 如果 Ti 事务提交失败,整个事务要回滚,通过补偿动作 Ci,…,C2,C1 依次恢复 T1,T2,…,Ti 事务造成的影响,回到初始状态。 Saga 模式适用于业务流程长,业务流程多且需要保证事务最终一致性的业务系统。 优点:一阶段提交本地数据库事务,无锁,高性能;补偿服务易于理解,易于实现。 缺点:Sage无法保证隔离性,需要额外加锁保证。2020-12-2134
- 小动物可靠性消息队列 优点:简单。实现上的简单,结构上的简单。无需过多的考虑失败的情况。 缺点:优点本身也是缺点,过于简单其实也不简单,不是所有的业务都支持一定会成功这么一个简单的特性。同时会出现某一段时间数据不一致。 适用场景:业务简单或业务不应该失败甚至不关心业务结果的情况。如消息推送,数据同步等。 TCC 优点:隔离、无锁。将过程拆解后,各个步骤均无需锁的介入即可完成。允许业务失败。 缺点:对业务要求较高,直接影响业务的结构设计。需要预留出冻结的行为。 适用场景:涉及业务系统均可控,有修改结构的权限,同时业务允许出现冻结概念更好。流程复杂,隔离性要求高的场景。 SAGA 优点:对业务侵入性比tcc低些。同时支持前两者的能力。提出了补偿的概念,使得业务更容易支持。 缺点:隔离性。若涉及业务多,可能会出现某些业务在最终一致性前被再次操作,导致错误 适用场景:支持业务补偿的场景。如订单的支付发货部分,发货失败退款即可。 这些思路,其实可以组合使用,不一定要单选。2021-01-2121
- 西门TCC : 资源先锁住,不行再释放;SAGA:资源先用了,不行还回去;正常的业务场景下,资源被使用要比还回去的概率高很多(个人感觉SAGA比TCC适用场景更多),但是一旦还不回去处理起来就太麻烦了,像金融这种严谨性高的行业不太允许出现这样的情况。2020-12-2217