MST

星途 面试题库

面试题:分布式系统里3PC协议与2PC协议的深度对比及应用场景选择

详细对比3PC协议与2PC(两阶段提交)协议在核心机制、优缺点方面的差异。并举例说明在不同业务需求下,如何选择合适的协议应用于分布式系统场景。
28.5万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

核心机制差异

  • 2PC(两阶段提交)
    • 第一阶段 - 投票阶段:协调者向所有参与者发送事务内容,询问是否可以提交事务,参与者检查自身能否执行事务操作,并反馈“是”或“否”。
    • 第二阶段 - 提交阶段:若所有参与者都返回“是”,协调者向所有参与者发送提交指令,参与者执行提交操作;若有任何一个参与者返回“否”,协调者向所有参与者发送回滚指令,参与者执行回滚操作。
  • 3PC(三阶段提交)
    • 第一阶段 - 询问阶段:协调者向参与者发送包含事务内容的询问,询问是否可以执行事务操作,参与者检查自身能否执行事务,并反馈“可以”或“不可以”。
    • 第二阶段 - 预提交阶段:若所有参与者都反馈“可以”,协调者向所有参与者发送预提交指令,参与者执行事务操作但不提交,而是将 undo 和 redo 信息记录到日志中;若有参与者反馈“不可以”,协调者向所有参与者发送中断指令,参与者放弃事务。
    • 第三阶段 - 提交阶段:协调者等待一段超时时间后,若没有收到任何参与者的中断请求,向所有参与者发送提交指令,参与者正式提交事务;若收到中断请求或超时,向所有参与者发送回滚指令,参与者回滚事务。

优缺点差异

  • 2PC优点
    • 简单易实现:逻辑相对清晰,在很多场景下能够满足基本的分布式事务一致性需求。
    • 广泛应用:由于其简单性,在早期分布式系统中应用广泛。
  • 2PC缺点
    • 单点故障问题:协调者出现故障,整个事务可能悬而不决,参与者会一直阻塞等待。
    • 同步阻塞:在整个事务过程中,参与者一直处于阻塞状态,直到收到最终的提交或回滚指令,这期间无法处理其他事务,严重影响系统性能。
    • 数据不一致风险:在第二阶段,如果协调者发出提交指令后,部分参与者收到指令并提交,而部分未收到(网络问题等),就会导致数据不一致。
  • 3PC优点
    • 降低单点故障影响:3PC 的引入预提交阶段,使得协调者故障后,参与者可以根据自身状态决定下一步操作,一定程度上缓解了单点故障问题。
    • 减少同步阻塞:预提交阶段后,参与者可以在等待最终提交指令时处理其他事务,减少了阻塞时间。
    • 数据一致性提升:通过引入超时机制和三阶段流程,降低了数据不一致的风险。
  • 3PC缺点
    • 性能开销大:增加了一个阶段,使得事务处理的时间变长,网络通信次数增多,性能开销增大。
    • 实现复杂:相比2PC,3PC的实现逻辑更加复杂,对系统的开发和维护带来更高的要求。

不同业务需求下的协议选择

  • 对一致性要求极高,性能要求相对不敏感
    • 场景举例:银行转账业务,涉及资金的准确性和一致性,不容许出现数据不一致的情况。
    • 协议选择:3PC 协议更合适,虽然其性能开销较大,但能最大程度保证数据一致性,减少因数据不一致带来的严重后果。
  • 对性能要求较高,一致性要求相对宽松(允许短暂不一致,但最终要一致)
    • 场景举例:电商系统的订单处理,允许在短时间内订单状态在不同节点有差异,但最终要达成一致。
    • 协议选择:2PC 协议相对合适,其简单易实现,性能开销相对较小,能在满足业务最终一致性的前提下,提高系统的处理性能。