天天看点

【分布式篇】分布式事务(3PC)

分布式系统如何保证事物(3PC,点我)
  • 第一阶段: 称为准备(prepare)阶段:
    • 协调者向所有参与者发送消息,准备提交
    • 所有参与者开始事务执行的准备工作:如:为资源上锁。
    • 如果事务的准备工作成功,则回应“可以提交”,否则回应“拒绝提交”。
  • 第二阶段: 称为提交(commit)/回滚(rollback)阶段:
    • 所有的参与者都回应“可以提交”,协调者向所有的参与者发送“正式提交”的命令。参与者完成正式提交,并释放所有资源,然后回应“完成”,协调者收集各个服务的“完成”回应后结束事务。
    • 如果有一个参与者回应“拒绝提交”协调者向所有的参与者发送“回滚操作”,并释放所有资源,然后回应“回滚完成”,取消整体的分布式事务。
  • 三阶段提交(如果问到,参与者宕机如何避免阻塞就说3PC):
    • 3PC增加了一个中间状态,方便判断事务状态,新的协调者不用等宕机者恢复 就能决定事务状态,准确的提交事务或者终止事务。
    • 新协调者如果发现存活的节点的状态是[预提交],说明各执行节点的状态肯定都是"可以提交",协调者直接提交事务,能保证数据一致性 。
    • 如果发现存活的节点状态是[能否提交]状态,说明事务被中断了,协调者继续中断事务就行。

继续阅读