MST

星途 面试题库

面试题:微服务架构下Spring Cloud实现分布式事务处理的常用方案

在微服务架构中,使用Spring Cloud框架时,常见的分布式事务处理方案有哪些?请简要阐述每种方案的原理和适用场景。
38.2万 热度难度
后端开发微服务架构

知识考点

AI 面试

面试题答案

一键面试

1. 基于XA协议的两阶段提交(2PC)

  • 原理
    • 第一阶段(投票阶段):协调者向所有参与者发送事务内容,询问是否可以提交事务,参与者执行事务操作但不提交,并向协调者反馈“可以提交”或“回滚”。
    • 第二阶段(执行阶段):如果所有参与者都回复“可以提交”,协调者向所有参与者发送“提交事务”指令,参与者正式提交事务;如果有任何一个参与者回复“回滚”,协调者向所有参与者发送“回滚事务”指令,参与者回滚事务。
  • 适用场景:适用于对数据一致性要求极高,且参与事务的服务数量相对较少,性能要求不是特别苛刻的场景。例如银行转账场景,确保资金的准确转移。

2. TCC(Try - Confirm - Cancel)

  • 原理
    • Try阶段:主要是对业务系统做检测及资源预留。例如在订单支付场景中,Try阶段可以冻结账户中的相应金额。
    • Confirm阶段:确认执行业务操作,在Try阶段成功的前提下,执行真正的业务操作,如完成支付。
    • Cancel阶段:如果Try阶段执行成功,但Confirm阶段执行失败,需要进行回滚操作,如解冻之前冻结的金额。
  • 适用场景:适用于对性能要求较高,且业务逻辑可以拆解为Try、Confirm、Cancel三个阶段的场景,如电商的订单支付、库存扣减等场景。

3. 本地消息表(可靠消息最终一致性)

  • 原理
    • 业务服务在执行本地事务时,同时将一条消息写入本地消息表,标记为待发送状态。
    • 有一个专门的消息发送服务定时扫描本地消息表,将待发送消息发送到消息队列。
    • 接收方从消息队列消费消息并处理业务,如果处理成功,向发送方发送确认消息;发送方接收到确认消息后,从本地消息表中删除该消息。如果处理失败,接收方可以重试,或者发送方重新发送消息。
  • 适用场景:适用于业务对一致性要求不是强一致,允许一定时间内的最终一致性,且业务场景可以通过消息异步处理的场景,如电商的下单后异步通知库存系统扣减库存等场景。

4. 最大努力通知

  • 原理
    • 发起方在执行完本地业务后,向接收方发送消息(如通过HTTP接口等方式),告知接收方执行相关业务。
    • 如果接收方处理成功,返回成功响应;如果处理失败,发起方按照一定的策略(如定时重试)进行重试,直到接收方处理成功或达到最大重试次数。
  • 适用场景:适用于对数据一致性要求相对较低,允许偶尔出现小概率不一致情况,且接收方业务处理简单,适合通过重试解决问题的场景,如短信通知、邮件通知等场景。