【Seata】初识Seata

简介: Seata是 2019 年 1 月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案。致力于提供高性能和简单易用的分布式事务服务,为用户打造一站式的分布式解决方案。

Seata是 2019 年 1 月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案。致力于提供高性能和简单易用的分布式事务服务,为用户打造一站式的分布式解决方案。

官网地址:Seata | Seata,其中的文档、播客中提供了大量的使用说明、源码分析。

1.Seata的架构

Seata事务管理中有三个重要的角色:

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

整体的架构如图:

1430413c9a584e3f9420eb2269046cda.png

Seata基于上述架构提供了四种不同的分布式事务解决方案:

  • XA模式:强一致性分阶段事务模式,牺牲了一定的可用性,无业务侵入
  • TCC模式:最终一致的分阶段事务模式,有业务侵入
  • AT模式:最终一致的分阶段事务模式,无业务侵入,也是Seata的默认模式
  • SAGA模式:长事务模式,有业务侵入

无论哪种方案,都离不开TC,也就是事务的协调者。

2.部署TC服务

参考课前资料提供的文档《 seata的部署和集成.md 》:

3.微服务集成Seata

我们以order-service为例来演示。

       3.1引入依赖

首先,在order-service中引入依赖:

<!--seata-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
    <exclusions>
        <!--版本较低,1.3.0,因此排除--> 
        <exclusion>
            <artifactId>seata-spring-boot-starter</artifactId>
            <groupId>io.seata</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-spring-boot-starter</artifactId>
    <!--seata starter 采用1.4.2版本-->
    <version>${seata.version}</version>
</dependency>

       3.2配置TC服务

在order-service中的application.yml中,配置TC服务信息,通过注册中心nacos,结合服务名称获

取TC地址:

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

微服务如何根据这些配置寻找TC的地址呢?

我们知道注册到Nacos中的微服务,确定一个具体实例需要四个信息:

  • namespace:命名空间
  • group:分组
  • application:服务名
  • cluster:集群名

以上四个信息,在刚才的yaml文件中都能找到:

bb6f7c88ac784d1da2ce94fe068c7e17.png

namespace为空,就是默认的public

结合起来,TC服务的信息就是:public@DEFAULT_GROUP@seata-tc-server@SH,这样就能确定TC服务集群了。然后就可以去Nacos拉取对应的实例信息了。

       3.3其他服务

其它两个微服务也都参考order-service的步骤来做,完全一样。

4.动手实践

下面我们就一起学习下Seata中的四种不同的事务模式。

相关文章
|
7月前
|
Dubbo Java 测试技术
Seata实现分布式事务(2)
Seata实现分布式事务(2)
90 0
|
2天前
|
SQL 容灾 数据库
分布式事务Seata
在分布式架构系统中,服务不止一个,一个完整的业务链路肯定也不止调用一个服务,此时每个服务都有自己的数据库增删改查,而每一个写操作对应一个本地事务。如果想要确保全部的业务状态一致,也就意味着需要所有的本地事务状态一致,这在我们之前的学习中肯定是不具备的,如何做到跨服务、跨数据源的事务一致性将是本章节的重点学习内容。
14 2
|
13天前
|
NoSQL Nacos Redis
Seata 配置
Seata
41 2
|
5月前
|
数据库 Nacos
seata实现分布式事务
seata实现分布式事务
47 0
|
5月前
|
程序员 数据库 微服务
分布式事务(Seata)TmTransactionException 问题
分布式事务(Seata)TmTransactionException 问题
78 1
|
7月前
|
SQL 关系型数据库 数据库
分布式事务--Seata
分布式事务--Seata
61 0
|
7月前
|
消息中间件 监控 搜索推荐
Seata实现分布式事务(1)
Seata实现分布式事务(1)
45 0
|
9月前
|
Nacos 微服务
初识Seata
Seata是 2019 年 1 月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案。致力于提供高性能和简单易用的分布式事务服务,为用户打造一站式的分布式解决方案
212 0
|
8月前
|
SQL 安全 前端开发
分布式事务seata
分布式事务seata
88 0
|
11月前
|
SQL Java 关系型数据库
SEATA1.6.1的配置与使用
SEATA1.6.1的配置与使用
2002 0