微服务:分布式事务

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

 

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模式

 

posted on 2024-04-30 17:15  天启A  阅读(2)  评论(0编辑  收藏  举报

导航