MST

星途 面试题库

面试题:微服务架构下Spring Cloud如何处理分布式事务

在使用Spring Cloud构建微服务架构时,常见的分布式事务场景有哪些?请简要描述基于Seata框架的AT模式处理分布式事务的原理及实现步骤。
45.8万 热度难度
后端开发微服务架构

知识考点

AI 面试

面试题答案

一键面试

常见的分布式事务场景

  1. 订单 - 库存场景:用户下单时,订单服务创建订单记录,库存服务扣减库存。若库存扣减失败,订单需回滚,保证数据一致性。
  2. 支付 - 订单场景:支付成功后,支付服务通知订单服务修改订单状态为已支付。若支付成功但订单状态未更新,需回滚支付操作。
  3. 跨库操作场景:不同数据库间的数据交互,如一个业务操作涉及到用户库和订单库的修改,需要保证两个库的数据一致性。

Seata框架AT模式处理分布式事务的原理

  1. 全局事务与分支事务:Seata把一个分布式事务理解成一个包含了若干分支事务的全局事务。全局事务的职责是协调其下管辖的分支事务达成一致,要么一起成功提交,要么一起失败回滚。
  2. 数据快照:在每个分支事务执行前,Seata会对数据进行快照(undo_log)。执行完成后,再生成一份数据快照(redo_log)。如果事务需要回滚,就可以根据undo_log恢复数据到事务执行前的状态。
  3. 两阶段提交
    • 第一阶段:各分支事务执行,并将undo_log和redo_log记录下来,但不提交事务。此时数据库资源被锁定。
    • 第二阶段:如果全局事务提交,各分支事务直接提交;如果全局事务回滚,根据undo_log进行回滚操作,释放数据库资源。

Seata框架AT模式处理分布式事务的实现步骤

  1. 引入依赖:在各个微服务的pom.xml文件中引入Seata相关依赖。
  2. 配置Seata Server:配置Seata Server的地址等信息,可通过application.yml文件配置。
  3. 开启全局事务:在发起分布式事务的业务方法上使用@GlobalTransactional注解。
  4. 编写业务逻辑:各个微服务按照正常业务逻辑编写,Seata会自动处理分支事务的注册、提交和回滚。
  5. 数据准备:确保数据库支持本地事务,并创建好undo_log表,用于记录数据快照。