三阶段提交做了哪些改进?
三阶段提交做了哪些改进?
月伴飞鱼为了解决二阶段协议中的同步阻塞等问题,三阶段提交协议在协调者和参与者中都引入了超时机制。
并且把两阶段提交协议的第一个阶段拆分成了两步:
- 询问,然后再锁资源,最后真正提交。
三阶段中的 Three Phase 分别为 CanCommit、PreCommit、DoCommit 阶段。
引入超时机制:
在 2PC 中,只有协调者拥有超时机制,如果在一定时间内没有收到参与者的消息则默认失败。
3PC 同时在协调者和参与者中都引入超时机制。
添加预提交阶段:
在 2PC 的准备阶段和提交阶段之间,插入一个准备阶段,使 3PC 拥有 CanCommit、PreCommit、DoCommit 三个阶段。
PreCommit 是一个缓冲,保证了在最后提交阶段之前各参与节点的状态是一致的。
三阶段提交协议存在的问题
在阶段三中,如果参与者接收到了 PreCommit 消息后,出现了不能与协调者正常通信的问题。
在这种情况下,参与者依然会进行事务的提交,这就出现了数据的不一致性。