Zookeeper的学习整理

1、zookeeper是什么:

Zookeeper是一个开源的分布式协调服务,是Google Chubby的开源实现。Zookeeper的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用,是一个典型的分布式数据一致性的解决方案。

2、实际运用:  

数据发布/订阅、负载均衡、命名服务、分布式锁、分布式队列、分布式协调/通知、集群管理、Master选举等。

3、zookeeper的实现原理:

https://blog.csdn.net/suchahaerkang/article/details/84141770

其一致性核心算法为:Zookeeper Atomic Broadcast(ZAB原子消息广播协议),定义了那些会改变ZooKeeper服务器数据状态的事务请求的处理方式:所有事物请求必须由全局唯一的服务器来协调处理(Leader),而余下的服务器即为Follwer服务器。Leader负责将一个客户事务请求转换成一个Proposal(提议),并将提议发送给集群中所有的Follwer服务器。待超半数的Follwer进行了正确的反馈之后,那么Leader就会再次向所有Follwer发送commit消息,将Proposal进行提交。

ZAB包含两种基本模式:

(1)、崩溃恢复:

当整个框架在启动中,或者当Leader服务器出现网络中断、崩溃退出与重启等异常情况时,ZAB协议就会进入恢复模式并且选举产生新的Leader。当集群中已有过半的服务器与该Leader完成了状态同步之后,ZAB就会退出恢复模式。

崩溃过程中,需要确保已经被Leader提交的Proposal也能够被所有的Follwer提交,恢复过程中要丢弃那些只在Leader上被提出的Proposal。为了实现上述做法,ZAB直接将选举出来的Leader服务器为拥有集群中最大ZXID的事务Poposal的服务器,这样就可以保证新选出来的Leader一定具有最新的提案,同时省去Leader服务器检查Proposal提交和丢弃工作这一步操作了。

(2)、消息广播:

基于具有FIFO特性的TCP协议来进行网络通信的,以保持广播消息中的顺序性。

在整个过程中,Leader服务器会为每个事务请求生成对应的Proposal,并为这个Proposal生成一个全局递增的唯一ID(ZXID),每个事务的Proposal按照其ZXID的先后顺序来进行排序与处理。具体的,Leader服务器在消息广播过程中,会为每个Follwer各自分配一个单独的队列,然后将需要广播的Proposal依次放入这些队列中去,并根据FIFO的策略进行消息发送。当每个Follwer接收到这个事务Proposal之后,先会以事务日志的形式写入到本地磁盘中,在写入成功后,返回ACK响应给Leader。Leader收到过半数Follwer的Ack响应之后,会广播一个commit消息给所有的Follwer服务器通知进行事务提交。Follwer在收到提交的消息后,对事务进行提交,完成事务commit。

涉及到的知识点:

ZXID:是一个64位的数字,低32位可以看作是一个简单的单调计数器,针对每个客户端的请求,Leader服务器在产生一个新的事务Proposal的时候,都会对该计数器进行加1操作;高32位表示Leader周期的epoch编号。每当选举产生一个新的Leader服务器,就会从这个Leader服务器上取出其本地日志中最大事务Proposal的ZXID,并从此ZXID解析出epoch值,然后加1成为新的epoch,并将低32位置0来开始生成新的ZXID。

Quorum机制模型:https://blog.csdn.net/tb3039450/article/details/80249664

 

ZAB与Paxos算法的联系与区别

ZAB协议并不是Paxos算法的一个典型实现,在讲解ZAB和Paxos之间的区别之前,我们首先来看下两者的联系。

  • 两者都存在一个类似于Leader进程的角色,由其负责协调多个Follow进程的运行。
  • Leader进程都会等待超过半数的Follower做出正确的反馈后,才会将一个提案进行提交。
  • 在ZAB协议中,每个Proposal中都包含了一个epoch值,用来代表当前Leader周期,在Paxos算法中,同样存在这样一个标识,只是名字变成了Ballot。

        在Paxos算法中,一个新选举产生的主进程会进行两个阶段的工作。第一阶段被称为读阶段,在这个阶段中,这个新的主进程会通过和所有其他进程进行通信的方式来收集上一个主进程的提案,并将他们提交。第二阶段被称为写阶段,在这个阶段,当前主进程开始提出他自己的提案。在Paxos算法设计的基础上,ZAB协议额外添加了一个同步阶段。在同步阶段之前,ZAB协议也存在一个和Paxos算法中的读阶段非常类似的过程,称为发现(Discovery)阶段。在同步阶段中,新的Leader会确保存在过半的Follower已经提交了之前Leader周期中的所有事务Proposal。这一同步阶段的引入,能够有效地保证Leader在新的周期中提出事务Proposal之前,所有的进程都已经完成了对之前所有事务Proposal的提交。一旦完成同步阶段后,那么ZAB就会执行和Paxos算法类似的写阶段。

        总的来讲,ZAB协议和Paxos算法的本质区别在于,两者的设计目标不太一样。ZAB协议主要用于构建一个高可用的分布式数据主备系统,例如ZooKeeper,而Paxos算法则是用于构建一个分布式的一致性状态机系统。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值