[分布式事务-TCC] 5. TCC的优化方案之二:同库优化

本文探讨了TCC(Try-Confirm-Cancel)分布式事务的优化方案——同库优化,通过将事务元数据保存在发起方本地存储,减少与事务协调器(TC)的网络交互,提高系统性能。发起方承担TC角色,负责事务推进,使用定时任务处理未终态事务。虽然增加了发起方的职责,但显著减少了网络调用,提升了系统吞吐量和响应时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

同库优化

在上一篇文章中,介绍了最末参与者优化(LPO),它能够减少网络调用的开销。减少网络调用不仅是降低了RT,更重要的是将系统执行的时序复杂度降低了。在对数据一致性有一定要求的高并发场景下,还是能够起到很大的作用。

进行最末参与者优化后的时序如下:

在这里插入图片描述
以减少网络调用次数和每次调用的耗时为切入点,我们来思考一下看看还有没有优化的空间。

注意到发起方需要和TC的几次交互如下:

  1. 分布式事务开始时,发起方会向TC注册一条主事务记录。
  2. 参与者的一阶段(包括单阶段参与者)开始前都会向TC注册一条分支事务记录,同时在一阶段执行完毕之后还会向TC更新这条事务记录。

做这些事情的目的都是将事务的最新状态给同步到TC端,方便它执行每个参与者的二阶段,保证分布式事务最终能够达到终态。对于每个参与者而言,这一去一来就多了至少2次网络调用。如果一笔分布式事务的参与者数量较多的话,那么调用次数还是比较可观的。

所以很直观地,我们可以考虑一种方案将这些调用给省掉。原来主事务以及分支事务(其实也就是异常处理环节提到的事务控制记录)的持久化都是在TC端完成的,如果将它们直接保存到发起方的本地存储中不就可以将网络调用改成本地调用了吗?

这个想法很美好,但是还有一个问题需要解决。就是如果发生了异常,TC会抱怨它怎么知道该如何处理,毕竟事务的元数据都不在TC那儿持久化了。

其实这个问题也好解决,既然TC的任务是依赖事务元数据来保证事务的推进,那么当TC本身不再保存这些数据后,谁保存这些数据谁负责事务的推进就好了啊,正所谓“你行你上”。

所以此时TC的职责被发起方给承接了,发起方需要设置定时任务来批量获取未走到终态的事务,然后根据事务元信息推进它们。如何推进?找到对应的参与方,调用它们的二阶段方法即可,成功后再更改事务的状态。如果还不成功,那么等待下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值