初识Seata(一)

Seata是一款开源的分布式事务解决方案,旨在解决微服务架构中分布式事务的挑战。它通过TC、TM和RM组件确保事务的ACID属性。在微服务场景下,当单一操作涉及多个数据库时,Seata能协调这些操作以实现全局事务。本文介绍了Seata的背景、问题由来、核心术语,以及最简单的直接部署方式,并提供了数据库脚本。Seata的客户端安装和使用后续会进一步探讨。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.背景

2.问题的由来

3.术语

4.安装

5.参考资料


1.背景

前一阵粗浅地研究了一下Seata,一直没有时间记录,拖了很久还是回想一下,简单记录一个吧。

2.问题的由来

通常,事务要满足的4个属性:原子性一致性隔离性持久性。在单体应用的时候,数据库和应用都在一处,事务的属性大多由数据库来保证。但自从微服务工程兴起,就出现一个业务可能操作多个数据库,多张表的情况。那么问题来了,此时的事务4属性该如何保证呢。于是,就出现了Seata。Seata是一款开源的分布式事务解决方案,为用户提供了AT/TCC/SAGA/XA模式。

3.术语

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

 4.安装

seata是server/client结构,其安装的方式有很多种:直接部署、Docker部署、Docker Compose部署、K8S部署、Helm部署等。这里以最为简单的直接部署为例。

首先,在如下地址下载seata-server。

https://github.com/seata/seata/releases

解压后,到bin目录下启动:seata-server.bat  文件即可(注意:启动前,需要先建好seata数据库)。Client端的安装和使用在后文中继续介绍。

CREATE DATABASE IF NOT EXIST `seata`;
USE `SEATA`;

CREATE TABLE IF NOT EXISTS `branch_table`(
  `branch_id` bigint(20) NOT NULL,
  `xid` varchar(128) NOT NULL,
  `transaction_id` bigint(20) DEFAULT NULL,
  `resource_group_id` varchar(32) DEFAULT NULL,
  `resource_id` varchar(256) DEFAULT NULL,
  `branch_type` varchar(8) DEFAULT NULL,
  `status` tinyint(4) DEFAULT NULL,
  `client_id` varchar(64) DEFAULT NULL,
  `application_data` varchar(2000) DEFAULT NULL,
  `gmt_create` datetime(6) DEFAULT NULL,
  `gmt_modified` datetime(6) DEFAULT NULL,
  PRIMARY KEY (`branch_id`),
  KEY `idx_xid` (`xid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `distributed_lock`(
  `lock_key` char(20) NOT NULL,
  `lock_value` varchar(20) NOT NULL,
  `expire` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`lock_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `global_table`(
  `xid` varchar(128) NOT NULL,
  `transaction_id` bigint(20) DEFAULT NULL,
  `status` tinyint(4) DEFAULT NULL,
  `application_id` varchar(32) DEFAULT NULL,
  `transaction_service_group` varchar(32) DEFAULT NULL,
  `transaction_name` varchar(128) DEFAULT NULL,
  `timeout` int(11) DEFAULT NULL, 
  `begin_time` bigint(20) DEFAULT NULL,
  `application_data` varchar(2000) DEFAULT NULL,
  `gmt_create` datetime DEFAULT NULL,
  `gmt_modified` datetime DEFAULT NULL,
  PRIMARY KEY (`xid`),
  KEY `idx_gmt_modified_status` (`gmt_modified`, `status`),
  KEY `idx_transanction_id` (`transaction_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `lock_table`(
  `row_key` varchar(128) NOT NULL,
  `xid` varchar(128) NOT NULL,
  `transaction_id` bigint(20) DEFAULT NULL,
  `branch_id` bigint(20) NOT NULL,
  `resource_id` varchar(256) DEFAULT NULL,
  `table_name` varchar(32) NOT NULL,
  `pk` varchar(36) DEFAULT NULL,
  `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '0:locked, 1:rollbacking',
  `gmt_create` datetime DEFAULT NULL,
  `gmt_modified` datetime DEFAULT NULL,
  PRIMARY KEY (`row_key`),
  KEY `idx_status` (`status`),
  KEY `idx_branch_id` (`branch_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

5.参考资料

Seata 是什么 -- 官网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值