探索TCC:释放高可用性和弹性事务的潜力

news2024/11/22 13:20:01

1、TCC简介

分布式事务是指在分布式系统中,多个服务之间需要保证数据的一致性和完整性的场景。传统的单机事务无法满足分布式系统的需求,因此需要引入一种新的事务模型来解决分布式事务问题。

TCC(Try-Confirm-Cancel)是一种基于补偿机制的分布式事务模型,它将一个分布式事务拆分为三个阶段:Try、Confirm和Cancel。每个参与者(服务)都需要提供这三个阶段对应的业务逻辑,以保证在不同的情况下能够达到数据的最终一致性。

  • Try阶段:在这个阶段,每个参与者尝试执行业务操作,并预留必须的业务资源,例如锁定库存、冻结账户余额等。如果所有参与者都成功执行了Try操作,则进入下一个阶段;否则,执行Cancel操作,释放预留资源,回滚事务。
  • Confirm阶段:在这个阶段,每个参与者确认执行业务操作,并提交预留资源,例如扣减库存、扣款账户余额等。如果所有参与者都成功执行了Confirm操作,则事务完成;否则,执行Cancel操作,释放预留资源,回滚事务。
  • Cancel阶段:在这个阶段,每个参与者取消执行业务操作,并释放预留资源,例如解锁库存、解冻账户余额等。这个阶段只有在Try或Confirm失败时才会触发。

TCC模型的优点是:

  • 无需依赖第三方中间件或数据库来实现分布式事务,降低了系统复杂度和成本。
  • 无需锁定全局资源,提高了系统的并发性能和可用性。
  • 适用于各种类型的业务场景,只要能够定义出清晰的Try、Confirm和Cancel逻辑。

TCC模型的缺点是:

  • 需要开发人员手动编写三个阶段的业务逻辑,并保证其正确性和一致性,增加了开发难度和维护成本。
  • 需要考虑各种异常情况和边界情况,并提供相应的补偿策略和重试机制,增加了系统复杂度和风险。
  • 需要引入一个TCC分布式事务框架来管理和协调各个参与者的状态和行为,例如国内开源的ByteTCC、Himly、TCC-transaction。

2、支持TCC的中间件

以下是一些支持TCC的流行事务中间件:

  1. Atomikos: Atomikos是一个Java事务管理器(TM),提供了对TCC事务模型的支持。它可以与Spring等框架集成,并提供了可靠的分布式事务管理能力。
  2. Narayana: Narayana是JBoss事务管理器(TM)的开源版本,支持TCC事务模型。它具有高度可扩展性和可靠性,可以与各种Java应用程序集成。
  3. Seata: Seata是一个开源的分布式事务解决方案,支持TCC模型和其他事务模型。它提供了高性能和高可用性的分布式事务管理能力,并可以与Spring Cloud、Dubbo等微服务框架无缝集成。

  1. ByteTCC: ByteTCC是一个轻量级的TCC事务中间件,适用于高并发场景。它提供了简单易用的API,并且支持自动回滚和恢复功能。

这些事务中间件都具有各自的特点和适用场景,可以根据具体需求选择合适的中间件来支持TCC事务模型。此外,一些主流的数据库也提供了自身的分布式事务解决方案,例如MySQL的XA事务和Oracle的Global Transaction Services(GTS)等,可以根据具体数据库选择相应的解决方案。

3、TCC相关问题

如果发现某个服务的Cancel或者Confirm一直没成功,会不停的重试调用他的Cancel或者Confirm逻辑,务必要他成功。

===================================

如果文章对你有帮助,请不要忘记加个关注、点个赞!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/685864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL的分库分表

分必要不要分库分表(通过优化之后还明显影响业务再分,可以通过监控慢查询确定) 分库分表的一般条件:单表数据量超过1000w(阿里应该是说5000w)或者单表数据文件(.ibd)超过20GB,这个很重要,&…

点云配准综述一篇综述《A comprehensive survey on point cloud registration》(翻译)

参照了 2021最新关于点云配准的全面综述 - 知乎,并且加了些自己翻译,全篇的内容可能稍有删减。主要作为个人笔记,阅读了几篇综述,发现这篇是质量较好的,值得花时间细读。 文章分类 文章将配准方法分为了同源配准和不…

JMeter三大重要组件——线程组、取样器、查看结果数(3)

JMeter三大重要组件 一、JMeter三大重要组件——线程组1、作用:JMeter主要通过线程组来运行用户脚本2、在取样器错误后要执行的动作:3、线程属性3、调度器4、setUp线程组和tearDown线程组 二、JMeter三大重要组件——取样器1、基本a、自动重定向和跟随重…

Obsidian多端同步插件LiveSync

网友 Leo 和 Paco反馈,群晖升级到 DSM7.2 ,注册表可以搜索镜像,根据 Leo 贴的 /var/packages/Docker/etc/dockerd.json 的内容,DSM7.2 应该是使用了 https://docker.nju.edu.cn 作为注册表镜像,但老苏测试过下面几种情…

易基因:易基因近期染色质免疫共沉淀测序(ChIP-seq)研究成果|项目集锦

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 在生物学研究中,DNA与蛋白质之间的互作(DNA-Protein Interactions,DPIs)是至关重要的,参与基因的表达、调控、复制、重组和修复…

m 序列(最长线性反馈移位寄存器序列)详解

本专栏包含信息论与编码的核心知识,按知识点组织,可作为教学或学习的参考。markdown版本已归档至【Github仓库:https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 m 序列 (最长线性反…

Git进阶系列 | 8. 用Reflog恢复丢失的提交

Git是最流行的代码版本控制系统,这一系列文章介绍了一些Git的高阶使用方式,从而帮助我们可以更好的利用Git的能力。本系列一共8篇文章,这是最后一篇。原文:Using the Reflog to Restore Lost Commits[1] “Reflog”是Git不太为人所…

常见的未授权漏洞批量检测工具

常见的未授权漏洞检测 命令行版已放出支持多线程,批量扫描,指定服务扫描,命令行版地址https://github.com/xk11z/unauthorized_com GUI版unauthorizedV2已更新,可批量ip检测导出结果 项目包含 1 、FTP 未授权访问&#xff08…

SadTalker AI模型使用一张图片与一段音频便可以自动生成视频

SadTalker模型是一个使用图片与音频文件自动合成人物说话动画的开源模型,我们自己给模型一张图片以及一段音频文件,模型会根据音频文件把传递的图片进行人脸的相应动作,比如张嘴,眨眼,移动头部等动作。 SadTalker,它从音频中生成 3DMM 的 3D 运动系数(头部姿势、表情),…

webstorm配置vue开发环境

🌳🌳🌳前言:本文章针对于如何用IDE和webstorm运行一个别人的vue项目进行步骤记录。 📙参考:(10条消息) idea配置vue开发环境_idea配置vue运行环境_drinkworld的博客-CSDN博客https://blog.csdn.net/drinkwo…

VSCode ssh ubuntu20显示图像界面

1、在vscode中安装 Remote X11(SSH) 2、在本地端安装MobaXterm 点击Settings-->Configurations-->X11,设置如下: 3、在服务端修改 ~/.bashrc文件,在末尾添加 export DISPLAY"192.168.0.201:0.0" 其中引号中内容为本地端IP地…

英伟达股价能否凭借AI进一步上涨到500美元?

来源: 猛兽财经 作者:猛兽财经 猛兽财经在之前的关于英伟达的分析中(5月2日),就认为英伟达在人工智能方面的增长潜力还没有完全释放出来,并认为英伟达的股价将会很快涨到300美元,结果到了6月…

代码随想录二刷 day34 | 贪心之1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果

1005.K次取反后最大化的数组和 题目链接 解题思路: 两次贪心 如何可以让数组和最大呢? 局部最优:让绝对值大的负数变为正数,当前数值达到最大,整体最优:整个数组和达到最大 如何转变K次正负,让…

CASS打印地形图操作

1、打开地形图,如下: 2、在“工程应用”菜单栏中,选择“查询两点距离及方位”,如下: 3、量取地形图的大致范围大小,如下: 读取图上距离,用于设置纸张大小。 4、点击左上角打印图形&…

【算法题】神奇的斐波那契数列(Fibonacci sequence)、青蛙跳台阶问题、矩阵中的路径

神奇的斐波那契数列和青蛙跳台阶问题 一、神奇的斐波那契数列1.1、题目描述1.2、递归算法1.3、迭代法1.4、小结 二、青蛙跳台阶问题2.1、题目描述2.2、思路2.3、动态规划法2.4、小结 三、矩阵中的路径3.1、题目描述3.2、思路3.3、代码实现3.4、小结 总结 一、神奇的斐波那契数列…

卫星地图应用经典实例项目(7个)

本文会介绍引用一些非常好的卫星地图等相关的应用,一方面给大家增加见识,另一方面会提供一些设计开发的思路以及代码。 文章目录 热气球追踪系统googlemap实现卫星轨迹satvis卫星Cesium系统NASA的worldview系统项目Esri-Satellite-Map基于leaflet的卫星轨迹绘制项目地球当前…

关于Altium Designer 差分线规则设置的方法纠偏

本文适用于AD20以后版本。在AD的原理图及pcb的4年设计学习中,入门课是学校的AD09,简单的两层板绘制。后来因工作需要,就报了培训班,学习了基于AD19的相关使用方法。后来在很多的项目开发中,逐渐发现之前从书本、培训课…

Qt QGraphicsScene模块实现圆点绘制在所有窗体的最前方,实现圆点的“彩色拖尾”效果以及“选中方框”效果

文章目录 前言1、效果2、代码实现2.1 思路2.1.1 “拖尾”效果2.1.2 “选中方框区域”效果2.2 代码 总结 系列文章: (一)Qt 将某控件、图案绘制在最前面的方法,通过QGraphicsScene模块实现 (二)Qt QGraphics…

【SCI/SSCI/EI录用案例】仅26天录用,1天见刊

【Unionpub学术】录用/见刊/检索案例:2023年6月10日-2023年6月16日 2区材料类SCI 【期刊简介】IF:3.5-4.0,JCR2区,中科院3区 【检索情况】SCI 在检,正刊 【征稿领域】降解材料及其相关技术的研发,如聚合物基轻质材…

PyTorch 2简介:卷积神经网络

介绍 在本系列的上一部分中,我们使用了CIFAR-10数据集,并介绍了PyTorch的基础知识: 张量及其相关操作数据集和数据加载器构建基本的神经网络基本模型的训练和评估 我们为CIFAR-10数据集中的图像分类开发的模型只能在验证集上达到53%的准确率&…