前言
在事务处理、关系型数据库以及计算机网络中,2阶段提交协议(2PC)、3阶段提交协议(3PC)是一种典型的原子提交协议(atomic commitment protocol)。同时,它是一种由协调器来进行管理事务提交、事务回滚的分布式算法。
2PC
协议对于事务提交,包括两个阶段
- 投票阶段或者事务提交请求阶段
该阶段,对事务接收方,协调器,发起事务提交的请求,当所有的节点返回响应为true,才进行提交阶段 - 提交阶段
当提交请求阶段成功,协调器,开始发起正式事务的提交
2PC 时序图
2PC最大的不足,是提交协议是阻塞协议,如果协调器发生故障宕机,则导致参与者无法对事务进行处理
使用2PC原则
在高并发网站中,使用分布式事务2PC协议把握以下原则
- 能不用2PC的尽量不要使用,如上所述,两个阶段,其实关键在于第三方协调器,就会考虑协调器的可用性
- 要获得事务强一致性,也要在性能和一致性做平衡策略,比如需要的时候,加上超时机制,阶段性补偿机制,类似于Paxos和之后我们将要学习的Raft或者Zookeeper采用的ZAB,采用多数服从少数的策略进行补偿。
\
3PC
3PC 分为三次交互,第一阶段,提交请求阶段,事务协调器会询问参与者是否能够提交Commit,得到肯定响应,第二阶段,进行事务预提交,都确认提交成功之后,第三阶段,进入真实的提交,成功则完成事务,失败,则发起尝试。
\
对比2PC
与2PC相比,3PC 多了个预提交阶段,增加了一个阶段,当都收到响应之后,协议约定,即使此刻,协调器发生问题,那么通过补偿机制,比如超时机制,会自动保证第三阶段一定顺利执行。
《end》