三阶段提交做了哪些改进?

为了解决二阶段协议中的同步阻塞等问题,三阶段提交协议在协调者和参与者中都引入了超时机制。

并且把两阶段提交协议的第一个阶段拆分成了两步:

  • 询问,然后再锁资源,最后真正提交。

三阶段中的 Three Phase 分别为 CanCommit、PreCommit、DoCommit 阶段。

image-20231012155323587

引入超时机制:

在 2PC 中,只有协调者拥有超时机制,如果在一定时间内没有收到参与者的消息则默认失败。

3PC 同时在协调者和参与者中都引入超时机制。

添加预提交阶段:

在 2PC 的准备阶段和提交阶段之间,插入一个准备阶段,使 3PC 拥有 CanCommit、PreCommit、DoCommit 三个阶段。

PreCommit 是一个缓冲,保证了在最后提交阶段之前各参与节点的状态是一致的。

三阶段提交协议存在的问题

在阶段三中,如果参与者接收到了 PreCommit 消息后,出现了不能与协调者正常通信的问题。

在这种情况下,参与者依然会进行事务的提交,这就出现了数据的不一致性。