MST

星途 面试题库

面试题:分布式系统中常见的分布式事务模型有哪些,它们如何保障数据一致性?

请阐述如两阶段提交(2PC)、三阶段提交(3PC)以及TCC(Try - Confirm - Cancel)等常见分布式事务模型的工作原理,并分析它们在维持数据一致性方面各自的优势和局限性。
48.9万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

两阶段提交(2PC)

  1. 工作原理
    • 准备阶段(投票阶段):协调者向所有参与者发送事务内容,询问是否可以提交事务。参与者执行事务操作,但不提交,记录undo和redo日志,然后向协调者反馈是否准备好提交。
    • 提交阶段(执行阶段):如果所有参与者都反馈准备好提交,协调者发送提交指令,参与者正式提交事务;如果有任何一个参与者反馈不能提交,协调者发送回滚指令,参与者回滚事务。
  2. 优势
    • 简单易懂:实现逻辑相对清晰,在很多场景下能较好保证数据一致性。
    • 广泛应用:是一种较为经典的分布式事务处理方式,被很多数据库和中间件采用。
  3. 局限性
    • 单点故障:协调者一旦出现故障,整个分布式事务无法继续进行,可能导致事务长时间悬而不决。
    • 同步阻塞:在准备阶段到提交阶段,参与者一直处于阻塞状态,资源被占用,影响系统并发性能。
    • 数据不一致风险:在提交阶段,如果协调者发送的指令部分参与者未收到,可能导致部分提交,部分回滚,出现数据不一致。

三阶段提交(3PC)

  1. 工作原理
    • CanCommit阶段:协调者向参与者询问是否可以开始事务操作,参与者根据自身状态回复是否可以。
    • PreCommit阶段:若所有参与者都回复可以,协调者向参与者发送预提交指令,参与者执行事务操作,记录日志,但不提交。然后向协调者反馈是否预提交成功。
    • DoCommit阶段:如果所有参与者预提交成功,协调者发送提交指令,参与者正式提交事务;若有参与者预提交失败,协调者发送回滚指令,参与者回滚事务。
  2. 优势
    • 减少单点故障影响:引入了预提交阶段,在协调者故障恢复后,可根据预提交状态继续执行事务,一定程度减少了事务悬而不决的时间。
    • 降低同步阻塞:相比2PC,在CanCommit阶段参与者可以正常处理其他请求,减少了阻塞时间,提高系统并发性能。
  3. 局限性
    • 依然存在不一致风险:虽然概率降低,但在网络分区等极端情况下,还是可能出现数据不一致。
    • 实现复杂:相比2PC,增加了一个阶段,实现和维护成本更高。

TCC(Try - Confirm - Cancel)

  1. 工作原理
    • Try阶段:主要是对业务系统做检测及资源预留,不做真正的业务操作。例如在转账场景中,冻结账户金额。
    • Confirm阶段:在Try成功后,执行真正的业务操作,如转账场景中,完成账户间资金转移。
    • Cancel阶段:若Try成功但Confirm失败,执行回滚操作,如解冻之前冻结的金额。
  2. 优势
    • 性能较好:不需要长时间锁定资源,允许并发执行,提高系统性能。
    • 灵活性高:业务开发人员可根据具体业务逻辑实现Try、Confirm和Cancel操作,适合复杂业务场景。
  3. 局限性
    • 开发成本高:每个业务操作都需要实现Try、Confirm和Cancel三个接口,对开发人员要求较高。
    • 数据一致性依赖业务实现:如果Cancel实现不当,或者在Confirm和Cancel之间出现网络问题,可能导致数据不一致。