MST

星途 面试题库

面试题:分布式系统中分布式事务一致性解决方案之2PC

请简述二阶段提交(2PC)协议在分布式事务一致性中的工作原理,以及它存在哪些局限性?
30.3万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

二阶段提交(2PC)协议工作原理

  1. 第一阶段:准备阶段(投票阶段)
    • 协调者向所有参与者发送事务内容,询问是否可以执行事务提交操作,并等待各参与者的响应。
    • 参与者接收到请求后,会执行事务操作,并将Undo和Redo信息记录到事务日志中,但不真正提交事务。
    • 然后参与者向协调者反馈事务执行的结果,如果事务执行成功,反馈“同意”;如果事务执行失败,反馈“中止”。
  2. 第二阶段:提交阶段(执行阶段)
    • 情况一:所有参与者都反馈“同意”
      • 协调者接收到所有参与者的“同意”反馈后,向所有参与者发送“提交”指令。
      • 参与者接收到“提交”指令后,正式提交事务,完成数据持久化,并释放事务处理过程中占用的资源。
    • 情况二:有任何一个参与者反馈“中止”或者等待超时
      • 协调者向所有参与者发送“回滚”指令。
      • 参与者接收到“回滚”指令后,利用之前记录的Undo信息回滚事务,撤销之前执行的操作,并释放资源。

二阶段提交(2PC)协议局限性

  1. 单点故障问题
    • 协调者是整个2PC协议的核心,如果协调者发生故障,整个分布式事务无法继续进行。例如,在准备阶段协调者故障,参与者会一直等待协调者的后续指令,造成资源浪费和事务阻塞。在提交阶段协调者故障,部分参与者可能已经提交事务,而部分可能还未收到提交指令,导致数据不一致。
  2. 同步阻塞问题
    • 在整个2PC过程中,参与者在等待协调者指令期间,会锁定资源并处于阻塞状态。比如在准备阶段,参与者执行完事务操作后,一直等待协调者的提交或回滚指令,期间无法处理其他事务,这会严重影响系统的并发性能。
  3. 数据不一致问题
    • 当协调者向参与者发送提交指令后,部分参与者成功提交事务,而另一部分由于网络问题等未收到指令未能提交,就会出现数据不一致。例如,在一个分布式转账场景中,A账户扣款成功提交事务,而B账户收款却因未收到提交指令未完成入账,导致数据不一致。
  4. 性能问题
    • 2PC协议需要协调者与参与者之间多次交互,网络开销较大。同时,由于同步阻塞的存在,在高并发场景下,系统整体性能会受到严重影响。比如在电商的高并发订单处理场景中,大量事务因2PC的同步阻塞和网络交互开销,导致响应时间变长,用户体验变差。