文章导航

  • 优化动机和指导原则
  • 最末参与者优化(LPO)

优化动机和指导原则

当一笔分布式事务的参与者较多时,同时每个参与者都涉及到一阶段和二阶段,还有异常场景下的幂等控制,空回滚以及防资源悬挂处理,调用关系会显著复杂化。特别当业务并发量很大的情况下。比如国内领先的第三方支付场景,并发量在高峰期十分惊人。

那么如何尽可能地提高分布式事务的性能就是一个值得深入思考的问题。

其实优化的原则也很直观:在能够满足业务诉求,保证各个参与方数据能够达成最终一致性的前提下,在下面两个方面努力:

  1. 增加系统的整体吞吐量
  2. 减少最终响应给终端用户的响应时间

那么反应在系统设计上,就是要想方设法减少网络调用的次数以及尽可能地降低每次调用的耗时。

没有调用就没有伤害。

在复杂的分布式网络环境下,减少一次非必要的调用很可能就可以显著地降低系统的整体复杂度。毕竟,调用即意味着耦合,无论是单体系统还是分布式系统,降低组件和系统间的耦合性都是我们孜孜不倦追求的目标。

最末参与者优化(LPO)

首先,我们就来看看名为最末参与者优化 - Last Participant Optimization的方案。它旨在减少分布式事务中的网络调用次数。

以之前跨行转账分布式事务的场景为例,看看这里存在的潜在问题:


可以看到,银行A既是分布式事务的发起方,同时它还是参与方之一。所以当银行A完成对银行B的一阶段调用成功之后,马上会开始自己的一阶段调用。如果都成功了,就会通知TC可以执行二阶段了。TC发起各个参与者的二阶段Commit。

我们来仔细观察一下事务发起方,参与者A的执行特点。

当参与者A的一阶段成功执行完成后,意味着分布式事务整体就可以进入到二阶段。TC会触发参与者A和参与者B的二阶段。也就是说,在参与者A的一阶段和二阶段之间隔着一次对TC的调用。调用TC的目的也只是让它感知到这笔分布式事务已经进入到二阶段了,希望TC能够排除万难尽一切可能推进各个参与方的状态到终态。

所以对于参与者A而言,当它成功执行完自身的一阶段之后,就可以认为它的二阶段的执行只是时间问题了。所以我们可以考虑将参与者A的一阶段和二阶段进行合并,也就是将它Try阶段和Confirm阶段合到一起。

那么在异常情况下,如果参与者A在执行合并后的Try和Confirm失败了,那么参与者的本地事务会首先回滚,清理参与者A的本地资源。然后通知TC需要回滚整笔分布式事务,TC随后就会发起参与者B的二阶段Rollback。

所以不管是在正常场景还是异常场景下,此时参与者A就变为了单阶段参与方:它只有一个合并了一阶段和二阶段的单阶段。这样做的结果就是参与者A单阶段的执行结果会决定整个分布式事务的结果:

  • 如果它执行失败了,那么TC会触发其它参与者二阶段Rollback
  • 如果它执行成功了,那么TC会触发其它参与者二阶段Confirm

顾名思义,因为参与者A自己是整个分布式事务的发起方和最后一个发起一阶段的参与者,所以这个优化方案被形象地成为最末参与者优化。

相应的,执行的时序变化为:


这个简单的优化,能够减少至少一次网络调用(TC调用参与者A的二阶段)的开销。减少网络调用不仅是降低了RT,更重要的是将系统执行的时序复杂度降低了。在对数据一致性有一定要求的高并发场景下,还是能够起到很大的作用。

总结一下这个优化方案的核心思想:

  1. 将发起方参与者的一阶段和二阶段操作合并成一个,让发起方作为单阶段的参与方。
  2. 发起方的提交结果会作为整个分布式事务的最终结果,TC的作用只是保证这个最终结果能够顺利地达成。

[分布式事务-TCC] 4. TCC的优化方案之一:最末参与者优化(LPO)相关推荐

  1. 分布式事务专题(四):分布式事务解决方案之TCC

    目录: 基础概念 分布式事务理论 分布式事务解决方案之2pc 分布式事务解决方案之TCC(本章) 分布式事务解决方案之可靠消息最终一致性 分布式事务解决方案之最大努力通知 分布式事务综合案例分析 4. ...

  2. 最末参与者优化 lpo_优化博客以提高读者参与度的6种方法

    最末参与者优化 lpo 当我与组织合作以帮助他们建立社区时,内容是建立受众群体的关键组成部分,而博客是提供该内容的关键工具. 无论您是在撰写开放源代码项目,还是在进行开源冒险,工作和探索,如果您在投入 ...

  3. 分布式事务(三):分布式事务解决方案之TCC(Try、Confirm、Cancel)

    什么是TCC TCC是Try.Contirm.Cancel三个词语的缩写,TCC要求每个 分支事务实现三个操作:预处理Try.确认Contirm.撤销Cancel.Try操作业务检查以及资源预留,Co ...

  4. 分布式事务解决方案之TCC

    目录 一.什么是TCC 二.TM 事务管理器 三.TCC解决方案 四.TCC需要注意的问题 一.什么是TCC TCC是Try.Confirm.Cancel三个词语的缩写,TCC要求每个分支事务实现三个 ...

  5. 分布式事务(4)之TCC解决方案

    目录​​​​​ 一.什么是TCC事务 二.TCC解决方案 2.1空回滚 2.2幂等 2.3悬挂 三.Hmily实现TCC分布式事务 3.1业务说明 3.2程序组成部分 3.3 创建数据库 3.5dis ...

  6. 【20211106】在技术上是如何实现分布式事务_V3(TCC)

    时间:2021年11月06日 作者:小蒋聊技术 大家好,欢迎来到小蒋聊技术.小蒋准备和大家一起聊聊技术的那些事. 经过之前的分享,想必大家已经对"两阶段提交"(2PC - Two- ...

  7. 分布式事务管理原理 TCC和LCN 分布式详解

    最近笔者在面试过程中发现,分布式的微服务开发越来越广泛了,越来越多的企业在面试时都需要有微服务的经验,那么在谈到微服务的过程中,很多的面试官都会问到一个问题:有没有接触过分布式事务管理?怎么实现分布式 ...

  8. 分布式事务之:TCC (Try-Confirm-Cancel) 模式

    在当前如火如荼的互联网浪潮下,如何应对海量数据.高并发成为大家面临的普遍难题.广大IT公司从以往的集中式网站架构,纷纷转向分布式的网站架构,随之而来的就是进行数据库拆分和应用拆分,如何在跨数据库.跨应 ...

  9. 分布式事务之Seata TCC

    文章目录 TCC 对比 注意的问题 实现细节 Seata TCC实战 A银行代码 B银行代码 聚合服务代码 TCC TCC是一种资源,实现了Try.Confirm.Cancel三个操作接口.与2PC不 ...

最新文章

  1. 【CVPR 2021】首次实现将GAN压缩22倍,性能比原始模型还高!
  2. Android启动页黑屏及解决方案
  3. 微软VS.NET(visual studio.net)中FreeTextBox控件的详细使用视频教程
  4. hibernate中@Entity和@Table的区别
  5. mysql5.1.6安装_mysql 5.1.6的安装启动
  6. java lwjgl3_java-LWJGL 3鼠标移动
  7. 转:IDEA 创建类注释模板和方法注释模板
  8. 算法动画 - 理解函数曲线
  9. SimpleDateFormat格式化
  10. NLP最新趋势,7个主流业务场景!
  11. osmand中矢量数据地图绘制
  12. 【機器學習筆記】xgboost中的min_child_weight參數理解。
  13. .21f## c语言,C++核心准则编译边学-F.21 如果需要返回多个输出值,最好返回结构......
  14. 相机标定:机器人手眼标定全解析
  15. 中国石油大学《化工原理二》第一阶段在线作业
  16. 【学习笔记】认识张量
  17. java 判断条件_Java初学者:条件判断及其语句
  18. 神经网络分类算法是什么,神经网络分类算法简介
  19. 集群并行效率测试软件,并行集群系统的Linpack性能测试分析
  20. 用英语提交软件测试bug,软件测试——关于提交bug随笔

热门文章

  1. Linux/Unix设计思想
  2. 【深度学习】详细的神经网络架构图
  3. iOS H5原生WKWebView调起支付宝客户端支付方案
  4. XP系统启动时滚动条总是时间很长
  5. eclipse的放大字体
  6. 关于emacs字体放大问题
  7. 百度paddlepaddle《青春有你2》技术打卡五天学习总结与创意赛参加
  8. oracle dbms_metadata,DBMS_METADATA报错解决方法
  9. 苹果开发者账号和证书那些事
  10. 软考信息安全工程师+2021-01-30 1.网络信息安全概述+重点