0
点赞
收藏
分享

微信扫一扫

三阶段提交(3PC)

三阶段提交(3PC)

image-20230711153424333 三阶段提交是相对于两阶段提交而言的一种改进。它通过引入一个准备确认(Prepared/CanCommit)状态来解决两个问题:单点故障长时间运行时性能下降

与两阶段提交类似,三阶段提交也由一个协调者和多个参与者组成。但是,在第二个“准备”步骤之后,它引入了一个新的“预写日志”机制,并在最终“决策”步骤中使用该日志来处理可能发生的超时或失败情况。

三个关键步骤

步骤一:CanCommit - 准备确认

  • 协调者向所有参与者发送准备请求。
  • 参与者执行本地验证并返回结果给协调者。
  • 如果所有参与者都成功,则进入下一步;否则回滚整个事务。

步骤二:PreCommit - 预写日志

  • 协调者生成一个唯一的全局事务ID,并将该ID和操作类型(commit/rollback)记录在预写日志中。
  • 协调者向所有参与者发送预提交请求。
  • 参与者接收到请求后,会进行实际的数据修改或准备工作,并将其结果记录在本地日志中。

步骤三:DoCommit - 决策

  • 协调者根据参与者的响应情况做出最终决策。
    • 如果所有参与者都已经成功预提交,则协调者发送确认提交请求给所有参与者,完成整个事务。
    • 如果任何一个参与者失败或超时,则协调者发送回滚请求给所有参与者,取消整个事务。
举报

相关推荐

0 条评论