一致性协议
第二章主要讲的是一致性协议,主要包含以下内容:
- 2PC
- 3PC
- Paxos算法
2PC
2PC,即二阶段提交,为了使基于分布式架构下的所有节点在进行事务处理过程中能保持原子性和一致性的算法,是将事务的提交过程分为了两个阶段来进行处理。
阶段一:提交事务请求
- 事务询问
- 执行事务(Undo和Redo信息记入事务日志)
- 各参与者向协调者反馈事务询问的响应
阶段二:执行事务提交
当协调者从各参与者获取的反馈都是Yes响应,则会执行事务提交。
执行事务提交
- 发送提交请求(协调者向所有参与者节点发出Commit请求)
- 事务提交
- 反馈事务提交
若任何一个参与者向协调者反馈No响应,或者等待超时后,协调者仍无法接受所有参与者的反馈,则会中断事务。
中断事务
- 发送回滚请求
- 事务回滚
- 反馈事务回滚结果
- 中断事务
总结:
两阶段提交就是将事务的处理过程分为了投票和执行,核心是对每个事务都采用先尝试后提交的处理方式,可以看作一个强一致性的算法。
优点:原理简单,实现方便
缺点:同步阻塞、单点问题、脑裂(数据不一致)、太过保守
3PC
3PC,即三阶段提交,由CanCommit、PreCommit、doCommit三个阶段组成。
阶段一:CanCommit
- 事务询问
- 各参与者向协调者反馈事务询问的响应
阶段二:PreCommit
当协调者从各参与者获取的反馈都是Yes响应,则会执行事务预提交。
执行事务预提交
- 发送预提交请求
- 事务预提交
- 各参与者向协调者反馈事务询问的响应
若任何一个参与者向协调者反馈No响应,或者等待超时后,协调者仍无法接受所有参与者的反馈,则会中断事务。
中断事务
- 发送中断请求(协调者向所有参与者节点发出Rollback请求)
- 中断事务
阶段三:doCommit
分为两种情况
执行提交
- 发送提交请求
- 事务提交
- 反馈事务提交结果
- 完成事务
中断事务
- 发送中断请求(协调者向所有参与者节点发出abort请求)
- 事务回滚
- 反馈事务回滚结果
- 中断事务
优点:降低阻塞范围、单点故障后保持一致性
缺点:网络分区时,无法正常网络通信,参与者依然会进行事务提交,导致数据的不一致性
Paxos算法
Paxos算法是一种基于消息传递且具有高度容错性的一致性算法。
在一致性算法中,有三种参与角色,分别为 Proposer、Acceptor、Learner。
通过选取主 Proposer 保证算法的活性
为了解决两个 Proposer 分别生成提案后陷入死循环,选择一个主 Proposer,并规定只有主 Proposer 才能提出议案,那么主 Proposer 提出一个编号更高的提案时,肯定会被批准。