分布式事务-3pc(three-phase commit)

3pc (三阶段提交协议)

https://en.wikipedia.org/wiki/Three-phase_commit_protocol

 关于三阶段提交,对于2pc(two-phase commit)由于其存在一定的缺陷点存在于在 2pc 中 commit phase 阶段 对于 协调者和参与者可能存在 事务操作失败的情况,而在该阶段的失败并不能触发协调者和参与者都按照失败的流程进行相应的操作回滚;因此就失去了事务相关的特性(ACID);

因此为了解决该问题,避免在 commit phase 阶段出现问题无法保证事务的原子性,因此其利用pre=commit 操作来 判断 协调者或任意参与者可能发生事务操作中阻塞的问题,只要任意一个节点(无论协调者还是参与者)在预执行阶段出现问题,则直接终止整个流程(fail-fast的思想),避免了可能出现的事务问题

 

但其也存在一定的性能浪费,由于需要 pre-commit 预先校验判断是否所有节点都可用,因此存在一定的性能损耗,增加了 协调者 和 参与者的通信次数;

 

关于 2pc 和 3pc 流程区别点

其区别点就在于 增加了一个前置流程(pre-commit phase),通过提前判断节点是否发生过crash 导致 commit-phase失败 的情况; 如果在pre-commit phase阶段 判断之前存在节点出现过crash 的情况,此时该结果会反馈给协调者,协调者会终止整个流程避免出现事务问题;

对于pre-commit 响应全部通过后续的阶段 和 2pc 就完全一致了

上一篇:three.js 元素跟随物体效果


下一篇:如何理解java枚举