文章导航
优化动机和指导原则
当一笔分布式事务的参与者较多时,同时每个参与者都涉及到一阶段和二阶段,还有异常场景下的幂等控制,空回滚以及防资源悬挂处理,调用关系会显著复杂化。特别当业务并发量很大的情况下。比如国内领先的第三方支付场景,并发量在高峰期十分惊人。
那么如何尽可能地提高分布式事务的性能就是一个值得深入思考的问题。
其实优化的原则也很直观:在能够满足业务诉求,保证各个参与方数据能够达成最终一致性的前提下,在下面两个方面努力:
- 增加系统的整体吞吐量
- 减少最终响应给终端用户的响应时间
那么反应在系统设计上,就是要想方设法减少网络调用的次数以及尽可能地降低每次调用的耗时。
没有调用就没有伤害。
在复杂的分布式网络环境下,减少一次非必要的调用很可能就可以显著地降低系统的整体复杂度。毕竟,调用即意味着耦合,无论是单体系统还是分布式系统,降低组件和系统间的耦合性都是我们孜孜不倦追求的目标。
最末参与者优化(LPO)
首先,我们就来看看名为最末参与者优化 - Last Participant Optimization的方案。它旨在减少分布式事务中的网络调用次数。
以之前跨行转账分布式事务的场景为例,看看这里存在的潜在问题:
可以看到,银行A既是分布式事务的发起方,同时它还是参与方之一。所以当银行A完成对银行B的一阶段调用成功之后,马上会开始自己的一阶段调用。如果都成功了,就会通知TC可以执行二阶段了。TC发起各个参与者的二阶段Commit。
我们来仔细观察一下事务发起方,参与者A的执行特点。
当参与者A的一阶段成功执行完成后,意味着分布式事务整体就可以进入到二阶段。TC会触发参与者A和参与者B的二阶