2PC
二阶段提交(Tow-Phase Commit)
- 阶段一:提交事务请求(投票阶段)
- 阶段二:执行事务或中断事务(执行阶段)
优点
- 原理简单,实现方便
缺点
- 同步阻塞
- 协调者单点问题
- 数据不一致(由脑裂引起)
- 过于保守
脑裂:即网络分区。指的是当网络发生异常情况,导致组成分布式系统的所有节点中,只有部分节点之间能够进行正常通信,而另一些节点则不能。
3PC
三阶段提交(Three-Phase Commit)
将2PC中的第一阶段一分为二。2PC中,“各参与者执行事务操作,并将Undo和Redo信息记入事务日志中”在阶段一中。3PC中,“各参与者执行事务操作,并将Undo和Redo信息记入事务日志中”是在阶段二中,即收到PreCommit进行的预提交事务的阶段。
- 阶段一:CanCommit:投票阶段
- 阶段二:PreCommit:预提交事务或中断事务
- 阶段三:doCommit:提交事务或中断事务
优点
- 降低了阻塞范围
- 避免了协调者单点问题
缺点
- PreCommit后的脑裂依然存在,数据不一致。
Paxos边角料
一个分布式算法有两个最重要的属性:
- 安全性(Safety):指那些需要保证永远都不会发生的事情。
- 活性(Liveness):指那些最终一定会发生的事情。
类似于两阶段提交的算法过程:
- 阶段一:Prepare和Promise
- 阶段二:Accept和Accepted
其实还有一个学习阶段,也就是一个提案要经过3RTT。
为了解决活锁问题,引入主Proposer,即Master来解决。
小结
- 二阶段提交协议解决了分布式事务的原子性问题,保证了分布式事务的多个参与者要么都执行成功,要么都执行失败。
- 三阶段提交协议在二阶段的基础上,添加了PreCommit过程,避免了二阶段协议中的无限期等待问题。
- Poxos算法引入了“过半”的理论,即少数服从多数的原则,克服了过于保守的问题;通过支持分布式节点角色之间的轮换来避免单点问题;因此,它也解决了无限期等待问题和脑裂问题。