从这周开始深刻学习Zookeeper,主要是看PAXOS到ZOOKEEPER分布式一致性理论与实践以及Zookeeper3.5的源码,在整个学习过程当中会整理一些学习笔记。html
1.分布式基本概念算法
2.一致性协议数据库
2PC
2PC即两阶段提交,是计算机网络尤为是在数据库领域内,为了使基于分布式系统架构下的全部节点在进行事务处理过程当中可以保持原子性和一致性而设计的一种算法。两阶段提交将事务处理过程分为投票阶段和执行阶段两个步骤,其核心是采用先尝试后提交的处理方式。两阶段提交协议将事务的提交过程分红两个阶段来进行处理,其执行流程以下:网络
阶段一:提交事务请求架构
- 事务询问。协调者向全部的事务参与者发送事务内容,询问是否能够执行事务的提交操做,并等待个参与者的响应。
- 执行事务。各参与者执行事务操做,并将Undo和Redo信息记入事务日志。
- 各参与者向协调者反馈事务响应。若是参与者成功执行了事务操做,反馈YES,表示事务能够执行;若是参与者没有成功执行事务,反馈NO,表示事务不能够执行。
阶段二:执行事务提交分布式
- 发送提交请求:协调者向全部参与节点发出Commit请求
- 事务提交参与者收到Commit请求后,执行事务提交操做,并在完成后释放占用的资源;
- 反馈提交结果:参与者在完成事务提交以后,向协调者发送ACK消息。
- 完成事务:协调者收到全部ACK后,完成事务。

- 中断事务:在第一个阶段任何一个参与者反馈了NO或者等待超时后然没法收到响应,就中断事务。
- 发送回滚请求。协调者向参与者发送RollBack请求
- 事务回滚。参与者接收到Rollback请求后,会利用Undo信息执行回滚操做,并释放占用的资源。
- 反馈事务回滚结果
- 中断事务。协调者接收到全部参与者的Ack消息后,完成事务中断。

优缺点
优势:原理简单,实现方便。学习
缺点:计算机网络
- 同步阻塞。在两阶段提交过程当中,全部参与者事务操做都处于阻塞状态,各个参与者在等待其余参与者响应。
- 单点问题。
- 数据不一致。
3PC
3PC即三阶段提交,其将二阶段提交协议的“提交事务请求”的过程一分为二,造成了CanCommit、PreCommit和DoCommit三个阶段。设计

阶段一:CanCommit日志
- 事务询问。协调者向全部参与者发送包含事务内容的canCommit请求,询问是否能够执行事务提交操做。
- 参与者向协调者反馈事务询问的响应。若是能够顺利执行反馈YES,不然反馈NO响应。
阶段二:PreCommit
该阶段协调者根据参与者的反馈决定是否能够顺利进行事务的PreCommit操做。
- 发送预提交请求。协调者向全部参与者发出preCommit请求,并进入Prepared阶段。
- 事务预提交。参与者接收到preCommit请求后执行事务操做,并将Undo和Redo信息记录到事务日志中
- 各参与者向协调者反馈事务执行的响应。若是参与者成功提交了事务操做,返回ACK,同时等待最终指令:提交(Commit)或停止(abort)。
- 协调者发送中断(abort)请求
- 参与者中断事务。(协调者发送abort或者参与者等待超时)
阶段三:doCommit
- 协调者从preCommit状态转换到“提交”状态,并向全部的参与者发送doCommit请求。
- 参与者接收到doCommit请求后,执行事务提交
- 参与者向协调者发送ACK消息。
- 协调者接收到全部参与者的反馈ACK消息后,完成事务。
- 协调者发送中断请求
- 事务回滚。
- 反馈事务回滚结果。
- 中断事务。
须要注意的是,一旦进入阶段三不论协调者出现问题仍是协调者与参与者网络之间的故障,最终都会致使参与者没法及时收到来自协调者大额doCommit或者Abort请求,针对这种异常状况,参与者在等待超时后,继续进行事务的提交。
和二阶段提交协议相比,三阶段提交协议最大的优势就是下降了参与者的阻塞返回,而且可以在出现单点故障后继续达成一致。