首页 > 其他分享 >SpringCloud之Seata(一)

SpringCloud之Seata(一)

时间:2023-05-03 16:56:08浏览次数:43  
标签:回滚 Seata SpringCloud 事务 阶段 提交 TCC 分布式

思维导图

1.概述
1.1 概念
Seata 是一款开源的分布式事务解决方案,提供高性能和简单易用的分布式事务服务。
2. 事务概述
2.1 角色

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

2.2 工作图

3.Seata事务模式
3.1 AT 模式
3.1.1 概念
无侵入式的分布式事务解决方案,用户只需关注自己作为一阶段的业务SQL,Seata框架会自动生成事务进行二阶段提交和回滚操作。
3.1.2 两个阶段
一阶段,业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
二阶段,提交异步化,非常快速地完成。回滚通过一阶段的回滚日志进行反向补偿。
3.1.3 以订单服务为例

3.2 TCC 模式
3.2.1 概念
TCC 是分布式事务中的三阶段提交协议,它的全称为 Try-Confirm-Cancel,即资源预留(Try)、确认操作(Confirm)、取消操作(Cancel),具体含义如下:
Try尝试阶段:对业务资源的检查并预留;
Confirm确认阶段:对业务处理进行提交。即commit操作,只要 Try 成功,那么该步骤一定成功;
Cancel取消阶段:对业务处理进行取消。即回滚操作,该步骤回对Try预留的资源进行释放。、
3.2.2 优缺点
1. 优点
TCC 不需要依赖数据库,能够实现跨数据库、跨应用资源管理。对这些不同数据访问通过侵入式的编码方式实现一个原子操作。更好地解决了在各种复杂业务场景下的分布式事务问题。
2. 缺点
TCC 是一种侵入式的分布式事务解决方案,以上三个操作都需要业务系统自行实现。 对业务系统有着非常大的入侵性,设计相对复杂。
3.2.3 TCC和AT区别
1. AT 模式基于支持本地 ACID 事务的关系型数据库
一阶段 prepare 行为,在本地事务中,一并提交业务数据更新和相应回滚日志记录。
二阶段 commit 行为,马上成功结束,自动异步批量清理回滚日志。
二阶段 rollback 行为,通过回滚日志,自动生成补偿操作,完成数据回滚。
2. TCC 模式不依赖于底层数据资源的事务支持
一阶段 prepare 行为:调用自定义 的 prepare 逻辑。
二阶段 commit 行为:调用自定义 的 commit 逻辑。
二阶段 rollback 行为:调用自定义 的 rollback 逻辑。
3.3 Saga 模式
3.3.1 概念
Saga模式是SEATA提供的长事务解决方案,在Saga模式业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务都由业务开发实现。
3.3.2 工作图

3.3.3 适用场景

  • 比如,老系统,封闭的系统(无法修改,同时没有任何分布式事务引入)。
  • 或者事务参与者可能是其他公司的服务或者是遗留系统,无法改造。
  • 那么AT、XA、TCC模型将全部不能使用,这时就可以使用Saga模式。

 

 

 

 

 

 

 

 

 

参考博客:https://blog.csdn.net/qq_45738250/article/details/129210294

 

标签:回滚,Seata,SpringCloud,事务,阶段,提交,TCC,分布式
From: https://www.cnblogs.com/jelly12345/p/17369279.html

相关文章

  • SpringCloud学习笔记
    Eureka基本知识Eureka主要学习的是微服务的一些基本概念之类的,至于具体的操作其实都是在配置appolication.yml文件了,多看文档以及自己写过的demo就懂了。Eureka在微服务中承担的角色有三个,一个是注册中心server,一个是服务供给方porvider,以及接受用户请求的consumer,如果从启动类......
  • SpringCloud Stream集成RabbitMQ
    1.概述SpringCloudStream框架抽象出了三个最基础的概念来对各种消息中间件提供统一调用:DestinationBinders:负责集成外部消息系统的组件。DestinationBinding:由Binders创建的,负责沟通外部消息系统、消息发送者和消息消费者的桥梁。Message:消息发送者与消息消费......
  • springcloud gateway filter 重写response
     importorg.reactivestreams.Publisher;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.cloud.gateway.filter.GatewayFilterChain;importorg.springframework.cloud.gateway.filter.GlobalFilter;importorg.springfram......
  • SpringCloud微服务架构分析说明!
    SpringCloud是一个基于SpringBoot的微服务框架,它提供了一系列的工具和组件,用于构建分布式系统中各个微服务之间的通信和互联,实现服务发现、负载均衡、分布式配置等功能。下面我们来具体解析一下SpringCloud微服务架构。服务注册与发现在微服务架构中,服务的数量非常多,因此需要一个机......
  • 小团队真的适合引入SpringCloud微服务吗?
    单体应用时代接口定义持续集成(CI)微服务时代服务拆分原则框架选择架构改造自动化部署链路跟踪运维监控容器化时代架构改造SpringCloud与k8s的融合CI的改造小结微服务是否适合小团队是个见仁见智的问题。回归现象看本质,随着业务......
  • springcloud OpenFeign的使用
    在这里只记录OpenFeign关键的使用步骤,A、B两个项目是基于springboot、springcloud实现的,并且在nacos中有服务注册。第一步:导入依赖<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</a......
  • SpringCloud 微服务 负载均衡问题 坑死老子了!(铁大软工刘雪丰)
    fetch-registry:true是默认的,刚开始学,你会发现虽然能运行,但是会抛异常,所以我就改成false了。改为false确实不抛异常。但是!!!,如果用负载均衡改进代码,就必须设为true,因为它会报错:Noinstancesavailablefor...,连运行都运行不了。我在网上找了很久,防火墙,依赖重复,依赖版本等方法我都试......
  • springcloud gateway
     springcloud gateway网关功能清单  1 为什么需要网关传统的单体架构中只有一个服务开放给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,那么作为客户端如何去调用这些微服务呢?如果没有网关的存在,只能在本地记录每个微服务的调用地址。 无网关的微服务......
  • SEATA-1.6.1
    一、简介本文主要介绍分布式事务框架seata(seata版本1.6.1)的window版本安装以及springboot与seata的整合的事务回滚案例;seata的官方文档路径:http://seata.io/zh-cn/本文介绍的方式是AT模式,采用的中间件是nacos,存储类型为db模式;本文默认你已会nacos的安装,如果不会请移步nacos......
  • SpringCloud中使用Apollo实现动态刷新
    SpringSpringBootSpringCloud中使用Apollo实现动态刷新普通字段在需要刷新的字段上使用@value注解即可,例如:@Value("${test.user.name}")privateStringname;@Value("${test.user.age}")privateIntegerage;@Value("${test.user.sex}")......