尚硅谷笔记
paxos算法paxos算法:基于消息传递且具有高度容错性的一 种算法,是目前公认的解决分布式-致性问题最有效的算法
解决问题:在分布式系统中,如果产生宕机或者网络异常情况,快速的正确的在集群内部对某个数据的值达成-致,并且不管发生任何异常,都不会破坏整个系的一致性
重要概念:半数原则:少数服从多数
三个核心选举原则:
(1) zookeeper集群中只有超过了半数以上的服务器启动,集群才能正常工作
(2)在集群正常工作之前,myid小的服务器会给myid大的服务器进行投票,持续到集群正常 工作,选出leader
(3)选择leader之 后,之前的服务器状态由looking改变为following,以后的服务器都是follower
简单例子来介绍整个选举过程:
假设现在有五台服务器,组成了zookeeper集群,五台服务器它们的myid从1-5,而且它们都是最新启动,没有历史数据。
假设服务器启动从id 1-5的顺序启动
因为一共五台服务器,只有超过半数以上,也就是最少启动三台服务器,集群才能正常工作。
当服务启动或领导崩溃后,zk进入恢复状态,选举leader,leader选出后,将完成leader和其他机
器的数据同步,当大多数server完成和leader的同步后,恢复模式结束
一旦进入广播模式,集群中非leader节点接受到事务请求,首先会将事务请求转发给服务器,leader服务器为其生成对应的事务提案proposal,并发送给集群中其他节点,如果过半则事务提交;
图:
- leader 接受到消息后,消息通过全局唯一的64位自增事务id,zxid标识
- leader 发送给follower的提案是有序的,leader会创建一个FIFO队列,将提案顺序写入队列中发送给follower
- follower 接受到提案后,会比较提案zxid和本地事务日志最大的zxid,若提案zxid比本地事务id大,将提案记录到本地日志中,反馈ack给leader,否则拒绝
- leader 接收到过半ack后,leader向所有的follower发送commit,通知每个follower执行本地事务



