持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情
1 分布式事务解决方案
2PC - 两阶段提交协议
也就是将整个事务分为两个阶段:准备阶段和提交阶段,P是准备阶段,C是提交阶段
- 准备阶段(Prepare phase):事务管理器接收到命令然后给每个参与者发送Prepare消息,每个数据库参与者在本地执行事务,写本地的Undo/Redo日志,此时事务并没有提交。写在本地,等待提交的命令或者回滚的命令。
- Undo日志是记录修改前的数据,用于数据库回滚,
- Redo日志是记录修改后的数据,用于提交事务后写入数据文件
- 提交阶段(commit phase):
- 如果事务管理器收到了参与者的执行失败或者超时消息时,直接给每个参与者发送回滚(Rollback)消息;
- 若是都执行成功了,则发送提交(Commit)消息;参与者根据事务管理器的指令执行提交或者回滚操作,并释放事务处理过程中使用的资源。
2 Seata简介
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。
Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
- TC (Transaction Coordinator) - 事务协调者 维护全局和分支事务的状态,驱动全局事务提交或回滚。
- TM (Transaction Manager) - 事务管理器(发起者,同时也是RM的一种) 定义全局事务的范围:开始全局事务、提交或回滚全局事务。
- RM (Resource Manager) - 资源管理器(每个参与事务的微服务) 管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
3 Seata-Server下载
下载完成的目录:
4 Seata-Server配置
4.1 打开conf目录
4.2 打开application.yml
配置nacos信息
seata:
config:
# support: nacos, consul, apollo, zk, etcd3
type: file
registry:
nacos:
application: seata-server
server-addr: 192.168.1.101:1111
group:
namespace:
cluster: default
username:
password:
# support: nacos, eureka, redis, zk, consul, etcd3, sofa
type: file
配置db信息
store:
db:
datasource: druid
db-type: mysql
driver-class-name: com.mysql.jdbc.Driver
url=jdbc: mysql://139.155.18.162:3306/seata?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=UTC
user: root
password: root
min-conn: 5
max-conn: 100
global-table: global_table
branch-table: branch_table
lock-table: lock_table
distributed-lock-table: distributed_lock
query-limit: 100
max-wait: 5000
5 启动
双击bin目录下的seata-server.bat即可启动
6 访问
http://localhost:7091/#/TransactionInfo