在分布式系统中,当一个事务操作需要跨越多个分布式节点的时候,为了保持事务ACID的特征,就需要引入一个称为“协调者”(Coordinator)的组件来统一调度所有分布式节点的执行逻辑,这些被调度的节点则称为“参与者”(Participant)。协调者负责参与者的行为,并最终决定这些参与者是否要把事务真正提交。在长期的研究探索过程中,涌现了一大批经典的一致性协议和算法,其中最著名的就是二阶段、三阶段协议和paxos算法。
一、2PC
2PC是Two-Phase-Commit的缩写,即两个阶段提交。
阶段一:提交事务请求
阶段二:执行事务提交
1、执行事务提交
2、中断事务
过程示意图如下:
优缺点:
优点:原理简单,实现方便
缺点:同步阻塞、单点问题、脑裂、太过保守。
二、3PC
3PC是Three-Phase Coomit的缩写,即三阶段提交,是2PC的改进版本,其将二阶段提交协议的“提交事务请求”过程一分为二,形成了由CanCommit、PreCcommit和doCommit三个阶段组成事务处理协议。
阶段一:canCommit事务询问。
阶段二:PreCommit预提交
1、执行事务预提交
2、中断事务
阶段三:doCommit正式提交
1、执行提交
2、中断事务
过程示意图如下:
优缺点:
优点:降低参与者的阻塞范围,能够在出现单点故障后继续达成一致性。
缺点:参与者收到preCommit消息后,如果出现网络分区,此时协调者所在的节点和参与者无法进行正常的网络通信,这种情况下,该参与者以然后进行事务提交,这会导致数据的不一致性。