三阶段提交协议

三阶段提交协议

三阶段提交协议是两阶段提交协议的改进版本。它通过超时机制解 决了阻塞的问题,并且把两个阶段增加为以下三个阶段。  询问阶段:协调者询问参与者是否可以完成指令,参与者只需要 回答是或不是,而不需要做真正的操作,这个阶段超时会导致中止。  准备阶段:如果在询问阶段所有参与者都返回可以执行操作,则 协调者向参与者发送预执行请求,然后参与者写redo和undo日志,执行 操作但是不提交操作;如果在询问阶段任意参与者返回不能执行操作的 结果,则协调者向参与者发送中止请求,这里的逻辑与两阶段提交协议 的准备阶段是相似的。  提交阶段:如果每个参与者在准备阶段返回准备成功,也就是说 预留资源和执行操作成功,则协调者向参与者发起提交指令,参与者提 交资源变更的事务,释放锁定的资源;如果任何参与者返回准备失败, 也就是说预留资源或者执行操作失败,则协调者向参与者发起中止指 令,参与者取消已经变更的事务,执行 undo 日志,释放锁定的资源, 这里的逻辑与两阶段提交协议的提交阶段一致。

三阶段提交协议与两阶段提交协议主要有以下两个不同点。 · 增加了一个询问阶段,询问阶段可以确保尽可能早地发现无法执行操作而需要中止的行为,但是它并不能发现所有这种行为,只会减少 这种情况的发生。 · 在准备阶段以后,协调者和参与者执行的任务中都增加了超时, 一旦超时,则协调者和参与者都会继续提交事务,默认为成功,这也是 根据概率统计超时后默认为成功的正确性最大。 三阶段提交协议与两阶段提交协议相比,具有如上优点,但是一旦 发生超时,系统仍然会发生不一致,只不过这种情况很少见,好处是至 少不会阻塞和永远锁定资源。

posted @ 2021-04-20 09:37  delphi中间件  阅读(195)  评论(0编辑  收藏  举报