首页 > 其他分享 >微服务之事务管理Seata

微服务之事务管理Seata

时间:2023-03-07 14:02:37浏览次数:47  
标签:事务管理 回滚 服务 Seata 数据库 事务 模式 编写

Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务, 也是Spring Cloud Alibaba提供的组件, Seata官方文档:

为什么需要Seata?

我们之前学习了单体项目中的事务, 使用的技术叫Spring声明式事务

能够保证一个业务中所有对数据库的操作要么都成功,要么都失败,来保证数据库的数据完整性

但是在微服务的项目中,业务逻辑层涉及远程调用,当前模块发生异常,无法操作远程服务器回滚

这时要想让远程调用也支持事务功能,就需要使用分布式事务组件Seata

Seata保证微服务远程调用业务的原子性

Seata将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案

Seata运行原理(AT模式)

 

 

 上面结构是比较典型的远程调用结构, 如果account操作数据库失败需要让order模块和storage模块撤销(回滚)操作,  声明式事务不能完成这个操作, 需要使用Seata来解决

 

 

 

Seata构成部分包含

  • 事务协调器TC

  • 事务管理器TM

  • 资源管理器RM

AT模式运行过程

  1. 事务的发起方(TM)会向事务协调器(TC)申请一个全局事务id,并保存
  2. Seata会管理事务中所有相关的参与方的数据源,将数据操作之前和之后的镜像都保存在undo_log表中,这个表是seata组件规定的表,没有它就不能实现效果,依靠它来实现提交(commit)或回滚(roll back)的操作
  3. 事务的发起方(TM)会连同全局id一起通过远程调用,运行资源管理器(RM)中的方法
  4. RM接收到全局id,去运行指定方法,并将运行结果的状态发送给TC
  5. 如果所有分支运行都正常,TC会通知所有分支进行提交,真正的影响数据库内容

Seata其他模式

AT模式的运行有一个非常明显的前提条件,这个条件不满足,就无法使用AT模式

这个条件就是事务分支都必须是操作关系型数据库(Mysql\MariaDB\Oracle)

因为关系型数据库才支持提交和回滚,其它非关系型数据库都是直接影响数据(例如Redis)

所以如果我们在业务过程中有一个节点操作的是Redis或其它非关系型数据库时,就无法使用AT模式

TCC模式

简单来说,TCC模式就是自己编写代码完成事务的提交和回滚

在TCC模式下,我们需要为参与事务的业务逻辑编写一组共3个方法

(prepare\commit\rollback)

prepare:准备

commit:提交

rollback:回滚

这样的话所有提交或回滚代码都由自己编写

优点:虽然代码是自己写的,但是事务整体提交或回滚的机制仍然可用(仍然由TC来调度)

缺点:每个业务都要编写3个方法来对应,代码冗余,而且业务入侵量大

SAGA模式

SAGA模式的思想是对应每个业务逻辑层编写一个新的类,可以设置指定的业务逻辑层方法发生异常时,运行当新编写的类中的代码

相当于将TCC模式中的rollback方法定义在了一个新的类中

这样编写代码不影响已经编写好的业务逻辑代码

一般用于修改已经编写完成的老代码

缺点是每个事务分支都要编写一个类来回滚业务,

会造成类的数量较多,开发量比较大

XA模式

支持XA协议的数据库分布式事务,使用比较少

 

标签:事务管理,回滚,服务,Seata,数据库,事务,模式,编写
From: https://www.cnblogs.com/yishuo/p/17187899.html

相关文章

  • SpringCloud微服务实战——搭建企业级开发框架(五十):集成移动端推送功能的系统通知公告
      系统的通知公告功能似乎是很容易被忽略的功能模块,在传统的软件系统中,一般OA类软件系统不可或缺,而在应用软件系统中此功能或有或无,在现在大多数的互联网软件系统中,此功......
  • 一张图看懂CodeArts Repo 6大特性,带你玩转代码托管服务
    华为云CodeArtsRepo是华为全栈自研的代码托管服务,基于Git提供分布式代码管理和协同开发能力,包括成员管理、权限控制、代码托管、代码检查、代码审核、代码追溯、持续集成等......
  • linux服务器qps查询,查看当前linux服务器的QPS
    https://blog.csdn.net/weixin_42119281/article/details/116595205 QPS:每秒查询率(QPS,Queries-per-second)是对一个特定的查询服务器在规定时间内所处理流量多少的......
  • 服务器和电脑主机的区别?
    服务器主要应用于企业和个人的工作中,和家用的主机不同,服务器的任务是保证任何时候用户都能够通过终端顺利访问服务器,并传输和共享服务器中的数据。 1.服务器最重要的并......
  • 不背锅运维:配置管理和服务发现之Confd和Consul
    Confd和Consul是什么鬼?Confd和Consul都是用于配置管理和服务发现的工具。https://www.consul.io/https://www.tail-f.com/confd-basic/ConfdConfd是一个轻量级的......
  • 常见的3种微服务治理方式
    1、应用程序中包含微服务治理逻辑在微服务架构中,服务间不再是在朴素的进程内通信,取而代之的是通过轻量级的网络协议进行通信。那么,如何找到服务提供方?如何超时重试?当存在多......
  • 如何在服务器端通过命令操作、拆分和合并 PDF 文件
    PDF最初由AdobeSystems于1993年开发,旨在创建一种可以在不同计算机系统、软件应用程序和设备之间轻松共享和打印的文件格式。当时,文档通常以专有文件格式创建,这些文件......
  • 73-企业级云服务阿里云-ECS建立网站案例
    云计算定义:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快......
  • 一次Java服务内存过高的分析过程
    现象年前,收到了短信报警,显示A服务的某台机器内存过高,超过80%如上图所示,内存会阶段性增加。奇怪的是,十多台机器中只有这一台有这个问题堆内内存分析最先怀疑是内存泄漏......
  • 微服务引擎 MSE 企业版全新升级
    作者:流士随着企业应用大规模云上迁徙与应用微服务化步伐加快,微服务治理的重要性对企业不言而喻,但微服务治理本身的规范化与标准化尚未形成,导致很多企业在微服务治理方面......