
Seata 2.x
文章平均质量分 86
基于最新的Seata 2.x ,不仅仅是让您会用,而是从实战、原理、源码方面让您深入了解,适用各种场景,解决开发中遇到各种问题。
墨 禹
一个追求有道有术的非典型程序员
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Seata 2.x 系列【1】专栏导读
本专栏主要讲解分布式事务解决方案Seata,从入门到进阶,再到源码分析,最后进行项目实战。由浅入深,由纲及目,不仅仅是学会,更重要的是让您理解并实际应用。官网文档一般较为笼统,最全但不是最细的,很多功能的实现并没有完整案例技术博客很多很杂,很难系统完整的进行学习视频教学更易理解,大多都是培训机构引流,只能稍微入门为了让您系统深入的了解并使用Seata最新:本专栏基于最新2.0.0版本最全:详细详解到每一个知识点,而不是只有分库分表最细:详细介绍每一个功能,并进行实操。原创 2024-03-06 17:22:02 · 675 阅读 · 0 评论 -
Seata 2.x 系列【2】数据库事务
事务(Transaction)一般是指要做的或所做的事情。数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序流程。事务保证一系列数据库操作要么全部成功,要么全部失败,如果某一步出现了异常,数据就会回滚,把之前的操作撤销。原创 2024-03-06 17:48:54 · 1297 阅读 · 0 评论 -
Seata 2.x 系列【3】分布式事务
在单体架构中,后台应用只操作单一的数据库,事务仅限于对单一数据库资源的访问控制,这种场景下的事务称之为本地事务),几乎所有的成熟的关系型数据库都提供了对本地事务的原生支持。在分布式架构中,多个服务操作自己独立的数据库,某个操作可能是跨服务跨数据库的,例如一个下单操作,首先需要调用订单操作订单数据库,然后订单服务调用商品服务扣减库存。下单操作也需要事务支持,一旦扣减库存失败,订单数据需要回滚。这种场景下的事务称之为分布式事务。传统的关系型数据库在分布式的场景下,无法满足ACID。原创 2024-03-07 14:35:17 · 1033 阅读 · 0 评论 -
Seata 2.x 系列【4】产品简介
Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务,为用户打造一站式的分布式解决方案。原创 2024-03-07 14:40:01 · 1409 阅读 · 0 评论 -
Seata 2.x 系列【5】直接部署
Seata包含TC、TM和RM三大角色,其中TM和RM属于Seata Client端,由业务系统集成,TC属于Seata Server端,需要单独部署。原创 2024-03-08 16:18:13 · 2212 阅读 · 0 评论 -
Seata 2.x 系列【6】微服务项目搭建
接下来我们使用Spring Cloud Alibaba 微服务框架,搭建一个测试项目,模拟电商用户下单操作。原创 2024-03-08 16:18:38 · 796 阅读 · 0 评论 -
Seata 2.x 系列【7】服务端集成 Nacos 2.x
在前两篇文档中,我们部署了Seata服务端,并基于Spring Cloud Alibaba微服务框架模拟了电商用户下单操作,接下来学习Seata集成Nacos注册中心、配置中心。原创 2024-03-12 10:04:40 · 1758 阅读 · 0 评论 -
Seata 2.x 系列【8】Spring Cloud 集成客户端
在前几篇文档中,我们部署好了Seata服务端并集成了Nacos,也搭建了一个微服务项目并实现了电商下单功能,接下来,我们学习如何Spring Cloud集成Seata客户端,并解决分布式事务问题。原创 2024-03-12 10:05:14 · 1330 阅读 · 0 评论 -
Seata 2.x 系列【9】事务会话存储模式
TC(服务端)作为事务协调者,负责维护全局和分支事务的状态,驱动全局事务提交或回滚。在一次全局事务(分布式事务)会话中,TC需要维护一些会话数据(事务状态和记录),比如全局事务信息、分支事务信息、锁信息等。TC端的作用是保证事务的二阶段被正确执行,这取决于事务记录的正确存储。为确保事务记录不丢失,需要在保持状态正确的前提下,驱动所有的RM执行正确的二阶段行为。原创 2024-03-14 15:54:57 · 1508 阅读 · 0 评论 -
Seata 2.x 系列【10】回滚日志表 undo_log
在AT模式中,需要在参与全局事务的数据库中,添加一个undo_log表,类似于Mysql数据库中的undo log事务回滚日志表,在事务没提交之前,记录分支事务更新前的数据到日志表中,当全局事务需要回滚时,TC发出回滚命令,RM收到后使用undo log进行回退,并删除日志。原创 2024-03-14 15:55:32 · 4064 阅读 · 0 评论 -
Seata 2.x 系列【11】多数据源分布式事务
在之前的案例中,我们在Spring Cloud微服务场景下使用Seata解决了分布式事务问题,在单体架构中,单个服务也可能存在跨库导致的分布式事务问题,例如下图中,因为分库导致下单请求需要连接多个数据库进行操作:原创 2024-03-15 17:05:49 · 1998 阅读 · 0 评论 -
Seata 2.x 系列【12】高可用集群部署
Seata在生产环境应当采用集群部署,主节点宕机后继续正常运行,常见的方式是通过部署多个提供相同服务的节点。不然一旦单机的Seata服务端宕机,接入的业务系统也会变得不可用。原创 2024-03-15 17:06:07 · 2733 阅读 · 0 评论 -
Seata入门系列(5)-Seata参数配置详解
启动参数源码 @Parameter(names = "--help", help = true) private boolean help; @Parameter(names = {"--host", "-h"}, description = "The ip to register to registry center.", order = 1) private String host; @Parameter(names = {"--port", "-p"}, de原创 2021-02-22 11:37:06 · 2956 阅读 · 0 评论 -
Seata入门系列(8)-Nacos 2.0+Seata 1.4.2 集群模式搭建
文章目录原创 2022-01-26 13:14:24 · 3289 阅读 · 0 评论 -
Seata入门系列(9)-事务分组原理及应用案例详解
文章目录事务分组概念事务分组如何找到后端Seata集群?1. 配置事务分组名2. 配置事务分组名和集群名的映射关系3. 获得TC服务列表为什么这么设计,不直接取服务名?应用案例最佳实践1:TC的异地多机房容灾最佳实践2:单一环境多应用接入最佳实践3:client的精细化控制最佳实践4:Seata的预发与生产隔离事务分组概念事务分组:seata的资源逻辑,可以按微服务的需要,在应用程序(客户端)对自行定义事务分组,每组取一个名字。例如以下配置中,定义了当前事务分组名为${spring.applicat原创 2022-01-26 15:20:03 · 4182 阅读 · 1 评论 -
Seata入门系列(11)-Seata之TCC模式入门案例
文章目录前言TCC 案例1. 环境搭建2. 自定义两个阶段处理逻辑3. 测试4. 总结前言Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。TCC 与 Seata AT 事务一样都是两阶段事务,它与 AT 事务的主要区别为:TCC 对业务代码侵入严重:每个阶段的数据操作都要自己进行编码来实现,事务框架无法自动处理。TCC 效率更高:不必对数据加全局锁,允许多个事务同时操作数据。接下来分析下Seata 如何使用TCC 模式。TCC 案原创 2022-02-08 16:43:12 · 4893 阅读 · 3 评论 -
Seata入门系列(12)-Seata1.4.2之AT模式执行流程解析
文章目录启动阶段执行阶段1. 一阶段TM 开启全局事务2. 一阶段 TM 执行本地事务3. 一阶段 执行远程分支事务4. 二阶段-提交5. 二阶段-回滚启动阶段自动加载各种Bean及配置信息初始化TM(事务管理器)初始化RM(资源管理器)初始化分布式事务客户端完成,代理数据源连接TC(seata服务端),注册RM连接TC(seata服务端),注册TM扫描并动态代理开启了分布式事务的Bean执行阶段1. 一阶段TM 开启全局事务使用了@Glo原创 2022-02-10 11:24:15 · 2165 阅读 · 1 评论 -
Seata入门系列(13)-Seata之SQL语句限制
文章目录前言SQL限制DML语句SQL修饰函数前言以下内容摘自官网在使用Seata 的时候,对SQL语句还是有很多限制,所以在使用的时候需要格外注意这个问题(较新版本可能已支持)。SQL限制Seata 事务目前支持 INSERT、UPDATE、DELETE 三类 DML 语法的部分功能,这些类型都是已经经过Seata开源社区的验证。SQL 的支持范围还在不断扩大,建议在本文限制的范围内使用。使用限制:不支持 SQL 嵌套不支持多表复杂 SQL不支持存储过程、触发器不支持批量更新 SQ原创 2022-02-28 22:03:13 · 2222 阅读 · 5 评论 -
Seata入门系列(14)-分布式事务环境下数据库批量插入和批量更新操作
文章目录前言批量插入Mybatis-plus使用foreach标签批量更新前言批量插入和批量更新是常用的数据库操作,接下来我们分析下在seata 中如何使用。如果使用循环遍历插入,效率是很慢的,所以一般的ORM框架都是支持批量操作的,接下来以Mybatis 为例,深入了解下如何使用批处理。批量插入Mybatis-plusMybatis 提供了批处理的相关API,Mybatis-plus对其进行了封装,Service 接口提供了saveBatch方法用于批量插入操作,源码如下: publ原创 2022-02-28 22:46:49 · 2441 阅读 · 5 评论 -
Seata入门系列(15)-Seata源码分析之全局事务扫描器GlobalTransactionScanner
文章目录自动配置类全局事务扫描器1. 初始化客户端2. 注销3. AOP 代理总结自动配置类基于Spring Boot的自动配置功能,可以在seata-spring-boot-starter中找到Seata 引入的自动配置类,当开启了seata.enabled=true时,将会加载。扫描器是在SeataAutoConfiguration自动配置类中加载注入的:@ConditionalOnProperty(prefix = SEATA_PREFIX, name = "enabled", having原创 2022-03-01 10:26:00 · 2614 阅读 · 0 评论 -
Seata入门系列(16)-Seata源码分析之全局事务拦截器GlobalTransactionalInterceptor
文章目录全局事务拦截器前言方法代理拦截事务执行器事务模板处理类全局事务总结全局事务拦截器前言在上篇文档,我们分析了全局事务扫描器会为使用了分布式事务注解的Bean 添加拦截器,接下来我们分析下全局事务拦截器GlobalTransactionalInterceptor是如何进行拦截的?方法代理拦截GlobalTransactionalInterceptor 实现了MethodInterceptor接口,MethodInterceptor是AOP中的拦截器,它拦截的目标是方法,实现该接口可以对需要增强原创 2022-03-01 10:34:51 · 1619 阅读 · 0 评论 -
Seata入门系列(17)-AT模式源码分析之开启全局事务
文章目录开始全局事务开始全局事务在之前,我们分析了TransactionalTemplate会进行全局事务的开启、提交或者回滚,接下来分析下,是如何开始全局事务的。开始全局事务调用的是beginTransaction方法, private void beginTransaction(TransactionInfo txInfo, GlobalTransaction tx) throws TransactionalExecutor.ExecutionException { try原创 2022-03-01 10:50:13 · 1645 阅读 · 0 评论 -
Seata入门系列(18)-AT模式源码分析之数据源代理
文章目录1. 自动代理配置类2. SeataDataSourceBeanPostProcessor3. SeataAutoDataSourceProxyCreator在之前,我们知道Seata 会对数据源进行代理,接下来我们分析下是如何进行代理的1. 自动代理配置类在seata-spring-boot-starter模块的SeataDataSourceAutoConfiguration配置类中,开启了seata数据源的自动代理,该准备主要是注入了SeataDataSourceBeanPostP原创 2022-03-01 11:18:50 · 2239 阅读 · 0 评论 -
Seata入门系列(19)-AT模式源码分析之一阶段本地分支事务
文章目录前言分支事务源码分析1. 进入代理PreparedStatementProxy2. 进入到ExecuteTemplate 创建执行器3. 执行器执行4. 构建undo_log5. 本地事务提交6. 注册本地事务前言之前我们分析了开启全局事务后,TM、TC 是如何进行交互的,接下来分析下,本地分支事务时如何进行操作的。分支事务源码分析1. 进入代理PreparedStatementProxy流程接着进入到标注有@GlobalTransactional注解的业务方法种,当执行到SQL语句原创 2022-03-01 11:30:24 · 934 阅读 · 0 评论 -
Seata入门系列(20)-AT模式源码分析之二阶段全局提交
文章目录前言二阶段全局提交DefaultCoreasyncCommit();DefaultCoordinator分支处理提交请求前言在之前我们分析了,开启全局事务,和业务执行时是如何校验全局锁和i提交本地事务的,接下来分析下是如何进行全局提交的二阶段全局提交核心代码还是在TransactionalTemplate类中,当TC 没有收到异常时,就会进行全局提交逻辑:提交和开启全局事务一样,也会在执行前后,添加钩子方法: private void commitTransaction(Glob原创 2022-03-01 11:49:00 · 1007 阅读 · 0 评论 -
Seata入门系列(21)-AT模式源码分析之二阶段全局回滚
文章目录前言1.分支回滚TC 收到分支消息前言之前我们分析了全局提交,当TC 收到异常时,会执行全局事务回滚。1. private void completeTransactionAfterThrowing(TransactionInfo txInfo, GlobalTransaction tx, Throwable originalException) throws ExecutionException { // 事务注解信息存在,毕竟异常是注解配置的回滚策略 if (原创 2022-03-01 15:09:36 · 2309 阅读 · 0 评论 -
Seata入门系列(22)-@GlobalLock注解使用场景及源码分析
文章目录前言问题场景1. 编写代码2. 测试3. 解决方案全局锁源码分析前言在Seata 中提供了一个全局锁注解@GlobalLock,字面意思是全局锁,搜索相关文档,发现资料很少,所以分析下它的应用场景和基本原理,首先看下源码中对该注解的说明:// 声明事务仅在单个本地RM中执行// 但事务需要确保要更新(或选择更新)的记录不在全局事务中// 在上述情况下,使用此注解而不是@GlobalTransaction将有助于提高性能。// @see io.seata.spring.annotation原创 2022-03-01 15:23:31 · 6548 阅读 · 9 评论 -
Seata入门系列(23)-XA模式入门案例
文章目录前言XA 协议Seata XA 模式前提整体机制工作机制入门案例1. 修改数据源代理模式2. 编写业务逻辑3. 测试前言在之前,我们试过了AT、TCC 模式,Seata 还支持XA 模式。XA 协议XA协议由Tuxedo首先提出的,并交给X/Open组织,作为资源管理器(数据库)与事务管理器的接口标准。Oracle、Informix、DB2和Sybase等各大数据库厂家都提供对XA的支持。XA协议采用两阶段提交方式来管理分布式事务。XA接口提供资源管理器与事务管理器之间进行通信的标准接口。原创 2022-03-01 15:27:31 · 2594 阅读 · 1 评论 -
Seata入门系列(26)-Seata压力测试
文章目录前言测试环境测试并发 10并发 20前言在了解了Seata 的使用和基本原理后,尝试进行了一把简单的压测,看看在高并发情况下是否有其他问题。测试环境个人电脑:Intel® Core™ i7-8750H CPU @ 2.20GHz 2.21 GHz内存:16.0 GB系统:Windows 10 专业版组件:JDK 1.8nacos 2.0.3Seata 1.4.2(Nacos 注册中心,本地文件配置中心,记录数据库存储会话)Spring Boot 2.2.13Ma原创 2022-03-09 16:41:55 · 2372 阅读 · 0 评论 -
Seata入门系列(27)-分布式事务之CAP、BASE理论
文章目录CAP理论C 一致性A 可用性P 分区容忍性组合方式CAAPCP总结BASE理论强一致性和最终一致性Base理论基本可用软状态最终一致CAP理论CAP是以下三个词语的缩写:Consistency:一致性Availability:可用性Partition tolerance:分区容忍性CAP理论的基础概念就是在分布式系统中,无法同时满足以上三点。下面我们以一个简单的分布式系统,解释下为何不同通知满足。C 一致性一致性是指写操作后的读操作可以读取到最新的数据状态,当数据分布在多原创 2022-04-26 14:46:25 · 1395 阅读 · 0 评论 -
Seata入门系列(28)- Cannot construct instance of `java.time.LocalDateTime`问题解决
文章目录错误信息当前环境报错信息问题原因位置原因解决方案方案1:更换序列化方式方案2:降低Mysql 驱动版本方案3 : 修改源码,支持解析错误信息当前环境Spring Boot : 2.3.12.RELEASENacos : 2.0.3Seata:1.4.2mysql-connector-java:8.0.25报错信息在全局事务进行失败进行全局回滚时,出现报错信息,如下:com.fasterxml.jackson.databind.exc.InvalidDefinitionExcep原创 2022-04-27 16:59:19 · 2387 阅读 · 3 评论 -
Seata入门系列(29)- Seata1.5版本新特性解读
有道无术,术尚可求,有术无道,止于术。文章目录前言新特性BUG 修复优化控制台功能前言Seata终于发布了1.5.0版本,虽然是预发布,但是还是赶紧看看更新了哪些新特性。新特性新特性中的重点:管理控制台TCC 模式支持幂等和反挂[ #4115 ] 支持控制台管理[ #3472 ] 添加 redisLocker 的 lua 模式[ #3575 ] 支持混合使用不同存储的锁和会话[ #3374 ] 为重复键更新插入添加执行程序[ #3642 ] 提供一个 api 来将 tcc 阶.原创 2022-05-18 10:31:19 · 3345 阅读 · 1 评论