两阶段提交和三阶段提交

566 阅读2分钟

2PC和3PC是分布式事务中的概念。

2PC

  1. 投票阶段,唯一的协调执行并发起提案,其余的参与者执行提案,并回复协调者执行结果,这一阶段协调者和参与者都没有提交提案。
  2. 执行阶段,如果所有参与者通过,则协调者执行提案并向所有参与者发送Commit消息,参与者收到Commit消息后执行提案。如果有参与者不通过,则协调者回滚提案,并向所有参与者发送Rollback消息,参与者收到Rollback消息后中止提案。

缺点

  1. 同步阻塞,全局提交前,协调者和参与者会锁住相应资源(可以为协调者引入超时机制来解决)。
  2. 单点故障,协调者故障,会导致其余参与者阻塞,即使有选主机制也无法规避这个问题,因为新的协调者诞生后无法继续之前的提案(可以把协调者单点变集群来解决)。
  3. 数据不一致,可能部分参与者未收到Commit消息(无法解决)。

3PC

  1. CanCommit,如果参与者可以获取相应资源的锁,则同意,否则不同意。
  2. PreCommit,如果CanCommit阶段所有参与者通过,则进入PreCommit阶段,和2PC的投票阶段一样,区别在于3PC中为协调者和参与者引入了超时机制。
  3. DoCommit,如果PreCommit阶段所有参与者通过,则进入DoCommit阶段,和2PC的执行阶段一样。

CanCommit的作用主要是为了提高PreCommit的通过率,而为参与者引入超时则是为了进一步缓解同步阻塞问题,但3PC依旧是无法解决数据不一致问题的。