分布式事务-TCC

分布式事务TCC是一种补偿式的分布式事务解决方案,旨在保证在分布式系统中,跨多个服务或资源的事务能够保持一致性和可靠性。

一、TCC概述

TCC,全称Try-Confirm-Cancel,是一种用于处理分布式事务的协议。其核心思想是通过在业务逻辑中嵌入三个阶段(Try、Confirm、Cancel)的操作,来确保在分布式事务中,各个参与者能够协同工作,实现事务的原子性。TCC协议本身不保证事务隔离性,一阶段执行完成就提交本地事务,需要业务模型实现时解决事务隔离性问题。

二、TCC运行流程

  1. Try阶段

    • 业务逻辑会预留资源,并检查所有的前提条件是否满足。

    • 如果检查通过,则执行业务逻辑,进入Confirm阶段;否则,回滚预留的资源,进入Cancel阶段。

  2. Confirm阶段

    • 在这个阶段,业务逻辑会确认执行结果。

    • 如果确认通过,则提交所有的操作,完成事务;否则,回滚所有的操作,进入Cancel阶段。

  3. Cancel阶段

    • 如果在Try或Confirm阶段出现错误或异常,业务逻辑会撤销之前执行的操作,并释放之前预留的资源。

三、TCC实现流程

1. 定义TCC接口

首先,需要定义TCC操作的接口,通常包括三个方法:tryconfirmcancel

  • try 方法:尝试执行业务操作,并预留必要的资源。如果成功,则返回一个全局唯一的事务ID(通常称为XID)和表示操作是否成功的结果。

  • confirm 方法:确认try阶段成功提交的操作。它应该是一个幂等操作,即使多次调用也应该产生相同的结果。

  • cancel 方法:取消try阶段预留的资源,并回滚可能的业务操作。同样,它也应该是一个幂等操作。

2. 实现TCC业务逻辑

业务代码中,需要实现上述三个方法的具体逻辑。

  • try 方法中,需要执行实际的业务操作,并预留资源。这可能包括数据库记录的锁定、外部服务的调用等。如果所有操作都成功,则返回成功结果和XID;否则,返回失败结果并可能触发cancel操作。

  • confirm 方法中,需要根据XID确认并提交try阶段的操作。。

  • cancel 方法中,需要根据XID取消并回滚try阶段预留的资源。

3. 管理事务状态

需要实现事务协调器,可以通过将事务状态存储在数据库、缓存或分布式系统中来实现。事务状态可以包括:TRYING(正在尝试)、CONFIRMED(已确认)、CANCELED(已取消)等。

4. 调用TCC接口

业务流程中,当需要执行分布式事务时,需要按照以下步骤调用TCC接口:

  1. 调用try方法执行业务操作并预留资源。

  2. 根据try方法的返回结果决定是否调用confirmcancel方法。

  3. 如果try方法成功,则调用confirm方法提交事务;否则,调用cancel方法回滚事务。

5. 异常处理和重试

在分布式系统中,网络分区、服务故障等异常情况是不可避免的。因此,需要实现异常处理和重试机制来确保TCC事务的可靠性。

  • 对于try方法,如果发生异常,可以根据具体情况选择是否重试或调用cancel方法。

  • 对于confirmcancel方法,由于它们是幂等操作,因此可以安全地重试,直到它们成功为止。

6.注意事项
  • 幂等性confirmcancel方法必须是幂等的,以确保多次调用不会产生副作用。

  • 事务隔离性:在try阶段,需要确保对资源的访问是隔离的,以避免并发冲突,即通过资源预留的方式解决事务隔离性问题。

  • 超时处理:为tryconfirmcancel操作设置合理的超时时间,并在超时时采取相应的措施(如重试、回滚等)。

  • 错误处理:为可能出现的各种错误和异常情况设计合理的错误处理策略。

四、TCC的优缺点

优点

  1. 灵活性:TCC允许在业务逻辑中自定义补偿操作,可以根据具体业务场景进行灵活配置。

  2. 支持分布式事务:TCC可以支持跨多个服务或资源的分布式事务,保证事务的一致性和可靠性。

  3. 减少阻塞时间:Try阶段可以预留资源,从而减少了阻塞时间,提高了并发能力,从而提升性能。

缺点

  1. 应用侵入性强:TCC需要在业务逻辑中嵌入Try-Confirm-Cancel三个阶段的逻辑,对于现有系统的改造成本较高。

  2. 开发难度大:代码开发量较大,需要保证confirm和cancel接口的幂等性,增加了开发的复杂度。

五、总结

TCC作为一种补偿式的分布式事务解决方案,在分布式系统中具有重要的作用。它通过在业务逻辑中嵌入Try-Confirm-Cancel三个阶段的逻辑,来保证分布式事务的一致性和可靠性。然而,TCC也存在一些缺点,如应用侵入性强、开发难度大等。因此,在选择分布式事务解决方案时,需要根据具体业务场景和需求进行权衡和选择。

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

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

相关文章

誉天Linux云计算架构师就业班要学习哪些内容?

课程设计思路: 根据十多年来毕业学员的就业和反馈,对数百名学员的就业回访;Linux运维,云计算,高并发,分布式,容器,云原生,自动化等是目前市场上就业情况最好,需求量最大&…

Python面向对象学习笔记

Python面向对象编程 记录人: 李思成 时间: 2024/05/01至2024/05/23 课程来源: B站Python面向对象 1.面向对象编程概述 官方概述 程序是指令的集合,运行程序时,程序中的语句会变成一条或多条指令,然后…

uniapp打包可以上架app store吗

uniapp打包ios应用,是可以上架app store的。 打包ios应用,首先需要正式的ios证书,ios证书需要通过苹果开发者中心来生成,假如你还没有生成ios的打包证书,或者对ios证书完全没有概念,可以参考下面的文章先生…

AI企业需要“联盟营销”?一文带你探索AI企业营销新玩法!

为什么联盟营销对AI业务有较大优势 联盟营销在电商领域、saas领域与其他产品领域同样有效。在AI业务中,它有效的原因与其他领域大不相同。 高好奇心和试用率 AI领域是创新的热点。它吸引了一群渴望探索和尝试每一项新技术的人群。这种蓬勃的好奇心为聪明的AI企业提…

webpack快速入门---webpack的安装和基本使用

webpack是什么 本质上,webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个 依赖图(dependency graph),然后将你项目中所需的每一个模块组合成一个或多个 bund…

【Text2SQL 论文】评估 ChatGPT 的 zero-shot Text2SQL 能力

论文:A comprehensive evaluation of ChatGPT’s zero-shot Text-to-SQL capability ⭐⭐⭐⭐ arXiv:2303.13547 这篇论文呢综合评估了 ChatGPT 在 zero-shot Text2SQL 任务上的表现。 dataset 使用了 Spider、Spider-SYN、Spider-DK、Spider-Realistic、Spider-CG…

拼多多(PDD)社招一面原题

未成年游戏退费 5 月 28 日,中国互联网协会发布《未成年人网络游戏服务消费管理要求(征求意见稿)》团体标准。 该标准是游戏行业首个完整的消费管理规范,可用于未成年人游戏消费退费纠纷解决,也可为相关行政部门、司法…

揭秘希喂、小米、安德迈宠物空气净化器的惊人效果,性价比爆表!

当谈及养猫,首先浮现在脑海中的烦恼无疑是猫咪的掉毛和便臭问题。这些问题对于我们这些爱宠人士来说,无疑是一种持续的挑战。特别是在炎热的夏季,高温本身就让人焦躁不安,而空气中飘散的猫浮毛和便臭更是加剧了这种不适感。 为了…

linux的磁盘分区与管理

磁盘分区与管理 识别磁盘 一块硬盘的“艺术”之旅(硬盘空间使用,经历的步骤) •识别硬盘 > 分区规划 > 格式化 > 挂载使用 Unix/Linux的基本哲学理念:一切皆文件 /dev:存放设备(键盘、鼠标、光驱、硬盘……

<Transition> expects exactly one child element or component.

近日在vue中使用 Transition 标签是发生了如下报错: [plugin:vite:vue] expects exactly one child element or component. 原因: 仅支持单个元素或组件作为其插槽内容。如果内容是一个组件,这个组件必须仅有一个根元素。 原始代码&#xff1…

深入了解多维数组索引:以二维数组为例

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、二维数组的基础概念与重要性 二、二维数组的索引访问 1. 索引访问的基本方法 2. 切片…

斯坦福报告解读3:图解有趣的评估基准(上)

《人工智能指数报告》由斯坦福大学、AI指数指导委员会及业内众多大佬Raymond Perrault、Erik Brynjolfsson 、James Manyika等人员和组织合著,旨在追踪、整理、提炼并可视化与人工智能(AI)相关各类数据,该报告已被大多数媒体及机构…

2、C++简单程序设计:工具、数据类型与运算符

C简单编程 C编程工具程序开发基本概念程序工具VS界面简介项目创建项目调试帮助文档 C数据类型C程序基本结构C符号关键字标识符文字运算符分隔符空白 C数据类型基本数据类型常量变量符号常量 C运算符与表达式算术运算符关系运算符逻辑运算符位运算符赋值运算符杂项运算符C 中的运…

SpringBoot【注解 01】@Scheduled实现定时任务的串行和并行执行

在SpringBoot中,如果使用Scheduled注解来定义多个定时任务,默认情况下这些任务将会被安排在一个单线程的调度器中执行。这意味着,这些任务将会串行执行,而不是并行执行。当一个任务正在执行时,其他被触发的任务将会等待…

【Linux】Linux基本指令2

我们接着上一篇:http://t.csdnimg.cn/bSJx8 我们接着完善ls指令 我们可以直接匹配对应格式的文件匹配出来 1.man指令(重要): Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助…

2024成都化工装备展览会

2024中国化工展(成都)化工装备展 成都国际化工技术装备展览会将于2024年9月11-13日在成都世纪城新国际会展中心举办。展会设置石化装备、化工单元设备、化工环保设备、泵阀管道、自动化及仪器仪表、安全防护与应急消防、智慧化工园区等展区,汇…

java版CRM客户关系管理系统源码-CRM客户关系管理系统的技术架构与功能实现

CRM客户关系管理系统的技术架构与功能实现 一、引言 随着市场竞争的日益激烈,客户关系管理(CRM)已成为企业赢得市场、提升客户满意度、促 进业务增长的关键手段。本文旨在介绍一款先进的CRM客户关系管理系统的技术架构与功能实现&#xff0…

【credit_based 流控管理-2】

credit_based 流控管理-2 上篇文章是简要介绍一下基于credit的流控原理,和实现方法; 本篇序列是应对: when the design can send and return more than one credits at a time. 针对考虑解决: send and return credits > 1 at a time. no…

leetCode-hot100-数组专题之子数组+二维数组

数组专题之子数组二维数组 子数组238.除自身以外数组的乘积560.和为K的子数组 二维数组48.旋转图像 子数组 数组的子数组问题是算法中常见的一类问题,通常涉及到数组的连续元素。在解决这类问题时,常用的方法有前缀和、滑动窗口、双指针,分治…

了解VS安全编译选项GS

缓冲区溢出攻击的基本原理就是溢出时覆盖了函数返回地址,之后就会去执行攻击者自己的函数; 针对缓冲区溢出时覆盖函数返回地址这一特征,微软在编译程序时使用了安全编译选项-GS; 目前版本的Visual Studio中默认启用了这个编译选项…