合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
>[info] 3PC-三阶段提交 三阶段提交又称**3PC**,其在两阶段提交的基础上**增加了CanCommit阶段**,并**引入了超时机制**。一旦事务参与者迟迟没有收到协调者的Commit请求,就会自动进行本地commit,这样相对有效地解决了协调者单点故障的问题。 ![](https://img.kancloud.cn/ea/3f/ea3f011e47cfa60da8eac45eed65eb5f_892x960.png) ***** 在阶段一中,如果所有的参与者都返回Yes的话,那么就会进入PreCommit阶段进行事务预提交。此时分布式事务协调者会向所有的参与者节点发送PreCommit请求,参与者收到后开始执行事务操作,并将Undo和Redo信息记录到事务日志中。参与者执行完事务操作后(此时属于未提交事务的状态),就会向协调者反馈“Ack”表示我已经准备好提交了,并等待协调者的下一步指令。 ***** 否则,如果阶段一中有任何一个参与者节点返回的结果是No响应,或者协调者在等待参与者节点反馈的过程中超时(**2PC中只有协调者可以超时,参与者没有超时机制)**。整个分布式事务就会中断,协调者就会向所有的参与者发送**“abort”**请求。 ***** 相比较2PC而言,3PC对于协调者(**Coordinator**)和参与者(**Partcipant**)都设置了超时时间,而2PC只有协调者才拥有超时机制。这解决了一个什么问题呢?这个优化点,主要是避免了参与者在长时间无法与协调者节点通讯(协调者挂掉了)的情况下,无法释放资源的问题,因为参与者自身拥有超时机制会在超时后,自动进行本地commit从而进行释放资源。而这种机制也侧面降低了整个事务的阻塞时间和范围。 ***** 另外,通过**CanCommit、PreCommit、DoCommit**三个阶段的设计,相较于2PC而言,多设置了一个**缓冲阶段**保证了在最后提交阶段之前各参与节点的状态是一致的。 ***** 以上就是3PC相对于2PC的一个提高(相对缓解了2PC中的前两个问题),但是3PC依然没有完全解决数据不一致的问题。