这是我参与「掘金日新计划 · 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是数据库直接提供支持的。在分布式场景中本地事务是不能满足的。
什么是Seata
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式。(AT为推荐模式)且没有侵入性
Seata机构中的三大角色:
TC (Transaction Coordinator) - 事务协调者
维护全局和分支事务的状态,驱动全局事务提交或回滚。所有的参与者返回ask为yes是所有的参与者会收到提交事务,且参与者需要返回ask
TM (Transaction Manager) - 事务管理器
定义全局事务的范围:开始全局事务、提交或回滚全局事务。
RM (Resource Manager) - 资源管理器
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
搭建TC Service 服务
去官网下载github.com/seata/seata…
解压出来
修改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…
执行mysql脚本创建表结构
注意 :还需要将一个默认的配置同步到nacos中 去。
下载这个文件 github.com/seata/seata
下载完成解压后对script\config-center\config.txt 进行修改
这是一个全量的配置我们需要修改 mode 为DB 并配置BD的信息
最后一步 如果你的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 指定 分组
等待执行完成,启动seata服务就可以在nacos看到了seata 服务了
配置中心
实践是检验真理的唯一准则,感兴趣的可以去试试呀!明天见咯 😃😃😃😃