SpringCloud 面试题, 什么情况下需要使用分布式事务,有哪些方案?
SpringCloud 面试题, 什么情况下需要使用分布式事务,有哪些方案?
QA
Step 1
Q:: 什么情况下需要使用分布式事务?
A:: 分布式事务通常在多个微服务或应用需要在同一个业务逻辑中跨多个数据库或资源进行一致性操作时使用。例如,在一个订单系统中,当订单服务和支付服务分属不同数据库时,需要确保订单创建和支付操作要么都成功,要么都失败,否则系统的数据会不一致。
Step 2
Q:: 分布式事务有哪些常见解决方案?
A:: 常见的分布式事务解决方案包括:1. 两阶段提交(2PC):协调者首先准备所有参与者进行事务提交,待所有参与者都准备好后,再通知提交或回滚。2. 本地事务 + 最终一致性(TCC):通过补偿事务来保证最终一致性。3. Saga 模式:将长事务拆分为多个短事务,确保每个事务的成功或补偿。4.
可靠消息最终一致性:通过消息队列将事务操作拆分并异步执行,确保最终一致性。
Step 3
Q:: 什么是两阶段提交(2
PC)?
A:: 两阶段提交是一种确保分布式系统中事务一致性的协议。在第一阶段(准备阶段),事务协调者要求所有参与者预提交事务操作,并锁定必要资源。在第二阶段(提交阶段),如果所有参与者都同意提交,协调者会通知所有参与者正式提交事务;如果有任何参与者拒绝提交,协调者则会通知所有参与者回滚事务。
Step 4
Q:: 什么是Saga模式?
A:: Saga模式是一种分布式事务管理方式,它将一个长事务分解为一系列的短本地事务。每个本地事务完成后,Saga会触发下一个本地事务。如果任何一个本地事务失败,Saga会执行相应的补偿事务以撤销之前已经完成的操作,保证系统的一致性。Saga模式适用于需要处理长事务、异步操作且可以容忍短暂不一致的场景。
Step 5
Q:: TCC(Try-Confirm-
Cancel)模式是什么?
A:: TCC模式是一种分布式事务解决方案,通过为每个操作定义三个步骤:Try、Confirm 和 Cancel。Try 阶段预留资源,Confirm 阶段正式提交操作,Cancel 阶段回滚操作。TCC 可以确保操作的一致性,并在失败时通过 Cancel 阶段撤销之前的操作。