首页 > 其他分享 >微服务:分布式事务

微服务:分布式事务

时间:2024-04-30 17:24:12浏览次数:22  
标签:事务 服务 seata XA nacos cloud 分布式

在分布式系统中,一个服务调用多个远程服务时,多个事务必须同时成功或失败。每一个服务的事务称为分支事务,整个业务称为全局事务

 

seata架构中有三个角色:

TC事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚

TM事务管理者:定义全局事务的范围、开始,提交,回滚全局事务

RM资源管理器:管理分支事务,与TC交谈以注册分支事务、报告分支事务状态

其中RM散布在微服务的模块中,他们的集合是TM。RM会对TC进行注册与报告

 

如何部署TC服务

1.通过SQL,基于数据库持久化存储

2.通过配置文件,使用docker进行部署

docker run --name seata \
-p 8099:8099 \
-p 7099:7099 \
-e SEATA_IP=192.168.88.95 \
-v /data/hmall/seata:/seata-server/resources \
--privileged=true \
--network hm-net \
-d \
seataio/seata-server:1.5.2

3.在项目中引入maven依赖

<!--统一配置管理-->
  <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  </dependency>
  <!--读取bootstrap文件-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-bootstrap</artifactId>
  </dependency>
  <!--seata-->
  <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
  </dependency>

4.在nacos上添加共享配置

seata:
  registry: # TC服务注册中心的配置,微服务根据这些信息去注册中心获取tc服务地址
    type: nacos # 注册中心类型 nacos
    nacos:
      server-addr: 192.168.88.95:8848 # nacos地址
      namespace: "" # namespace,默认为空
      group: DEFAULT_GROUP # 分组,默认是DEFAULT_GROUP
      application: seata-server # seata服务名称
      username: nacos
      password: nacos
  tx-service-group: hmall # 事务组名称
  service:
    vgroup-mapping: # 事务组与tc集群的映射关系
      hmall: "default"

5.在bootstrap.yml添加dataId

6.在docker查看是否加载成功

docker logs seata

查看其中信息有微服务字样相关信息即为成功

 

XA模式:优点:满足了ACID特性;实现简单,不会代码侵入;缺点:消耗资源量较大,影响性能;依赖关系型数据库实现事务

 如何实现XA模式:

1.配置文件中修改seata,添加XA模式

seata:
  data-source-proxy-mode: XA

2.标记入口方法

 @GlobalTransactional    
    private void checkCartsFull(Long userId) {}

 

AT模式:优点:解决了XA模式的问题,缺点:会出现短暂的不一致问题(已经提交了,在未结束先不能执行undo)

如何实现AT模式:

1.每个数据库都载入seata-at.sql

2.如果之前设置是XT模式记得删除,因为默认配置是AT模式

 

标签:事务,服务,seata,XA,nacos,cloud,分布式
From: https://www.cnblogs.com/kun1790051360/p/18168403

相关文章

  • simpread-课程 24:工作单元之数据库事务【AOP】
    一、工作单元事务代码分析在上一个课程,我们已经实现了数据库事务功能,来保证数据的完整性。通过上一个课程的实现方式,我们在每一个Action开头和结尾,都需要添加对应的代码,才能实现事务功能,具体见以下截图:这种实现方式存在以下2个问题:在具体业务开发中,一个请求往往都会涉......
  • 微服务学习总结4.30
    什么是微服务:分布式结构的一种,可涵盖多种语言不同版本的不同模块,提高了系统的可维护性,可伸缩性,可测试性为什么要用微服务:能够把不同模块分离开,提高效率减少压力。而且,微服务的使用可以方便多模块集成,可以实现一些跨版本模块的共同使用。比如如果我使用一个jdk8......
  • 微服务:gateway
    网关路由:1.创建新模块2.引入网关依赖<!--网关--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>......
  • CentOS 7.6 Samba服务搭建教程
    CentosOS7.6samba服务器搭建系统环境os:"CentOS7.6x64"lang:"en"搭建教程手动安装环境安装启动Samba服务并设置开机自启关闭防火墙方法1方法2关闭selinux方法1方法2方法3修改Samba配置添加Samba用户创建共享目录并设置权限重启Samba服务批量添......
  • 分布式事务的应用场景
    分布式事务在多个场景中都有应用,主要包括:支付系统。在支付过程中,需要从买家的账户扣款并向卖家的账户转账。由于买家和卖家的账户可能位于不同的数据库中,这时候就需要使用分布式事务来确保这两个操作要么同时成功,要么同时失败。电子商务平台。在电商平台中,下单购......
  • 云原生周刊:K8s 中的服务和网络 | 2024.4.29
    开源项目推荐k8s-image-swapperk8s-image-swapper是Kubernetes的一个变更Webhook,它将镜像下载到自己的镜像仓库,并将镜像指向该新位置。它是dockerpull-throughproxy的一个替代方案。KubeIPv2KubeIPv2是DoiTKubeIPv1-main开源项目的全面改进版本,最初由AvivLau......
  • 多人同时导出 Excel 干崩服务器!新来的阿里大佬给出的解决方案太优雅了!
    来源:juejin.cn/post/7259249904777838629前言业务诉求:考虑到数据库数据日渐增多,导出会有全量数据的导出,多人同时导出可以会对服务性能造成影响,导出涉及到mysql查询的io操作,还涉及文件输入、输出流的io操作,所以对服务器的性能会影响的比较大;结合以上原因,对导出操作进行排队;刚开......
  • 给Qt搭建一个简单的Json服务器用于软件调试
    一.vscode+nodejs+npm安装二.nodejs服务器开启打开vscode-终端-新建终端进入json_server目录cdD:\json_server运行启动命令,启动json-server服务器npmrunjson:server效果如下:PSD:\json_server>npmrunjson:server>[email protected]:se......
  • 微服务:保护
    什么是雪崩:微服务见相互调用,服务提供者出现故障或阻塞,导致资源耗尽。服务被提供者也会产生相应的故障或阻塞,最终影响绝大部分服务:调用链中所有服务级联调失败,整个集群故障解决方案:1.请求限流:限制访问微服务的请求的并发量,避免因服务激增而导致故障2.线程隔离:通过......
  • windows使用samba共享linux文件服务
    一、服务结构服务端:linux服务器192.168.2.251客户端:windows服务器192.168.2.252二、linux部署samba服务端1.安装samba~]#yum-yinstallsamba2.创建共享文件夹~]#mkdir/mnt/svr33.创建samba用户~]#smbpasswdwyg或者~]#pdbedit-a-utest密码:wyg.1234.编......