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

Seata — 分布式事务

时间:2024-11-09 16:15:26浏览次数:3  
标签:事务 服务 Seata Nacos TC 分布式

1. 分布式事务简介

分布式事务是指在分布式系统中,事务涉及到多个数据库和服务,需要跨多个系统节点协调完成事务的提交和回滚,保证系统的一致性。由于涉及多个节点,分布式事务比单一数据库中的事务实现更为复杂。

归其原因就是参与事务的多个子业务在不同的微服务,跨越了不同的数据库。虽然每个单独的业务都能在本地遵循ACID,但是它们互相之间没有感知,不知道有人失败了,无法保证最终结果的统一,也就无法遵循ACID的事务特性了。

这就是分布式事务问题,出现以下情况之一就可能产生分布式事务问题:

  • 业务跨多个服务实现

  • 业务跨多个数据源实现

2. Seata介绍

解决分布式事务的方案有很多,但实现起来都比较复杂,因此我们一般会使用开源的框架来解决分布式事务问题。在众多的开源分布式事务框架中,功能最完善、使用最多的就是阿里巴巴在2019年开源的Seata了。

官网:https://seata.apache.org/zh-cn/docs/overview/what-is-seata/

其实分布式事务产生的一个重要原因,就是参与事务的多个分支事务互相无感知,不知道彼此的执行状态。因此解决分布式事务的思想非常简单:

就是找一个统一的事务协调者,与多个分支事务通信,检测每个分支事务的执行状态,保证全局事务下的每一个分支事务同时成功或失败即可。大多数的分布式事务框架都是基于这个理论来实现的。

Seata也不例外,在Seata的事务管理中有三个重要的角色:

  • TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。

  • TM (Transaction Manager) - 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。

  • RM (Resource Manager) - 资源管理器:管理分支事务,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

其中,TMRM可以理解为Seata的客户端部分,引入到参与事务的微服务依赖中即可。将来TMRM就会协助微服务,实现本地分支事务与TC之间交互,实现事务的提交或回滚。

TC服务则是事务协调中心,是一个独立的微服务,需要单独部署。

3. 服务部署

Seata服务部署可以通过Docker或直接下载来实现:

  1. Docker部署:使用Seata官方的Docker镜像,配置registry.conffile.conf文件,将Nacos或其他注册中心的配置写入后启动容器。通过命令docker rundocker-compose可以快速部署并运行Seata服务。

  2. 直接下载:下载Seata Server压缩包并解压,修改配置文件registry.conf(注册中心地址)和file.conf(数据库存储配置),然后通过sh startup.sh命令启动Seata Server。

可以参考官网和其他资料。

4. 微服务集成Seata

参与分布式事务的每一个微服务都需要集成Seata。

4.1 引入依赖

<!--seata-->
  <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
  </dependency>

4.2 配置文件

seata: # Seata的配置块,Seata是一个分布式事务框架
  registry: # 配置Seata的TC(Transaction Coordinator)服务的注册中心信息
    type: nacos # 指定Seata的服务注册中心类型为Nacos(分布式服务注册发现中心)
    nacos: 
      server-addr: 192.168.1.101:8848 # Nacos服务地址,IP和端口号,用于注册和发现Seata服务
      namespace: "" # Nacos中的命名空间,空值表示使用默认命名空间
      group: DEFAULT_GROUP # Nacos的服务分组,通常用来隔离不同的服务集群,默认是DEFAULT_GROUP
      application: seata-server # 注册到Nacos的Seata服务名称,用于各微服务寻找TC服务
      username: nacos # 访问Nacos的用户名,确保Seata有权限连接到Nacos
      password: nacos # 访问Nacos的密码,与用户名配合验证访问权限
  tx-service-group: cyt # 设置事务组的名称,用于标识不同的业务场景
  service:
    vgroup-mapping: # 配置虚拟事务组到实际TC集群的映射关系
      hmall: "default" # 将事务组"hmall"映射到TC集群"default",即指定该事务组的事务协调器

4.3 开启分布式事务

使用 @GlobalTransactional 注解开启分布式事务:

将以前的的@Transactional注解改为Seata提供的@GlobalTransactional。

@GlobalTransactional注解就是在标记事务的起点,将来TM就会基于这个方法判断全局事务范围,初始化全局事务。

5. 总结

Seata服务部署后,在微服务中引入Seata依赖并完成配置后,通过@GlobalTransactional注解即可开启分布式事务。关键步骤如下:

  1. 引入Seata依赖:在每个需要分布式事务管理的微服务中,引入Seata的相关依赖(例如seata-spring-boot-starter),这样就可以在Spring Boot项目中使用Seata的注解。

  2. 配置Seata:配置application.ymlapplication.properties,指定Seata的事务组名称(即tx-service-group)以及注册中心(例如Nacos)的地址等信息,以便微服务可以与Seata Server通信。

  3. 使用@GlobalTransactional注解:在需要分布式事务管理的方法上,添加@GlobalTransactional注解,Seata会自动管理该方法调用链上的事务,确保整个调用链上的操作要么全部成功,要么全部回滚。

标签:事务,服务,Seata,Nacos,TC,分布式
From: https://blog.csdn.net/qq_46637011/article/details/143599424

相关文章

  • Springboot事务失效原因
    Springboot事务失效原因@Transactional注解只能作用于public方法上,如果不是的话编译报错@Transactional注解默认当发生RunTimeException才会回滚,如果发生其他异常不会,解决方法@Transactional(rollbackFor=Exception.class)自调用问题,假设一个service有一个事务方法a......
  • 04 深入 Oracle 并发世界:MVCC、锁、闩锁、事务隔离与并发性能优化的探索
    文章目录深入Oracle并发世界:MVCC、锁、闩锁、事务隔离与并发性能优化的探索一、多版本并发控制(MVCC)1.1理论解析1.2实践应用二、锁与闩锁机制2.1理论解析2.2实践应用三、事务隔离级别3.1理论解析3.2实践应用四、死锁预防与解决策略4.1理论解析4.2实践应用五......
  • 【seata的AT模式】
    seata的AT模式seata是阿里开源的一个分布式事务解决方案seata三大组件TC:事务协调器,这是一个独立服务,不包含业务代码,负责全局事务统一调度,比如维护全局事务状态、通知RM执行分支事务提交/回滚TM:事务管理器,对应微服务中的聚合服务,负责发起一个全局事务,......
  • 分布式事物传递 NetMQ测试
    usingNetMQ;usingNetMQ.Sockets;usingSystem;usingSystem.Threading;namespace消息传递库_NetMQ服务端{internalclassProgram{publicstaticvoidMain(){using(varpublisher=newPublisherSocket()){......
  • 达梦数据库DM管理工具增删改不生效怎么办?如何设置事务自动提交?
    前言我在使用达梦数据库DM时,一开始使用的是达梦数据库自带的连接工具DM管理工具。自带的有它自己的好处,起码对于修改新增字段等是比较兼容的。后面我发现DBeaver也是支持连接达梦数据库的,所以后面用DBeaver也在连接达梦数据库。我在一开始使用的DM管理工具的时候,遇到了一个奇怪......
  • etcd分布式键值存储系统
    etcdetcd是一个分布式键值存储系统,它在分布式系统领域具有重要地位,以下是关于它的详细介绍:一、基本概述etcd是用Go语言开发的,具有高可用性、强一致性、分布式等特点,主要用于存储和管理关键数据,并在分布式系统中起到协调和同步的作用。二、核心特性1.高可用性etcd......
  • 什么是分布式光伏发电?设备构成、应用形式讲解
    分布式光伏发电系统,又称分散式发电或分布式供能,是指在用户现场或靠近用电现场配置较小的光伏发电供电系统,以满足特定用户的需求,支持现存配电网的经济运行,或者同时满足这两个方面的要求。分布式光伏发电由哪些设备构成?1.光伏组件光伏组件,作为光伏发电电站的核心部件,其作用是......
  • 鸿蒙开发进阶(HarmonyOS )分布式文件系统
     鸿蒙NEXT开发实战往期必看文章:一分钟了解”纯血版!鸿蒙HarmonyOSNext应用开发!“非常详细的”鸿蒙HarmonyOSNext应用开发学习路线!(从零基础入门到精通)HarmonyOSNEXT应用开发案例实践总结合(持续更新......)HarmonyOSNEXT应用开发性能优化实践总结(持续更新......)分布式......
  • 揭秘MySQL事务的四大特性与隔离级别:从理论到实战,让你的数据操作无懈可击!
    MySQL事务的四大特性与隔离级别是数据库管理中非常重要的概念,它们确保了数据在并发操作下的一致性、完整性和可靠性。下面将详细介绍这四大特性及其隔离级别,并附上代码示例和详细解释。一、MySQL事务的四大特性原子性(Atomicity):定义:事务的所有操作要么全部完成,要么全部不完......
  • Apache DolphinScheduler + OceanBase,搭建分布式大数据调度平台的实践
    本文整理自白鲸开源联合创始人,ApacheDolphinSchedulerPMCChair,ApacheFoundationMember代立冬的演讲。主要介绍了DolphinScheduler及其架构、DolphinScheduler与OceanBase的联合大数据方案。DolphinScheduler是什么?ApacheDolphinScheduler,作为一款云原生且配备强大的可视......