首页 > 其他分享 >分布式事务~从seata实例来学习分布式事务

分布式事务~从seata实例来学习分布式事务

时间:2024-11-13 08:50:33浏览次数:1  
标签:事务 服务 seata -- 全局 TC 分布式

部署

docker run --name=seata1.4.2 \
        --hostname=d67502e1d2ea \
        --mac-address=02:42:0a:ff:fe:02 \
        --env=SEATA_IP=192.168.60.136 \
        --env=SEATA_PORT=8091 \
        --volume=/root/seata/seata-server-1.4.2/conf/registry.conf:/seata-server/resources/registry.conf \
        --volume=/root/seata/seata-server-1.4.2/conf/file.conf:/seata-server/resources/file.conf \
        --volume=/root/dev/docker/seata/logs:/root/logs \
        --workdir=/seata-server \
        -p 8091:8091 \
        --restart=no \
        --runtime=runc \
        --detach=true \
        -t \
        seataio/seata-server:1.4.2

说明

  • 两个微服务
  • micro-order为订单服务
  • micro-product为商品服务
  • 下单成功后,会扣商品服务的库存
  • 库存成功后,会一起提交,失败后,会回滚

分布式事务术语

  • TC (Transaction Coordinator) - 事务协调者,维护全局和分支事务的状态,驱动全局事务提交或回滚。
  • TM (Transaction Manager) - 事务管理器,定义全局事务的范围:开始全局事务、提交或回滚全局事务。
  • RM (Resource Manager) - 资源管理器,管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

四种分布式事务模式

  • AT 模式是无侵入的分布式事务解决方案,适用于不希望对业务进行改造的场景,几乎0学习成本。
  • TCC 模式是高性能分布式事务解决方案,适用于核心系统等对性能有很高要求的场景。
  • Saga 模式是长事务解决方案,适用于业务流程长且需要保证事务最终一致性的业务系统,Saga 模式一阶段就会提交本地事务,无锁,长流程情况下可以保证性能,多用于渠道层、集成层业务系统。事务参与者可能是其它公司的服务或者是遗留系统的服务,无法进行改造和提供 TCC 要求的接口,也可以使用 Saga 模式。
  • XA模式是分布式强一致性的解决方案,但性能低而使用较少。
  • Seata默认是AT模式
    seata涉及到三个角色之间的交互,本文通过流程图将AT模式下的基本交互流程梳理一下,为我们以后的解析打下基础。
    假设有三个微服务,分别是服务A、B、C,其中服务A中调用了服务B和服务C,TM、TC、RM三者之间的交互流程如下图:

  1. 服务A启动时,GlobalTransactionScanner会对有@GlobalTransaction注解的方法进行AOP增强,并生成代理,增强的代码位于GlobalTransactionalInterceptor类中,当调用@GlobalTransaction注解的方法时,增强代码首先向TC注册全局事务,表示全局事务的开始,同时TC生成XID,并返回给TM;
  2. 服务A中调用服务B时,将XID传递给服务B;
  3. 服务B得到XID后,访问TC,注册分支事务,并从TC获得分支事务ID,TC根据XID将分支事务与全局事务关联;
  4. 接下来服务B开始执行SQL语句,在执行前将表中对应的数据保存一份,执行后在保存一份,将这两份记录作为回滚记录写入到数据库中,如果执行过程中没有异常,服务B最后将事务提交,并通知TC分支事务成功,服务B也会清除本地事务数据;
  5. 服务A访问完服务B后,访问服务C;
  6. 服务C与TC之间的交互与服务B完全一致;
  7. 服务B和服务C都成功后,服务A通过TM通知TC全局事务成功,如果失败了,服务A也会通知TC全局事务失败;
  8. TC记录了全局事务下的每个分支事务,TC收到全局事务的结果后,如果结果成功,则通知RM成功,RM收到通知后清理之前在数据库中保存的回滚记录,如果失败了,则RM要查询出之前在数据库保存的回滚记录,对之前的SQL操作进行回滚。

因为TM、RM、TC之间的交互都是通过网络完成的,很容易出现网络断开的情况,因此TC提供了四个定时线程池,定时检测系统中是否有超时事务、异步提交事务、回滚重试事务、重试提交事务,如果发现了有这四类事务,则从全局事务中获取所有的分支事务,分别调用各个分支事务完成对应的操作,依次来确保事务的一致性。

需要考虑的问题:

通过上面流程的分析可以发现,每次SQL操作(查询除外)时,都会增加额外了三次数据库操作;每次全局事务和分支事务开启时,都涉及到TM、RM与TC的交互;全局事务期间还要承担数据短时不一致的情况,这些都是我们在使用AT模式需要考虑的情况。

标签:事务,服务,seata,--,全局,TC,分布式
From: https://www.cnblogs.com/lori/p/18543017

相关文章

  • 痞子衡嵌入式:关于恩智浦SDK2.0里事务型中断处理函数(DriverIRQHandler)的重定向注意事
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是SDK2.0里事务型中断处理函数(DriverIRQHandler)的重定向注意事项。最近有一个i.MXRT客户在使用官方SDK外设驱动里的中断处理函数时遇到了代码重定向失效问题,客户用得是一个XIPFlash工程,想把程序中......
  • 【异常管理(全局异常处理器)】|【事务管理(使用AOP)】
    本篇主要介绍项目开发中两个比较基础但是非常重要的模块,异常管理和事务管理,如何去使用进行了介绍,着重对AOP的使用进行了介绍,实现一个基于AOP的简单案例:定位耗时较长的业务方法,统计部分业务方法的执行耗时。一、全局异常处理器需求:软件开发springboot项目过程中,不可避免的......
  • PostgreSQL的奥秘:深入探究事务与锁的秘密世界
    PostgreSQL事务1.概述在数据库系统中,事务(Transaction)是执行数据库操作的最小逻辑单位。它确保了一组操作的完整性和一致性。事务可以通过显式的BEGIN、COMMIT和ROLLBACK语句块来控制,也可以在自动提交模式(autocommit)下隐式执行单条语句。在自动提交模式下,每条SQL......
  • Spring学习笔记_33——事务隔离级别和事务传播
    事务隔离级别和事务传播机制事务隔离级别事务隔离级别是数据库管理系统在处理多个事务时,用来隔离并发事务以防止数据不一致性的机制。不同的隔离级别提供了不同的保护级别,以防止脏读、不可重复读和幻读等并发问题。以下是SQL标准中定义的四种隔离级别,以及一个额外的ISOLAT......
  • 21天教你学会PCIe专栏(5)--事务层(Transaction Layer)
    目录第5天:事务层(TransactionLayer)课程目标课程内容1.事务层概述2.事务类型3.请求和响应机制4.事务层的配置和管理5.实际应用示例课后练习结语第5天:事务层(TransactionLayer)课程目标理解PCIe事务层的基本概念和功能掌握事务类型及其工作原理了解请求和响应......
  • RabbitMQ 在 Linux CentOS 和 Docker 环境下的部署及分布式部署指南
    1.引言RabbitMQ是一种广泛使用的消息代理,实现了高级消息队列协议(AMQP)。它在分布式系统中扮演了至关重要的角色,确保消息的可靠传递、负载均衡和任务分发。本文将深入探讨如何在LinuxCentOS和Docker环境下部署RabbitMQ,并实现分布式部署,帮助你快速上手并优化生产环......
  • SpringBoot+ElasticJob实现分布式任务调度
    目录1相关简介2Zookeeper的Docker安装3Zookeeper的Windows版本安装4Zookeeper图形化客户端prettyZoo5示例代码6添加任务监听器7参考资料(感谢)1相关简介zookeeper:开源分布式应用程序协调服务下载地址:https://archive.apache.org/dist/zookeeper/2Zookeeper......
  • Spring学习笔记_30——事务接口PlatformTransactionManager
    PlatformTransactionManager是Spring框架中事务管理的核心接口,它负责管理事务的创建、提交和回滚等操作。源码/**Copyright2002-2020theoriginalauthororauthors.**LicensedundertheApacheLicense,Version2.0(the"License");*youmaynotusethis......
  • 为什么分布式光伏规模是6MW为界点?
    安科瑞Acrel-Tu1990最近,能源局颁布了一项规定,明确指出6兆瓦(MW)及以上的分布式光伏电站必须实现自发自用,自行消纳电力。多个省份的能源局进一步规定,规模超过6兆瓦的电站需按照集中式管理进行操作。此外,规模大于6兆瓦(含6兆瓦)的电站需要经过省级审批,而小于这一规模的则由市级部门......
  • MYSQL事务学习总结
    前言在数据库操作的复杂世界里,事务是保障数据一致性、完整性和可靠性的关键机制。无论是银行系统中的资金转账,还是电商平台的订单处理,事务都在默默地发挥着重要作用。MySQL作为广泛使用的数据库管理系统,其事务处理机制涉及到多个重要的概念和特性。从原子性确保操作的整体性......