分布式事务解决方案-Seata

146 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情

1 分布式事务解决方案

2PC - 两阶段提交协议

也就是将整个事务分为两个阶段:准备阶段提交阶段,P是准备阶段,C是提交阶段

  • 准备阶段(Prepare phase):事务管理器接收到命令然后给每个参与者发送Prepare消息,每个数据库参与者在本地执行事务,写本地的Undo/Redo日志,此时事务并没有提交。写在本地,等待提交的命令或者回滚的命令。
    • Undo日志是记录修改前的数据,用于数据库回滚,
    • Redo日志是记录修改后的数据,用于提交事务后写入数据文件
  • 提交阶段(commit phase):
    • 如果事务管理器收到了参与者的执行失败或者超时消息时,直接给每个参与者发送回滚(Rollback)消息;
    • 若是都执行成功了,则发送提交(Commit)消息;参与者根据事务管理器的指令执行提交或者回滚操作,并释放事务处理过程中使用的资源。

2 Seata简介

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务
Seata 将为用户提供了 ATTCCSAGAXA 事务模式,为用户打造一站式的分布式解决方案。

  • TC (Transaction Coordinator) - 事务协调者 维护全局和分支事务的状态,驱动全局事务提交或回滚。
  • TM (Transaction Manager) - 事务管理器(发起者,同时也是RM的一种) 定义全局事务的范围:开始全局事务、提交或回滚全局事务。
  • RM (Resource Manager) - 资源管理器(每个参与事务的微服务) 管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

3 Seata-Server下载

下载地址:github.com/seata/seata…

下载完成的目录:

image.png

4 Seata-Server配置

4.1 打开conf目录

image.png

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即可启动

image.png

6 访问

http://localhost:7091/#/TransactionInfo

image.png