首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Spring Cloud Alibaba 系列之 Seata 介绍

Spring Cloud Alibaba 系列之 Seata 介绍

作者头像
Demo_Null
发布于 2020-12-07 10:37:58
发布于 2020-12-07 10:37:58
1.1K0
举报
文章被收录于专栏:Java 学习Java 学习

1.1 简介

1.1.1 概述

  Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。在 Seata 开源之前,Seata 对应的内部版本在阿里经济体内部一直扮演着分布式一致性中间件的角色,帮助经济体平稳的度过历年的双11,对各BU业务进行了有力的支撑。经过多年沉淀与积累,商业化产品先后在阿里云、金融云进行售卖。2019.1 为了打造更加完善的技术生态和普惠技术成果,Seata 正式宣布对外开源,未来 Seata 将以社区共建的形式帮助其技术更加可靠与完备。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。☞ 官网

1.1.2 分布式事务

  系统架构发展到如今的微服务,每个服务都对应相应的数据库,库存服务对应库存库,订单服务对应订单库,如果没有分布式事务,在非正常情况下,下订单时库存减了却没有订单增加岂不是尴尬了。这种时候必须要保证数据的一致性。单数据源的一致性依靠单机事务来保证,多数据源的一致性就要依靠分布式事务。

1.2 Seata 简析

1.2.1 Seata 术语

术语

描述

XID (Transaction ID)

全局唯一事务 ID

TC (Transaction Coordinator)

事务协调者,维护全局和分支事务的状态,驱动全局事务提交或回滚。

TM (Transaction Manager)

事务管理器,定义全局事务的范围:开始全局事务、提交或回滚全局事务。

RM (Resource Manager)

资源管理器,管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

1.2.2 处理过程

 ♞ TM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID;  ♞ XID 在微服务调用链路的上下文中传播;  ♞ RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖;  ♞ TM 向 TC 发起针对 XID 的全局提交或回滚决议;  ♞ TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求。

简单来说上述过程类似于  ♞ 班长[TM]向辅导员[TC]申请开班会,并定了开会的会议室[XID]  ♞ 将会议室的地点公布  ♞ 同学[RM]跟辅导员[TC]签到  ♞ 班长[TM]跟辅导员[TC]说我们要干这个事情  ♞ 辅导员[TC]通知到所有人要干这个事

1.3 安装

1.3.1 Windows

♞ 先去 ☞ GitHub 下载对应的安装包,解压后得到如下文件夹

♞ 修改 /conf/file.conf

♞ 创建 seata 数据库,创建相关表,0.9 之后的版本没有 sql,0.9 及之前的在 conf 中可以找到 db_store.sql

代码语言:javascript
复制
-- the table to store GlobalSession data
drop table if exists `global_table`;
create table `global_table` (
  `xid` varchar(128)  not null,
  `transaction_id` bigint,
  `status` tinyint not null,
  `application_id` varchar(32),
  `transaction_service_group` varchar(32),
  `transaction_name` varchar(128),
  `timeout` int,
  `begin_time` bigint,
  `application_data` varchar(2000),
  `gmt_create` datetime,
  `gmt_modified` datetime,
  primary key (`xid`),
  key `idx_gmt_modified_status` (`gmt_modified`, `status`),
  key `idx_transaction_id` (`transaction_id`)
);

-- the table to store BranchSession data
drop table if exists `branch_table`;
create table `branch_table` (
  `branch_id` bigint not null,
  `xid` varchar(128) not null,
  `transaction_id` bigint ,
  `resource_group_id` varchar(32),
  `resource_id` varchar(256) ,
  `lock_key` varchar(128) ,
  `branch_type` varchar(8) ,
  `status` tinyint,
  `client_id` varchar(64),
  `application_data` varchar(2000),
  `gmt_create` datetime,
  `gmt_modified` datetime,
  primary key (`branch_id`),
  key `idx_xid` (`xid`)
);

-- the table to store lock data
drop table if exists `lock_table`;
create table `lock_table` (
  `row_key` varchar(128) not null,
  `xid` varchar(96),
  `transaction_id` long ,
  `branch_id` long,
  `resource_id` varchar(256) ,
  `table_name` varchar(32) ,
  `pk` varchar(36) ,
  `gmt_create` datetime ,
  `gmt_modified` datetime,
  primary key(`row_key`)
);

♞ 修改 /conf/registry.conf

♞ 下载源码在 /script/config-center 中修改 config.txt

代码语言:javascript
复制
# 事务分组名称,自定义
service.vgroupMapping.my_test_tx_group=my_seata_tx_group
# Seata 启动的地址和端口号,本地就写 127.0.0.1 外网就写外网地址
service.default.grouplist=127.0.0.1:8091

store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true
store.db.user=root
store.db.password=root

♞ 加载配置,进入 /script/config-center/nacos 执行 sh nacos-config.sh -h nacos_ip -p 8848 执行完毕后可以在 Nacos 看到加载的配置。

♞ 执行 /bin/seata-server.bat 启动,p 参数可以指定端口,h 参数可以指定 ip

1.3.2 Linux

Linux 的安装与 Windows 的方式一致,只不过是安装包不同与启动脚本不同而已

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/12/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 1.1 简介
    • 1.1.1 概述
    • 1.1.2 分布式事务
  • 1.2 Seata 简析
    • 1.2.1 Seata 术语
    • 1.2.2 处理过程
  • 1.3 安装
    • 1.3.1 Windows
    • 1.3.2 Linux
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档