上一题下一题

分布式事务两阶段提交中 prepare 阶段与 commit 阶段分别完成什么工作,为什么协调者故障会导致阻塞?

旗舰版
来源:alibaba高级工程师分布式事务协调者故障分布式事务两阶段提交
草稿该题目为草稿状态,前台公开题库中不可见。
答案解析

两阶段提交(2PC)中,prepare 阶段主要是让各参与者执行事务但不真正提交:参与者完成本地事务的业务校验和执行,将需要修改的数据写入日志或临时状态,持久化事务信息,并保留相关锁,确保后续具备提交条件。完成后向协调者返回 Yes;如果执行失败或资源不足,则返回 No。

commit 阶段由协调者根据所有参与者的投票结果做最终决定:如果所有参与者都返回 Yes,协调者向参与者发送 commit,参与者正式提交本地事务、释放锁和临时资源;只要有一个参与者返回 No,或者超时,协调者就发送 rollback,参与者回滚本地事务并释放资源。

协调者故障会导致阻塞,主要发生在参与者已经完成 prepare 并返回 Yes,但还没有收到协调者最终决议的情况下。此时参与者无法判断应该提交还是回滚:直接提交可能和全局回滚决定冲突,直接回滚也可能和全局提交决定冲突,所以只能保留锁和事务状态,等待协调者恢复后查询或重新下发决定。这样会导致事务长时间占用数据库连接、锁和其他资源,降低系统可用性,这也是 2PC 最大的问题之一。实际系统通常通过持久化协调者日志、

登录后查看完整内容