首页 > 其他分享 >分布式事务

分布式事务

时间:2023-07-19 09:24:00浏览次数:24  
标签:事务 Try 消息 Cancel 执行 TCC 分布式

1.解决方案

1.1 全局事务

全局事务基于DTP模型实现。DTP是由X/Open组织提出的一种分布式事务模型--X/Open
Distributed Transaction Processing Reference Model。它规定了要实现分布式事务,需要三种角色:

  • AP: Application应用系统(微服务)
  • TM: Transaction Manager事务管理器(全局事务管理)
  • RM: Resource Manager资源管理器(数据库)
    整个事务分成两个阶段:
  • 阶段一:表决阶段,所有参与者都将本事务执行预提交,并将能否成功的信息反馈发给协调者。
  • 阶段二:执行阶段,协调者根据所有参与者的反馈,通知所有参与者,步调一致地执行提交或者回滚。

1.2 可靠消息服务

基于可靠消息服务的方案是通过消息中间件保证上、下游应用数据操作的一致性。
假设有A和B两个系统,分别可以处理任务A和任务B。此时存在一个业务流程, 需要将任务A和任务B在同一个事务中处
理。就可以使用消息中间件来实现这种分布式事务。

1.事务消息发送及提交
(1)发送消息(half消息)
(2)服务端响应消息写入结果
(3)根据发送结果执行本地事务(如果写入失败,此时half消息对业务不可见,本地逻辑不执行)
(4)根据本地事务状态执行Commit或者Rollback(Commit操作生产消息索引,消息对消费者可见)
2.事务补偿
(1)对没有Commit/Rollback的事务消息(pending状态的消息),从服务端发起一次回查”
(2) Producer收到回查消息,检查回查消息对于的本地事务的状态
(3)根据本地事务状态,重新Commit或者Rollback
其中,补偿阶段用户解决消息Commit或者Rollback发生超时或者失效的情况
3.事务消息状态
事务消息共有三种状态,提交状态,回查状态,中间状态:

  • TransactionStatus.CommitTransaction: 提交事务,它允许消费者消费此消息
  • TransactionStatus.RollbackTransaction: 回滚事务,它代表消息将被删除,不允许被消费
  • TransactionStatus.Unknown:中间状态,它代表需要消息队列来确认状态

1.3 TCC事务

TCC即为Try Confifirm Cancel,它属于补偿型分布式事务。TCC实现分布式事务一共有三个步骤:

  • Try: 尝试待执行的业务
    这个过程并未执行业务,只是完成所有业务的一致性检查,并预留好执行所需的全部资源
  • Confifirm: 确认执行业务
    确认执行业务操作,不做任何业务检查,只使用Try阶段预留的业务资源。 通常情况下,采用TCC
    则认为Confifirm阶段是不会出错的。即:只要Try成功, Confifrm- -定成功。若Confifirm阶段真的
    出错了,引入重试机制或人工处理。
  • Cancel: 取消待执行的业务
    取消Try阶段预留的业务资源。通常情况下,采用TCC则认为Cancel阶段也是一定成功的。 若
    Cancel阶段真的出错了,引入重试机制或人工处理。

TCC事务的优缺点:

  • 优点:把数据库层的二阶段提交上提到了应用层来实现,规避了数据库层的2PC性能低下问题。
  • 缺点:TCC的Try、Confifirm和Cφncel操作功能需业务提供,开发成本高。

1.4 TTC异常处理

  • 空回滚
    Try方法未执行,Cancel执行了
    出现原因:
    1.Try超时
    2.分布式事务回滚,触发Cancel
    3.未收到Try,收到Cancel
    解决方案: Cancel方法需要识别出是否执行Try方法,如果执行了就正常执行Cancel,如果没有就直接结束
    增加事务日志表来实现这个功能

  • 幂等
    多次调用二阶段方法
    出现原因:
    ●网络异常
    ●分支事务所在服务器宕机
    解决方案:做幂等性处理

  • 悬挂

1.5 TTC流程


标签:事务,Try,消息,Cancel,执行,TCC,分布式
From: https://www.cnblogs.com/lwx11111/p/17564673.html

相关文章

  • 分布式事务的对比、优缺点、适用场景及使用注意事项
    分布式事务的对比、优缺点、适用场景及使用注意事项分布式事务是指涉及到多个独立节点之间的事务处理,这些节点可能位于不同的物理设备或不同的网络环境下。在分布式系统中,由于节点的独立性和异构性,分布式事务的处理变得更加复杂和困难。为了确保分布式系统中数据的一致性和可靠性,......
  • mysql 事务自动回滚
    MySQL事务自动回滚在MySQL数据库中,事务是一组原子性操作的集合,它们要么全部成功执行,要么全部失败回滚。事务可以保证在并发环境下数据的一致性和完整性。当一个事务执行出现错误或异常时,数据库会自动回滚到事务开始之前的状态,保证数据的完整性。事务的基本概念在MySQL中,事务由以......
  • mysql 事务和存储过程
    MySQL事务和存储过程1.事务的概念和流程事务是指一组数据库操作,它们作为一个逻辑单元一起执行,并且要么全部都执行成功,要么全部都回滚到事务开始前的状态。MySQL中的事务主要用于保证数据的完整性和一致性。以下是MySQL事务的基本流程:步骤描述1开启事务2执行SQL......
  • mysql 事务当中为什么出现幻读
    MySQL事务中为什么出现幻读1.介绍在MySQL数据库中,事务是一组原子性的操作,可以确保数据的一致性和完整性。然而,在一些特定情况下,即使使用了事务,仍然可能出现幻读的问题。幻读指的是在一个事务中,当对某个表进行查询时,其他事务在这个事务的锁尚未释放之前,插入了新的数据,导致前一个......
  • 分布式系统原理
    参考:《数据库系统内幕》《数据密集型应用系统》及DDIA逐章精读分布式系统的8个谬误下图来自戌米的论文笔记,本文就以下图所示脉络组织CAPCAP:一致性,可用性,分区容错性一致性(Consistency)指的是在分布式系统中进行数据更新操作后,系统能够保证所有节点的数据是一致的。换句话......
  • spring事务
    Spring事务是Spring框架提供的一种用于管理数据库事务的机制。通过Spring事务管理,可以实现对数据库操作的事务性控制,保证数据的一致性和完整性。Spring事务的特点和优势:声明式事务管理:Spring提供了声明式事务管理,可以通过配置简单的注解或XML配置来管理事务,避免了手动编写事务......
  • docker分布式存储之哈希槽3主3从redis集群配置+主从扩容缩容
    创建开启六台redis容器systemctlrestartdockerdockerpullredis:6.0.8根据需求下载redis的镜像版本配置3主3从开启六台redis容器分别用node-1~node-6来区分dockerrun-d--nameredis-node-1--nethost--privileged=true-v/tmp/redis/share/redis-node......
  • 分布式事务XA协议2PC、3PC、TCC流程解析
    XA协议两阶段提交1、X/OpenDTP事务模型是X/Open这个组织定义的一套分布式事务的标准,也就是定义了规范和API接口,由各个厂商进行具体的实现DTP是分布式事物处理(DistributedTransactionProcessing)的简称2、XA协议XA是由X/Open组织提出的分布式事务规范。XA规范主要定义了(全......
  • 分布式缓存
    单点redis的问题数据丢失问题:Redis是内存存储,服务重启可能会丢失数据。解决:数据持久化并发能力问题:单节点并发能力不足。解决:主从集群,读写分离。故障恢复:需要自动的故障恢复手段。解决:Redis哨兵,实现健康检测和自动恢复。存储能力问题:单节点Redis难以满足海量数据存储。解决:搭......
  • MySQL 索引、事务与存储引擎
    目录一、索引1.概念2.作用3.副作用4.创建索引的原则依据5.优化6.分类二、事务1.事务的概念2.事务的特点(1)原子性(2)一致性(3)隔离性(4)持久性3.扩展事务之间的相互影响分为几种4.Mysql及事物隔离级别5.事务控制语句6.使用set设置控制事务三、存储引擎一、索引1.概念是......