MST

星途 面试题库

面试题:微服务架构下Spring Cloud Seata分布式事务解决方案中,AT模式的工作原理是什么

在微服务架构场景中,使用Spring Cloud Seata的AT模式来处理分布式事务,请详细阐述其工作原理,包括一阶段、二阶段的操作流程以及如何保证数据一致性。
44.7万 热度难度
后端开发微服务架构

知识考点

AI 面试

面试题答案

一键面试

一、Spring Cloud Seata AT 模式工作原理概述

Spring Cloud Seata 的 AT 模式是一种无侵入的分布式事务解决方案。它基于数据库的本地事务来实现分布式事务,通过对业务 SQL 的解析和执行过程的干预,来完成分布式事务的处理。

二、一阶段操作流程

  1. 业务 SQL 执行
    • 业务服务发起数据库操作,如 INSERTUPDATEDELETE 等 SQL 语句。
    • Seata 的代理数据源(AutoDataSource)拦截这些 SQL 语句。
  2. 数据快照
    • 在执行 SQL 之前,Seata 会根据 SQL 类型对相关数据进行快照。
    • 对于 UPDATE 操作,会记录修改前的数据镜像;对于 INSERT 操作,会记录插入的数据;对于 DELETE 操作,会记录删除前的数据。这些数据快照会存储在 Seata 的 undo_log 表中。
  3. 本地事务提交
    • Seata 将业务 SQL 和 undo_log 放在同一个本地事务中提交。如果本地事务提交成功,说明一阶段执行成功,此时业务数据的状态是已修改但未最终确认在分布式事务中生效。

三、二阶段操作流程

  1. 提交阶段
    • 当所有参与分布式事务的分支事务一阶段都执行成功后,进入二阶段提交。
    • 协调器向所有分支事务发送提交请求。
    • 各分支事务接收到提交请求后,直接删除 undo_log 表中的数据,因为此时业务数据已确定在分布式事务中生效,不需要回滚了,然后完成本地事务提交。
  2. 回滚阶段
    • 如果有任何一个分支事务一阶段执行失败,协调器会向所有分支事务发送回滚请求。
    • 分支事务接收到回滚请求后,根据 undo_log 表中的数据镜像,将数据恢复到修改前的状态,然后完成本地事务回滚,从而保证业务数据的一致性。

四、保证数据一致性的机制

  1. 基于本地事务:利用数据库本地事务的原子性,保证业务 SQL 和 undo_log 操作的一致性,即要么都成功,要么都失败。
  2. 数据快照与回滚:通过 undo_log 记录数据的修改前镜像,在回滚时能够准确恢复数据,确保即使部分分支事务失败,也能将所有数据恢复到事务开始前的状态,从而保证整个分布式事务的数据一致性。
  3. 协调器的统一控制:Seata 的协调器负责管理分布式事务的全局状态,协调各分支事务的提交和回滚,确保所有分支事务按照统一的规则进行操作,避免出现部分提交、部分回滚的不一致情况。