SpringCloudAlibaba 之初识 Seata(服务端搭建)

231 阅读3分钟

这是我参与「掘金日新计划 · 8 月更文挑战」的第18天,点击查看活动详情

事务简介

事务(Transaction)是访问并可能更新数据库中各种数据项的一个执行单元,在关系型数据库中,一个事务是由一组SQL语句组成,且事务应该具有4个属性:原子性、一致性、隔离性、持久性。通常称为ACID特性

  • A:(Atomicity):原子性,将所有SQL作为原子工作单元执行,要么全部执行,要么全部不执行;
  • C:(Consistent):一致性,事务完成后,所有数据的状态都是一致的,事务的中间状态不能被观察到。
  • I:(Isolation):隔离性,一个事务不能被其他的事务干扰,即一个事物内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事物之间不能互相干扰,隔离性又分为四个级别:读未提交(read uncommitted)、读已提交(read committed ,解决脏读)、可重复读(repeatable, 解决虚读)、串行化(serializable,解决幻读)。
  • D:(Duration):持久性,即事务完成后,对数据库数据的修改被持久化存储。接下来的其他皂搓或者故障不应该对其产生影响。

本地事务

@Transational 传统项目中都只是需要单一操作数据库,这种场景中本地事务(Local Transaction)。本地事务的ACID是数据库直接提供支持的。在分布式场景中本地事务是不能满足的。

image.png

什么是Seata

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式。(AT为推荐模式)且没有侵入性

Seata机构中的三大角色:
TC (Transaction Coordinator) - 事务协调者 维护全局和分支事务的状态,驱动全局事务提交或回滚。所有的参与者返回ask为yes是所有的参与者会收到提交事务,且参与者需要返回ask

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

RM (Resource Manager) - 资源管理器

管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

image.png

搭建TC Service 服务

去官网下载github.com/seata/seata… 解压出来 image.png 修改conf文件夹下 配置文件 file.conf 存储方式为DB

## transaction log store, only used in seata-server
store {
  ## store mode: file、db、redis
  mode = "db"
  ## database store property
  db {
    ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc.
    datasource = "druid"
    ## mysql/oracle/postgresql/h2/oceanbase etc.
    dbType = "mysql"
    driverClassName = "com.mysql.jdbc.Driver"
    url = "jdbc:mysql://192.168.1.7:3306/seata"
    user = "root"
    password = "root"
    minConn = 5
    maxConn = 30
    globalTable = "global_table"
    branchTable = "branch_table"
    lockTable = "lock_table"
    queryLimit = 100
    maxWait = 5000
  }
}

修改conf文件夹下 registry.conf 注册中心和配置中心为nacos

registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "nacos"
  nacos {
    application = "seata-server"
    serverAddr = "192.168.1.7:8848"
    group = "SEATA_GROUP"
    namespace = ""
    cluster = "default"
    username = ""
    password = ""
  }
}
  # file、nacos 、apollo、zk、consul、etcd3
  type = "nacos"
  nacos {
    serverAddr = "192.168.1.7:8848"
    namespace = ""
    group = "SEATA_GROUP"
    username = ""
    password = ""
  }
}

去Seata中资源信息中下载sql 脚本 github.com/seata/seata…

image.png 执行mysql脚本创建表结构

image.png 注意 :还需要将一个默认的配置同步到nacos中 去。
下载这个文件 github.com/seata/seata image.png 下载完成解压后对script\config-center\config.txt 进行修改

image.png 这是一个全量的配置我们需要修改 mode 为DB 并配置BD的信息 image.png 最后一步 如果你的nacos 也是在本机安装的就可以直接在 script\config-center\nacos\目录下双击运行 nacos-config.sh 文件进行同步配置到nacos了。

如果不是 在文件目录右键运行

$ sh nacos-config.sh -h 192.168.1.7 -p 8848 -g SEATA_GROUP
  • -h 指定nacos的地址
  • -p 指定端口
  • -g 指定 分组

image.png 等待执行完成,启动seata服务就可以在nacos看到了seata 服务了

image.png 配置中心

image.png

实践是检验真理的唯一准则,感兴趣的可以去试试呀!明天见咯 😃😃😃😃