Seata 基础和怎么安装

319 阅读2分钟

Seata 基础

先看一个问题,引出Seata

  1. 单机单库(多表)处理事务示意图

image.png

  1. 分布式微服务架构下的数据库事务示意图

image.png 3. 梳理上图

  • 用户购买商品的业务逻辑。整个业务逻辑由3个微服务提供支持∶
  • 仓储服务∶对给定的商品扣除仓库/商品数量
  • 订单服务;根据采购需求创建订单
  • 帐户服务∶从用户帐户中扣除余额
  1. 问题分析

    单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源 业务操作需要调用三个服务来完成。此时每个服务内部的数据一致性由本地事务来保证 但是全局的数据—致性问题没法保证 简单的说: 一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用,就会产生分布式事务问题=》seata

分布式事务问题&解决方案

  1. 分布式微服务架构下的全局数据一致性问题[即: 分布式事务问题]
  2. 解决方案: Seata

官网

  1. seata.io/zh-cn/

  2. 使用手册: seata.io/zh-cn/docs/…

Seata 是什么?

一句话: Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用 的分布式事务服务

Seata Server 安装

下载

github.com/seata/seata…

安装和配置

  1. 将seata-server-0.9.0.zip 解压到指定目录,比如d:\program

  2. 修改conf\file.conf 文件, 如图

service {
#vgroup->rgroup
#vgroup_mapping.my_test_tx_group = "default"
vgroup_mapping.my_test_tx_group = "wyx_order_tx_group"##---这个组自己写自己想定义的名字
#only support single node
default.grouplist = "127.0.0.1:8091"
#degrade current not support
enableDegrade = false
#disable
disable = false
#unit ms,s,m,h,d represents milliseconds, seconds, minutes, hours, days, default
permanent
max.commit.retry.timeout = "-1"
max.rollback.retry.timeout = "-1"
}
## transaction log store
store {
## store mode: file、db
##mode = "file"
mode = "db" ##--这里选择db数据库
## database store
db {
## the implement of javax.sql.DataSource, such as
DruidDataSource(druid)/BasicDataSource(dbcp) etc.
datasource = "dbcp"
## mysql/oracle/h2/oceanbase etc.
db-type = "mysql"
driver-class-name = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://127.0.0.1:3306/seata"
##user = "mysql"
user = "root"##-自己的用户名
##password = "mysql"
password = "自己的密码"
min-conn = 1
max-conn = 3
global.table = "global_table"
branch.table = "branch_table"
lock-table = "lock_table"
query-limit = 100
}
  1. 在mysql5.7 创建seata 数据库
CREATE DATABASE seata
USE seata
  1. 在seata 数据库创建表, 使用seata 提供的sql 脚本即可, 在seata 的\conf\db_store.sql

  2. 修改seata 的\conf\registry.conf , 配置注册中心nacos server

registry {
# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
# type = "file"
type = "nacos"#这里选择nacos
nacos {
#serverAddr = "localhost"
serverAddr = "localhost:8848"#这里填自己的端口主机
namespace = ""
cluster = "default"
}

启动

  1. 启动Nacos Server 8848

  2. 双击Seata 的\bin\seata-server.bat , 启动Seata Server

    1. 启动seata-server.bat , 看到如下界面说明成功

image.png

  1. 登录Nacos Server , 查看Seata Server 是否注册成功
    1. 登录Nacos Server, 查看Seata Server 是否注册成功

image.png