MST

星途 面试题库

面试题:分布式系统中Saga模式与TCC模式在事务补偿机制上的区别

请阐述在分布式系统里,Saga模式与TCC模式在事务补偿机制方面各自的特点及差异,举例说明不同场景下如何利用这些差异进行选择。
11.6万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

Saga模式事务补偿机制特点

  1. 基于事件驱动:通过事件进行各个子事务间的交互与协调。每个子事务完成后会发布事件,触发后续子事务或补偿事务。例如电商下单后,库存减少子事务完成发布库存更新事件,触发订单创建子事务。若订单创建失败,根据库存更新事件触发库存回滚补偿事务。
  2. 补偿操作相对柔性:补偿逻辑通常是根据业务语义编写,不依赖底层数据库锁等机制,对系统性能和可用性影响较小。如酒店预订场景,取消预订补偿操作只需将房间状态改回可预订,不会像刚性事务那样长时间占用资源。
  3. 适合长事务:能较好处理业务流程长、涉及多个服务交互的事务。因为它允许子事务按顺序异步执行,整体事务时间不受单个子事务过长时间影响。比如旅游预订,涉及机票、酒店、租车等多个子事务,Saga模式可异步依次处理。

TCC模式事务补偿机制特点

  1. 两阶段提交变种:分为Try、Confirm、Cancel三个阶段。Try阶段做资源预留,Confirm阶段正式提交,Cancel阶段进行补偿。以转账为例,Try阶段锁定双方账户金额,Confirm阶段执行实际转账,若出现问题,Cancel阶段解锁金额。
  2. 补偿操作相对刚性:Cancel操作需确保完全回滚Try阶段预留的资源,通常依赖底层资源锁等机制保证数据一致性。如在金融交易中,Cancel操作要严格回滚资金冻结状态,保证资金安全。
  3. 适合短事务:由于需要在Try阶段预留资源,长时间占用资源可能影响系统并发性能,所以更适合执行时间短、对数据一致性要求高的事务。例如在线支付,整个流程短,TCC模式可保证资金流转的强一致性。

差异

  1. 事务执行方式:Saga模式是事件驱动的异步执行,子事务可并行或按顺序异步执行;TCC模式是基于两阶段的同步执行,Try、Confirm、Cancel阶段按顺序依次执行。
  2. 补偿力度:Saga模式补偿相对柔性,基于业务语义编写;TCC模式补偿相对刚性,依赖底层锁等机制确保资源回滚。
  3. 资源占用:Saga模式在执行过程中资源占用时间相对灵活,不强制一直占用;TCC模式在Try阶段就需预留资源,直到Confirm或Cancel完成才释放,长时间占用可能影响并发。

场景选择

  1. Saga模式适用场景
    • 业务流程长且复杂场景:如大型企业业务流程涉及多个部门系统交互,Saga模式能通过事件驱动异步协调各子系统事务,提高系统整体可用性。
    • 对数据一致性要求相对较低场景:如社交平台发布动态,先发布成功后再处理点赞、评论等后续事务,即使部分补偿事务失败,对用户体验影响不大。
  2. TCC模式适用场景
    • 对数据一致性要求极高场景:如银行转账,资金不能出现不一致情况,TCC模式刚性的补偿机制可保证数据准确。
    • 事务执行时间短场景:如电商秒杀活动,短时间内完成库存扣减和订单创建,TCC模式可快速完成事务处理并保证一致性。