原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11484077.html
2PC
是计算机网络尤其是在数据库领域内,为了使基于分布式系统架构下的所有节点在进行事务处理过程中能够保持原子性和一致性而设计的算法。
协议说明
2PC是将事务的提交过程分成了两个阶段进行处理
阶段一:提交事务请求(投票阶段)
阶段二:执行事务提交(执行阶段)
在阶段二中,协调者会根据参与者的反馈情况来决定最终是否可以进行事务提交操作,正常情况下,包含以下两种可能
- 执行事务提交
- 中断事务
简单来说,2PC将一个事务的处理过程分为投票和执行两个阶段,其核心是对每个事务都采用先尝试后提交的处理方式,因此可以将2PC看作是一个强一致性的算法。
优缺点
2PC优点:原理简单,实现方便
2PC缺点:同步阻塞、单点问题、脑裂、太过保守
3PC
是2PC的改进版,其将二阶段提交协议的“提交事务请求”过程一分为二,形成了由canCommit、preCommit、 doCommit 三个阶段组成的事务处理协议
协议说明
阶段一:canCommit
阶段二:preCommit
在阶段二中,协调者会根据各参与者的反馈情况来决定是否可以进行事务的preCommit操作,正常情况下,包含两种可能
- 执行事务预提交
- 中断事务
阶段三:doCommit
在阶段三中,将进行真正的事务提交,会存在以下两种可能的情况。
- 执行提交
- 中断事务
需要注意的是,一旦进入阶段三,可能会存在以下两种故障。
协调者出现问题
协调者和参与者之间的的网络出现故障
无论出现哪种情况,最终都会导致参与者无法及时接收到来自协调者的doCommit或是abort请求,针对这样的异常情况,参与者都会在等待超时之后,继续进行事务提交。
优缺点
3PC优点:相较于2PC,3PC最大的优点就是降低来参与者的阻塞范围,并且能够在出现单点故障后继续达成一致。
3PC缺点:3PC在去除网络阻塞的同时也引入了新的问题,那就是在参与者接收到preCommit消息后,如果网络出现分区,此时协调者所在的节点和参与者无法进行正常的通信,在这种情况下,该参与者依然会进行事务的提交,这必然出现数据的不一致。