2PC(Two-Phase Commit)
- 阶段一:提交事务请求(准备阶段)
- 阶段二:执行事务提交(执行阶段)
- 优点:原理简单,实现方便
- 缺点:同步阻塞,协调者单点问题,脑裂,太过保守
3PC(Three-Phase Commit)
- 将二阶段提交协议的“提交事务请求”过程一分为二,形成了由CanCommit、PreCommit、doCommit三个阶段组成的事务处理协议
- 优缺点:相对于2PC,3PC对于协调者(Coordinator)和参与者(Partcipant)都设置了超时时间,而2PC只有协调者才拥有超时机制。3PC主要解决了协调者宕机之后事务阻塞的问题,因为一旦参与者无法及时收到来自协调者的信息之后,他会默认执行commit。而不会一直持有事务资源并处于阻塞状态。缓解了同步阻塞,协调者单点问题,但是这种机制也会导致数据一致性问题
Paxos算法
Paxos算法是分布式一致性算法用来解决一个分布式系统如何就某个值(决议)达成一致的问题。一般用来解决选举问题
- Proposer(投票发起者):Proposer负责提出提案
- Acceptor(投票接受者):Acceptor负责对提案作出裁决(accept与否)
- Learner(节点学习者):learner负责学习提案结果
Paxos算法类似于两阶段提提交,其算法执行过程分为两个阶段。具体如下:
- 阶段一(prepare阶段):
- Proposer选择一个提案编号N,然后向半数以上的Acceptor发送编号为N的Prepare请求:Proposal(N)。
- 如果一个Acceptor收到一个编号为N的Prepare请求:
- 若小于它已经响应过的请求,则拒绝,不回应或回复error。
- 若N大于该Acceptor已经响应过的所有Prepare请求的编号(maxN),那么它就会将它已经接受过的编号最大的提案作为响应反馈给Proposer,同时该Acceptor承诺不再接受任何编号小于N的提案。
- 如果还没有的accept提案的话返回{pok,null,null}
- 阶段二(accept阶段):
- 如果一个Proposer收到半数以上Acceptor对其发出的编号为N的Prepare请求的响应,那么它就会发送一个针对[N,V]提案的Accept请求给半数以上的Acceptor。注意:V就是收到的响应中编号最大的提案的value,如果响应中不包含任何提案,那么V就由Proposer自己决定。
- 如果Acceptor收到一个针对编号为N的提案的Accept请求,只要该Acceptor没有对编号大于N的Prepare请求做出过响应,它就接受该提案。
- 如果N小于Acceptor以及响应的prepare请求,则拒绝,不回应或回复error(当proposer没有收到过半的回应,那么他会重新进入第一阶段,递增提案号,重新提出prepare请求)。
Learner学习被选定的value
- Acceptor可以将批准的提案发送给一个主Learner集合,该集合中每个Learner都可以在一个提案被选定后通知其他的Learner。这个Learner集合中的Learner个 数越多,可靠性就越好,但同时网络通信的复杂度也就越高