探索 Seata 分布式事务

ops/2024/11/14 19:39:41/

Seata(Simple Extensible Autonomous Transaction Architecture)是阿里巴巴开源的一款分布式事务解决方案,旨在帮助开发者解决微服务架构下的分布式事务问题。它提供了高效且易于使用的分布式事务管理能力,支持多种事务模式,确保数据的一致性和完整性。

以下是 Seata 的一些关键特性和功能:

  1. 全局事务管理:Seata 提供了一个全局事务协调器(Transaction Coordinator, TC),负责管理全局事务的生命周期,包括开始、提交、回滚等操作。

  2. AT 模式(Automatic Transaction):这是 Seata 最常用的事务模式,通过代理数据库操作,实现自动的分支事务管理。AT 模式下,Seata 会在业务操作前后自动生成快照,并在事务提交或回滚时进行相应的处理。

  3. TCC 模式(Try-Confirm-Cancel):这种模式需要开发者手动实现 Try、Confirm 和 Cancel 三个阶段的逻辑。Try 阶段预留资源,Confirm 阶段确认操作,Cancel 阶段则回滚操作。这种模式适用于需要精细控制事务逻辑的场景。

  4. SAGA 模式:基于补偿机制的长事务解决方案,适用于跨多个服务的复杂业务流程。每个步骤都有对应的补偿操作,当某一步失败时,可以通过执行补偿操作来回滚整个事务。

  5. XA 模式:基于两阶段提交协议的分布式事务解决方案,适用于支持 XA 协议的数据库。第一阶段准备事务,第二阶段提交或回滚事务。

  6. 高性能:Seata 通过优化网络通信和存储机制,提供了高性能的事务处理能力,能够满足大规模分布式系统的需求。

  7. 易于集成:Seata 支持与 Spring Cloud、Dubbo、gRPC 等主流微服务框架的无缝集成,开发者只需进行简单配置即可使用分布式事务功能。

  8. 可扩展性:Seata 提供了丰富的 SPI 接口,允许开发者根据具体需求进行扩展和定制,例如自定义事务日志存储、事务协调策略等。

  9. 社区活跃:作为一个开源项目,Seata 拥有活跃的社区和丰富的文档资源,开发者可以方便地获取支持和帮助。

通过 Seata,开发者可以轻松地在分布式系统中实现一致性事务管理,确保数据的一致性和完整性,从而提高系统的可靠性和稳定性。

参考 官方文档

下载 Seata

官方下载地址

 我使用的是 1.4.1 版本:

进入conf目录,调整下面的配置文件

registry.conf

设置使用 Nacos 注册中心:

registry {# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa# type = "file"type = "nacos"loadBalance = "RandomLoadBalance"loadBalanceVirtualNodes = 10nacos {application = "seata-server"serverAddr = "127.0.0.1:8848"group = "SEATA_GROUP"namespace = "public"cluster = "default"username = "nacos"password = "nacos"}
}config {# file、nacos 、apollo、zk、consul、etcd3# type = "file"type = "nacos"nacos {serverAddr = "127.0.0.1:8848"namespace = "public"group = "SEATA_GROUP"username = "nacos"password = "nacos"}}

file.conf

使用 MySQL 8.X JDBC 驱动、数据库账号、密码:

## transaction log store, only used in seata-server
store {## store mode: file、db、redismode = "db"## file store propertyfile {## store location dirdir = "sessionStore"# branch session size , if exceeded first try compress lockkey, still exceeded throws exceptionsmaxBranchSessionSize = 16384# globe session size , if exceeded throws exceptionsmaxGlobalSessionSize = 512# file buffer size , if exceeded allocate new bufferfileWriteBufferCacheSize = 16384# when recover batch read sizesessionReloadReadSize = 100# async, syncflushDiskMode = async}## database store propertydb {## 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.cj.jdbc.Driver"url = "jdbc:mysql://127.0.0.1:3306/seata?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true"user = "root"password = "root"mi

http://www.ppmy.cn/ops/133663.html

相关文章

渗透利器-kali工具 (第三章-5) sqlmap之sql注入一、二

一:常见的注入方式 1.sqlmap用于Access数据库注入 2.sqlmap用于Cookie注入  --cookie 3.sqlmap用于Post注入  --froms 、--data、抓包 4.sqlmap用于mysql注入 绕过waf脚本测试:--tamper "space2morehash.py" 常见sqlmap使用方法&#xff1…

基于大语言模型意图识别和实体提取功能;具体ZK数值例子:加密货币交易验证;

目录 基于大语言模型意图识别和实体提取功能 案例背景 零知识证明过程 具体例子 具体举例(简化) 具体ZK数值例子:加密货币交易验证 定义多项式 承诺 挑战 证明构造 证明验证 结论 zkLLM Zero Knowledge Proofs for Large Language Models 在大模型验证过程中处…

Android 13.0 framework系统修改安兔兔等显示的屏幕尺寸大小功能实现

1.前言 在13.0的系统rom定制化开发中,在使用第三方app检测系统的一些信息中,比如安兔兔 设备信息等检测app中,有时候显示的屏幕尺寸大小和 产品规格书等信息不同,稍微有些差异,所以就需要看下系统framework层中,相关的设备信息是怎么读出来的,然后做些调整 接下来就来分…

06.VSCODE:备战大项目,CMake专项配置

娇小灵活的简捷配置不过是年轻人谈情说爱的玩具,帝国大厦的构建,终归要交给CMake去母仪天下。一个没有使用 CMake 的 C 项目,就像未来世界里的一台相声表演,有了德纲却无谦,观众笑着遗憾。—— 语出《双城记》作者&…

【MySQL】explain之type类型

explain的type共有以下几种类型,system、const、eq_ref、ref、range、index、all。 system:当表中只有一条记录并且该表使用的存储引擎的统计数据是精确的,比如MyISAM、Memory,那么对该表的访问方法就是system。 const&#xff…

「QT」几何数据类 之 QSize 尺寸类

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

提取神经网络数学表达式

来自《老饼讲解神经网络》 www..bbbdata.com 当我们在matlab训练好网络后,可以使用神经网络工具箱的sim(net,x)函数进行预测输出。但往往想提取出它的数学表达式,该怎么提取呢? 下面以《一个简单的神经网络例子》中的模型为例,提取…

《Java编程思想》第三章习题答案

练习1:(1)使用“简短的”和正常的打印语句来编写一个程序。 答案:这里使用“简短的”打印语句需要导thinking in Java作者个人写的包。笔者没有找到资源,就忽略这一步。 package thinkinginjava.chapterthree;public…