分布式事务之TCC

两阶段提交、三阶段提交与补偿事务:分布式事务解决方案详解 两阶段提交协议是一种分布式事务处理的经典协议。它通过引入一个协调者(coordinator)角色来确保事务的原子性和一致性。协调者负责跟踪参与事务的所有节点(称为参与者,participants)的状态,并根据这些状态来决定事务是否可以成功提交。三阶段提交协议是两阶段提交协议的改进版本。它通过引入一个新的“预提交”阶段来解决两阶段提交协议在某些场景下可能导致的阻塞问题。补偿事务是一种应对分布式事务失败情况的解决方案。在分布式系统中,事务操作可能会在多个节点上执行,如果某个节点上的操作失败,整个事务需要回滚。 阅读详情

业务场景介绍

假设现在有一个电商系统,里面有一个支付订单的场景。
在这里插入图片描述
对一个订单进行支付之后,我们需要做下面的步骤:

  • 更改订单的状态为“已支付”
  • 扣减商品库存
  • 给会员增加积分
  • 创建销售出库单通知仓库发货

以上业务场景对应下面的代码:

public class OrderService {

    // 库存服务
    @Autowired
    private InventoryService inventoryService;

    // 积分服务
    @Autowired
    private CreditService creditService;

    // 仓储服务
    @Autowired
    private WmsService wmsService;

    // 对这个订单完成支付
    public void pay(){
        //对本地的的订单数据库修改订单状态为"已支付"
        orderDAO.updateStatus(OrderStatus.PAYED);

        //调用库存服务扣减库存
        inventoryService.reduceStock();

        //调用积分服务增加积分
        creditService.addCredit();

        //调用仓储服务通知发货
        wmsService.saleDelivery();
    }
}

补偿事务:TCC

TCC是Try-Confirm-Cancel的简称:

Try 阶段:尝试执行,完成所有业务检查(一致性),预留必需业务资源(准隔离性)。

Confirm 阶段:确认真正执行业务,不作任何业务检查,只使用 Try 阶段预留的业务资源,Confirm 操作满足幂等性。要求具备幂等设计,Confirm 失败后需要进行重试。

Cancel 阶段:取消执行,释放 Try 阶段预留的业务资源,Cancel 操作满足幂等性。Cancel 阶段的异常和 Confirm 阶段异常处理方案基本上一致。

Try阶段

在这里插入图片描述

Confirm阶段

在这里插入图片描述

Cancle阶段

在这里插入图片描述

总结与思考

总结一下,你要玩 TCC 分布式事务的话:首先需要选择某种 TCC 分布式事务框架,各个服务里就会有这个 TCC 分布式事务框架在运行。

然后原本的一个接口,要改造为 3 个逻辑,Try-Confirm-Cancel:

  1. 先是服务调用链路依次执行 Try 逻辑。
  2. 如果都正常的话,TCC 分布式事务框架推进执行 Confirm 逻辑,完成整个事务。
  3. 如果某个服务的 Try 逻辑有问题,TCC 分布式事务框架感知到之后就会推进执行各个服务的 Cancel 逻辑,撤销之前执行的各种操作。

问题1:如果有一些意外的情况发生了,比如说订单服务突然挂了,然后再次重启,TCC 分布式事务框架是如何保证之前没执行完的分布式事务继续执行的呢?
所以,TCC 事务框架都是要记录一些分布式事务的活动日志的,可以在磁盘上的日志文件里记录,也可以在数据库里记录。保存下来分布式事务运行的各个阶段和状态。

问题2:万一某个服务的 Cancel 或者 Confirm 逻辑执行一直失败怎么办呢?
TCC 事务框架会通过活动日志记录各个服务的状态。举个例子,比如发现某个服务的 Cancel 或者 Confirm 一直没成功,会不停的重试调用它的 Cancel 或者 Confirm 逻辑,务必要它成功!


给大家推荐几个比较不错的框架,都是国内开源的:ByteTCC,TCC-transaction,Himly。

大家有兴趣的可以去它们的 GitHub 地址,学习一下如何使用,以及如何跟 Spring Cloud、Dubbo 等服务框架整合使用。

微服务设计模式 — 补偿事务模式(Compensating Transaction Pattern) 补偿事务模式是一种非常有效的方法,用于处理分布式系统中长时间运行事务的一致性问题。通过在主事务执行失败时执行补偿操作,系统能够恢复到一致性状态。尽管这一设计模式涉及较高的复杂性和代码冗余,但其在保证系统一致性和稳定性方面的优势是不可忽视的。在实际应用中,补偿事务模式广泛用于订单处理、银行转账等需要跨多个服务协调的业务场景。通过本文的示例,希望读者能够更好地理解和应用补偿事务模式。 阅读详情

相关推荐

分布式事务——分布式事务简介、分布式事务框架 Seata(AT模式、Tcc模式、Tcc Vs AT)、分布式事务—MQ

最早的分布式事务应用架构很简单,不涉及服务间的访问调用,仅仅是服务内操作涉及到对多个数据库资源的访问。当一个服务操作访问不同的数据库资源,又希望对它们的访问具有事务特性时,就需要采用分布式事务来协调所有的事务参与者。对于上面介绍的分布式事务应用架构,尽管一个服务操作会访问多个数据库资源,但是毕竟整个事务还是控制在单一服务的内部。如果一个服务操作需要调用另外一个服务,这时的事务就需要跨越多个服务了。四种模式,https1.4.01.2.0Seata是什么?一阶段,这些就不再赘述了。总之,...

m0_54853503的博客 5939

补偿事务基本概念

演变而来在业务层面去解决一致性问题的一种方案。其精髓在于定于业务执行逻辑的时候,同时实现一个抵消(补偿)正向逻辑的cancel操作,以便在异常情况下对原有操作进行回滚。理论——在分布式的服务架构中,一致性(Consistency)、可用性(Availability)、分区容忍性(Partition Tolerance)即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)

一只不知疲倦的学习猿 431

CVAT自动标注避坑指南:从nuctl安装到YOLOv5模型部署的完整流程

本文详细介绍了在CVAT中部署YOLOv5自动标注功能的完整流程与避坑指南。重点解决了从nuctl工具安装、项目创建时因网络问题导致的镜像拉取失败,到最终模型函数部署与CVAT集成的关键步骤。针对国内网络环境,提供了实用的镜像替换方案,帮助用户顺利完成基于CPU的自动化标注环境搭建。

pytorch8learner的博客 229

补偿性事务的详细解释

补偿性事务(Compensating Transaction)是一种解决分布式事务失败问题的设计模式。其基本思想是:当一个分布式事务的某部分操作失败时,通过执行补偿操作来撤销已成功的操作,从而使整个系统恢复到原来的状态或一致的状态。补偿性事务通常适用于柔性事务(Soft Transaction)场景,比如订单系统、支付系统或库存管理系统。补偿性事务是指在一个分布式系统中,当一个事务成功提交后,系统会自动进行一些补偿操作,来确保系统的一致性。首先,发起一个事务,执行一些原子操作。

Flying_Fish_roe的博客 1403

Visual Studio 2013 + Intel(R) Visual Fortran 安装教程

安装了好几遍,ivf都不能加载到vs中,中途放弃了vs,又改用codeblocks编译器,依然在写fortran的时候出现了各种问题,于是又放弃了codeblocks改回vs,总之是折腾了好久,终于装明白了ivf并且将fortran模板成功加载到vs中。 PS:一定要安装Intel Visual Fortran.Composer XE.2013-SP1,不要用Intel Visual Fortr...

Coco_wjy的博客 12万+

(一篇即成功)Ubuntu下搭建qt环境和安装Qt Creator

只需一篇就成功搭建Ubuntu下的QT环境 你还在等什么

m0_73450461的博客 1万+

事务补偿型TCC事务

事务补偿型(TCC事务): TCC型事务(Try/Confirm/Cancel)可以归为补偿型。 补偿型的例子,在一个长事务( long-running )中 ,一个由两台服务器一起参与的事务,服务器A发起事务,服务器B参与事务,B的事务需要人工参与,所以处理时间可能很长。如果按照ACID的原则,要保持事务的隔离性、一致性,服务器A中发起的事务中使用到的事务资源将会被锁定,不允许其他应用访

linuxheik的专栏 3868

【Agent】多智能体框架MetaGPT入门教程

创建一个 Action 类的子类 SimpleWriteCode,子类中定义好 prompt,并解析返回结果。在 MetaGPT 中,

酒酿小圆子呀~ 3136

基于TCC的分布式事务

分布式的架构中,分布式的事务是一个绕不过的挑战,微服务理念的流行让分布式的问题日益突出。在公司内部, 笔者所接触的管理系统中实际上也存在着分布式事务。这里假设有这三个系统(cim、xfunds、cert)存在客户的同步问题。//cim 系统签约用户(cim本地事务)//新增成功//新增失败,导致和cert系统数据不一致try {//祈祷cert这个接口调用成功。

程序猿进阶 1760

扣子(coze)实战|手把手教你搭建AI换装自动化工作流

摘要:本文介绍了使用Coze平台搭建AI换装工作流的详细教程。工作流包含模特图片上传、服装替换、任务提交和智能轮询等模块,通过change_model插件实现异步换装处理,并内置30秒循环查询机制。该工具支持自定义API密钥对接不同AI服务商,目前已上线共享空间并提供会员服务(59.8元/年)和VIP课程(499元/年),包含100+智能体和实战案例资源。完整体验地址见文中链接。

yueyehuguang的博客 1843

RP Fiber Power 版本

RP Fiber Power的版本历史 该软件一直受到多年来广泛的发展计划,这大大扩展了其功能,以及用户界面的质量。 V1 这是第1个版本。 它仅限于光纤激光器和放大器的连续波计算,并且只能通过脚本进行控制。 V2 版本2引入了交互式表单。 至少对于更简单的模拟,现在可以简单地通过填写表单来工作,而V1必须通过脚本来控制。 例如,屏幕截图显示了输入某些信号参数的表单: 当您基于这些表单执行计算时,程序将根据您的表单输入自动编写脚本文件,然后执行该脚本。如果您需要编写脚本以获得更大的灵活性,可以稍后查看该脚

Asdmath的博客 2431

分布式事务TCC

之前网上看到很多写分布式事务的文章,不过大多都是将分布式事务各种技术方案简单介绍一下。很多朋友看了还是不知道分布式事务到底怎么回事,在项目里到底如何使用。 所以这篇文章,就用大白话+手工绘图,并结合一个电商系统的案例实践,来给大家讲清楚到底什么是 TCC 分布式事务。 ###一、业务场景介绍 咱们先来看看业务场景,假设你现在有一个电商系统,里面有一个支付订单的场景。 那对一个订单支付之后,我们需要做下面的步骤: 更改订单的状态为“已支付” 扣减商品库存 给会员增加积分 创建销售出库单通知仓库发货 这是一

少年闰土的博客 3853

【系统分析师】2025年下半年真题:论文及解题思路

摘要 本文探讨软件测试技术的应用,重点关注静态测试与动态测试的比较。静态测试在不运行程序的情况下,通过审查、走查等方式分析需求、设计文档和代码,能早期发现高层次缺陷,降低修复成本。动态测试通过实际运行程序,使用单元测试、集成测试等方法验证功能性能,是发现运行时错误的唯一途径。二者在缺陷类型、介入阶段和修复成本上具有互补性,建议项目实践中结合使用以提升软件质量。

数据知道的博客 5786

分布式事务 Seata TCC 模式深度解析

2019 年 3 月,蚂蚁金服加入分布式事务 Seata 的社区共建中,并贡献其 TCC 模式。本期是 SOFAChannel 第四期,主题:分布式事务 Seata TCC 模式深度解析,本文根据觉生的直播整理。 大家晚上好,我是 Seata Committer 觉生,来自蚂蚁金服数据中间件团队。今天的内容主要分为以下四个部分: Seata TCC 模式的原理解析; 从 TCC 的业务模型与...

怀素的专栏 2万+

GeoScene Pro教程(002):GeoScenePro基础操作

GeoScenePro基础操作介绍。

WwLK123的博客 2460

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

分布式事务 TCC

TCC(Try-Confirm-Cancel)是一种分布式事务解决方案,也是一种补偿式的分布式事务。它通过在业务逻辑中嵌入Try-Confirm-Cancel三个阶段的逻辑,来保证分布式事务的一致性和可靠性。TCC协议的核心思想是“补偿机制”,即在分布式事务出现异常或失败时,通过执行相反的操作来补偿之前的操作,从而达到事务的一致性。

激流丶的博客 2892

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

TCC分布式事务简介

分布式事务协议的背景  近年来,因为微服务解决了我们以往开发中系统可扩展性差以及耦合度高的问题,所以微服务炒得越来越火。一时间各种框架和组件的出现,更是为微服务的开发提供了便利。    微服务是通过多个小服务之间进行组合,来组成更加强大的性能,并且服务间的数据都是独立部署的,避免了单点故障导致全局瘫痪。然而,我们为了解决分布式型事务,二阶段提交协议(2PC)和三阶段提交协议(3PC)也不...

pseudonym_的博客 2400

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

分布式事务解决方案之TCC

TCC是Try、Confirm、Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try、确认 Confirm、撤销Cancel。Try操作做业务检查及资源预留,Confirm做业务确认操作,Cancel实现一个与Try相反的 操作即回滚操作。

LU58542226的博客 5227

分布式事务与TCC

TCC Transaction:支持广义的分布式事务,每个模块需要改造成实现 Try/Confirm/Cancel 能力的 TCC 组件,通过事务协调器进行全局 Try——Confirm/Cancel 两阶段流程的串联,保证数据的最终一致性趋近于 100%Transaction Message:支持狭义的分布式事务,基于消息队列组件中半事务消息以及轮询检查机制,保证本地事务和消息生产两个动作的原子性,但不具备事务的逆向回滚能力。使用mq,本地事务包裹消息投递的方式处理事务。

lixiaonan0318的博客 1184

tcc分布式事务

简介 TCC 是Try、Confirm、Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try、确认Confirm、撤销Cancel。Try操作做业务检查及资源预留,Confirm做业务确认操作,Cancel实现一个与 Try或者 Commit相反的操作即回滚操作。TM首先发起所有的分支事务的 try操作,任何一个分支事务的 try操作执行失败,TM将会发起所有分支事务的 Cancel操作,若 Try操作全部成功,TM将会发起所有分支事务的 Confirm操作,其中 Confirm/C

kuokay的博客 4306

Hmily实现TCC分布式事务

TCC(Try-Confirm-Cancel)分布式事务是一种常见的解决方案,它通过三个阶段来保证数据的一致性。Hmily 是一个高性能、易使用、零侵入的分布式事务框架,它提供了强大的事务管理能力。在本博客中,我们将深入探讨 Hmily 实现 TCC 分布式事务的实战。我将分享我在项目中使用 Hmily 的经验,包括如何配置 Hmily、如何使用 TCC 事务以及如何处理异常情况。

liubopro666的博客 1280

TCC分布式事务

TCC是一个分布式的事务,主要用于多个微服务系统之间的事务。简单来说,它的产生是为了解决微服务中事务的隔离性。TCC一共分为三个阶段,分别是Try、Comfirm、Cancel。 此处假设我们正在开发一个电商系统,一共涉及到订单服务、支付服务、库存服务: 按照最简单的理解,在用户下单时,需要: 修改订单服务为“已下单” 扣除零钱 减少库存 对于分布式应用来说,订单服务、支付服务、库存服务分散在...

广工最菜的琛 1210

分布式事务你们如何解决的?为什么当时不考虑TCC呢?TCC有什么缺点?

参与者没执行Try(或结果未上报),却收到了Cancel指令。

weixin_44984196的博客 1470
上一篇: 【MySQL】对JSON数据进行查询
下一篇: 分布式事务之基础理论
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值