MST

星途 面试题库

面试题:微服务架构中Spring Cloud分布式事务的一致性保障

假设你在一个电商微服务项目中,订单服务创建订单后,库存服务扣减库存,支付服务处理支付。如果库存扣减成功但支付失败,如何通过Spring Cloud相关技术实现事务回滚以保证数据一致性?同时说明该方案的优缺点。
16.6万 热度难度
后端开发微服务架构

知识考点

AI 面试

面试题答案

一键面试

实现方案

  1. 使用Saga模式
    • 概念:Saga模式是一种长事务解决方案,它将一个长事务分解为多个本地事务,每个本地事务都有对应的补偿操作。
    • 在Spring Cloud中的实现:可以使用Spring Cloud Saga相关框架,如Axon Framework等。
    • 具体步骤
      • 订单服务:创建订单时,记录订单信息并发送创建订单成功事件。
      • 库存服务:监听创建订单成功事件,扣减库存,若成功则发送库存扣减成功事件;若失败,发送库存扣减失败事件,订单服务接收到库存扣减失败事件后回滚订单。
      • 支付服务:监听库存扣减成功事件,处理支付。若支付失败,发送支付失败事件。库存服务监听支付失败事件,执行库存回滚操作(补偿操作),订单服务也监听支付失败事件,回滚订单。
  2. 使用分布式事务框架,如Seata
    • 概念:Seata是一款开源的分布式事务解决方案,它定义了TC(Transaction Coordinator)、TM(Transaction Manager)和RM(Resource Manager)角色来协调分布式事务。
    • 在Spring Cloud中的集成:将Seata与Spring Cloud项目集成,在订单服务、库存服务和支付服务中配置Seata客户端。
    • 具体步骤
      • 订单服务:作为全局事务的发起者(TM),开启一个全局事务,创建订单。
      • 库存服务:作为RM,接收到扣减库存请求后,在本地事务中扣减库存,并向TC报告本地事务状态。
      • 支付服务:同样作为RM,处理支付,若支付失败,RM向TC报告失败状态,TC通知所有RM(包括库存服务对应的RM)回滚本地事务,从而保证数据一致性。

方案优缺点

Saga模式

  • 优点
    • 松耦合:各个服务之间通过事件进行通信,耦合度低,易于维护和扩展。
    • 性能较好:无需像XA事务那样长时间锁定资源,各个本地事务可以并行执行,提高系统整体性能。
  • 缺点
    • 实现复杂:需要为每个本地事务编写补偿操作,并且要处理事件的顺序、重试等问题。
    • 一致性问题:由于是异步处理事件,在某些极端情况下可能出现数据一致性的短暂不一致。

Seata

  • 优点
    • 简单易用:对业务代码侵入性相对较小,只需要在关键业务处添加少量注解,即可实现分布式事务。
    • 强一致性:通过TC协调各个RM,能保证数据的强一致性。
  • 缺点
    • 性能瓶颈:XA模式下,在事务提交前会锁定资源,可能导致性能瓶颈,尤其在高并发场景下。
    • 依赖问题:依赖于Seata Server(TC),增加了系统的复杂性和单点故障风险,虽然可以通过集群部署缓解,但运维成本增加。