Seata 基础
先看一个问题,引出Seata
- 单机单库(多表)处理事务示意图
- 分布式微服务架构下的数据库事务示意图
3. 梳理上图
- 用户购买商品的业务逻辑。整个业务逻辑由3个微服务提供支持∶
- 仓储服务∶对给定的商品扣除仓库/商品数量
- 订单服务;根据采购需求创建订单
- 帐户服务∶从用户帐户中扣除余额
-
问题分析
单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源 业务操作需要调用三个服务来完成。此时每个服务内部的数据一致性由本地事务来保证 但是全局的数据—致性问题没法保证 简单的说: 一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用,就会产生分布式事务问题=》seata
分布式事务问题&解决方案
- 分布式微服务架构下的全局数据一致性问题[即: 分布式事务问题]
- 解决方案: Seata
官网
Seata 是什么?
一句话: Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用 的分布式事务服务
Seata Server 安装
下载
安装和配置
-
将seata-server-0.9.0.zip 解压到指定目录,比如d:\program
-
修改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
}
- 在mysql5.7 创建seata 数据库
CREATE DATABASE seata
USE seata
-
在seata 数据库创建表, 使用seata 提供的sql 脚本即可, 在seata 的\conf\db_store.sql
-
修改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"
}
启动
-
启动Nacos Server 8848
-
双击Seata 的\bin\seata-server.bat , 启动Seata Server
- 启动seata-server.bat , 看到如下界面说明成功
- 登录Nacos Server , 查看Seata Server 是否注册成功
- 登录Nacos Server, 查看Seata Server 是否注册成功