首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01 | 是什么推动了单体应用到微服务架构的演进?
02 | 微服务全家桶:走进 Spring Cloud 的世界
03 | 初窥门径:我们要搭建一个怎样的微服务实战项目?
04 | 十八般兵器:如何搭建项目所需的开发环境?
05 | 牛刀小试:如何搭建优惠券模板服务?
06 | 牛刀小试:如何搭建优惠券计算服务和用户服务?
07 | Nacos体系架构:什么是服务治理?
08 | 服务治理:Nacos集群环境搭建
09 | 集成 Nacos:如何将服务提供者注册到 Nacos 服务器?
10 | 集成 Nacos:如何通过服务发现机制向服务提供者发起调用?
11 | Loadbalancer 实战:通过自定义负载均衡策略实现金丝雀测试
12 | OpenFeign:服务间调用组件 OpenFeign 是怎么“隔空取物”的?
13 | OpenFeign 实战:如何实现服务间调用功能?
14 | OpenFeign 实战:OpenFeign 组件有哪些高级玩法?
15 | 配置中心在微服务中发挥着怎样的作用?
16 | 如何集成 Nacos Config 实现配置项动态刷新?
17 | Sentinel 体系结构:什么是服务容错(降级熔断、流量整形)?
18 | Sentinel 实战:如何实施流量整形与限流策略?
19 | Sentinel 实战:如何为项目添加异常降级方案?
20 | Sentinel 实战:如何接入 Nacos 实现规则持久化?
21 | Sleuth 体系架构:为什么微服务架构需要链路追踪?
22 | 调用链追踪:集成 Sleuth 和 Zipkin,实现链路打标
23 | 调用链追踪:如何通过 ELK 实现日志检索?
24 | 为什么微服务架构少不了微服务网关?
25 | 微服务网关:Gateway 中的路由和谓词有何应用?
26 | 微服务网关:如何设置请求转发、跨域和限流规则?
27 | 微服务网关:如何借助 Nacos 实现动态路由规则?
28 | 消息驱动:谁说消息队列只能削峰填谷?
29 | 消息驱动:如何集成 Stream 实现消息驱动?
30 | 消息驱动:如何高效处理 Stream 中的异常?
31 | 消息驱动:如何通过 RabbitMQ 插件实现延迟消息?
32 | Alibaba Seata 框架:什么是分布式事务?
33 | 分布式事务:搭建 Seata 服务器
34 | 分布式事务:使用 Nacos+Seata 实现AT模式
35 | 分布式事务:使用 Nacos+Seata 实现 TCC 补偿模式
36 | 说透微服务 | 什么是主链路规划?
当前位置:
首页>>
技术小册>>
Spring Cloud微服务项目实战
小册名称:Spring Cloud微服务项目实战
### 32 | Alibaba Seata 框架:什么是分布式事务? 在深入探讨Spring Cloud微服务项目实战的过程中,分布式事务管理是一个不可回避且至关重要的议题。随着微服务架构的普及,系统被拆分为多个独立的服务单元,每个服务可能运行在不同的物理节点上,操作不同的数据库实例。这种架构带来了更高的灵活性和可扩展性,但同时也引发了新的挑战——如何在多个服务之间保持数据的一致性和完整性?Alibaba Seata框架正是为解决这一问题而诞生的。本章将详细解析分布式事务的概念、挑战以及Seata框架如何在这一领域发挥作用。 #### 一、分布式事务概述 **1.1 什么是分布式事务?** 分布式事务是指涉及多个计算机或网络中的多个参与者(服务或数据库)之间的事务。这些事务必须以一致的方式执行,以确保数据的完整性和一致性。在单体应用中,事务通常局限于单个数据库实例内,通过数据库管理系统提供的事务机制(如ACID特性)来保证数据的一致性。然而,在微服务架构中,一个业务操作可能跨越多个服务,每个服务操作不同的数据库,这就产生了分布式事务的需求。 **1.2 分布式事务的挑战** 分布式事务管理面临多个挑战: - **网络延迟与故障**:服务之间的网络通信可能受到延迟或故障的影响,导致事务执行的不确定性。 - **数据一致性**:如何确保多个服务间的数据在事务提交时保持一致,是分布式事务的核心问题。 - **事务协调**:需要一个中心化的协调者来管理全局事务的状态,并决定何时提交或回滚事务。 - **性能开销**:分布式事务管理通常会引入额外的性能开销,如网络通信、锁等待等。 #### 二、分布式事务模式 为了解决分布式事务的问题,业界提出了多种事务模式,包括两阶段提交(2PC)、三阶段提交(3PC)、基于消息的事务、SAGA模式以及Seata特有的AT模式等。 **2.1 两阶段提交(2PC)** 两阶段提交是最经典的分布式事务协议,分为准备阶段和提交阶段。在准备阶段,所有参与者将各自的事务准备好,但不提交,同时向协调者报告准备状态。在提交阶段,如果所有参与者都准备好了,协调者会发送提交指令,所有参与者同时提交事务;如果有任何参与者未准备好,则发送回滚指令,所有参与者回滚事务。 **2.2 三阶段提交(3PC)** 三阶段提交是2PC的改进版,增加了准备提交阶段,用于在准备阶段和提交阶段之间增加一层确认,以减少协调者故障导致的参与者长时间阻塞问题。 **2.3 基于消息的事务** 基于消息的事务模式通过消息队列来实现分布式事务。事务的发起者将消息发送到队列,消费者从队列中取出消息并执行相应的操作。如果操作成功,则发送确认消息;如果失败,则发送失败消息,由事务管理器决定是否进行补偿操作。 **2.4 SAGA模式** SAGA模式是一种长事务解决方案,将一个大事务拆分为一系列本地事务,每个本地事务都有对应的补偿事务。当某个本地事务失败时,通过执行其补偿事务来回滚之前的操作,从而保持数据的一致性。 **2.5 Seata的AT模式** Seata的AT模式(基于两阶段提交的改进)通过拦截并修改数据库操作,在本地事务提交前生成数据镜像(undo log),并在需要回滚时利用undo log进行回滚,从而实现了对业务代码的无侵入式事务管理。 #### 三、Alibaba Seata框架介绍 **3.1 Seata是什么?** Alibaba Seata(Simple Extensible Autonomous Transaction Architecture)是由阿里巴巴中间件团队发起的开源分布式事务解决方案。Seata致力于在微服务架构下提供高性能、简单易用的分布式事务服务,支持多种分布式事务模式,包括AT、TCC、SAGA和XA事务模式。 **3.2 Seata的架构与角色** Seata的架构中包含了三个核心角色: - **TC(Transaction Coordinator)**:事务协调者,负责维护全局事务和分支事务的状态,驱动全局事务的提交或回滚。TC是独立部署的Server服务端。 - **TM(Transaction Manager)**:事务管理器,定义全局事务的范围,包括开始全局事务、提交或回滚全局事务。TM嵌入到应用程序中作为Client客户端。 - **RM(Resource Manager)**:资源管理器,管理分支事务处理的资源,与TC交互以注册分支事务和报告分支事务的状态,并驱动分支事务的提交或回滚。RM同样嵌入到应用程序中作为Client客户端。 **3.3 Seata的工作原理** 在Seata中,一个分布式事务的生命周期如下: 1. **全局事务开启**:TM请求TC开启一个全局事务,TC生成一个XID作为全局事务的编号,并在微服务调用链路中传播该XID。 2. **分支事务注册**:RM请求TC将本地事务注册为全局事务的分支事务,通过全局事务的XID进行关联。 3. **全局事务提交或回滚**:TM根据业务逻辑请求TC对全局事务进行提交或回滚。TC根据所有分支事务的状态决定是否提交或回滚全局事务,并驱动RM对相应的分支事务进行提交或回滚。 **3.4 Seata的AT模式详解** AT模式由2PC演变而来,在2PC的基础上增加了数据镜像(undo log表)的功能。在业务操作执行前,Seata会拦截SQL操作,生成数据的前置镜像和后置镜像,并将这些镜像数据记录到undo log表中。如果事务需要回滚,则根据undo log表中的数据生成回滚SQL并执行,从而实现事务的回滚。 **3.5 Seata的优势** - **高性能与轻量级**:Seata在保持高性能的同时,保持了架构的轻量级,不会对系统造成过大的负担。 - **多种事务模式支持**:Seata提供了AT、TCC、SAGA等多种事务模式,可以根据不同的业务场景灵活选择。 - **易于集成**:Seata与Spring Cloud等主流微服务框架集成友好,大大降低了开发难度和成本。 - **强大的社区支持**:Seata拥有活跃的社区和完善的文档,遇到问题可以快速找到解决方案。 #### 四、Seata的部署与应用 **4.1 Seata服务端的部署** Seata服务端(TC)的部署需要选择合适的存储模式,包括file模式(单机模式)、db模式(高可用模式)和redis模式(高性能模式)。db模式适用于集群环境,通过数据库共享全局事务信息,而file模式和redis模式则分别适用于单机环境和高性能要求场景。 **4.2 应用集成** 在Spring Cloud项目中集成Seata相对简单,主要步骤包括添加Seata依赖、配置数据源和事务管理器、配置Seata的File.conf和Registry.conf文件等。通过简单的配置和注解,开发者就可以在Spring Cloud项目中轻松地使用Seata来管理分布式事务。 **4.3 实际应用案例** 以一个在线商城的订单处理为例,订单操作可能涉及库存扣减、支付、物流等多个服务。使用Seata可以确保这些服务之间的事务一致性。当订单提交时,TM开启一个全局事务,并调用库存服务、支付服务和物流服务,每个服务作为RM将本地事务注册为全局事务的分支事务。如果所有服务都执行成功,TM请求TC提交全局事务;如果任何服务执行失败,TM请求TC回滚全局事务,确保数据的一致性。 #### 五、总结 分布式事务是微服务架构中不可或缺的一部分,它确保了跨多个服务的数据一致性和完整性。Alibaba Seata作为一款开源的分布式事务解决方案,以其高性能、轻量级、易于集成和多种事务模式支持等优势,在业界得到了广泛的应用。通过本章的介绍,希望读者能够对分布式事务和Seata框架有一个全面的了解,并在实际项目中灵活运用Seata来解决分布式事务管理的问题。
上一篇:
31 | 消息驱动:如何通过 RabbitMQ 插件实现延迟消息?
下一篇:
33 | 分布式事务:搭建 Seata 服务器
该分类下的相关小册推荐:
Java语言基础15-单元测试和日志技术
JAVA 函数式编程入门与实践
SpringBoot合辑-高级篇
Java语言基础12-网络编程
Java语言基础8-Java多线程
Java并发编程
Java必知必会-JDBC
Java语言基础1-基础知识
Java语言基础14-枚举和注解
Java高并发秒杀入门与实战
SpringBoot合辑-初级篇
Java语言基础13-类的加载和反射