聊一聊Zookeeper

zookeeper是一个分布式协调服务框架,是用来解决分布式集群的应用程序一致性问题,提供了类似于文件系统的目录树形式的数据存储,并且可以对树中的节点进行管理,从而用来监控和维护我们存储的数据的状态变化,从而实现基于数据的集群管理
zookeeper的每一个节点被称为znode,具有文件和目录两种特点,具有原子性操作,节点中的存储大小有限制,最大为1M,并且是通过路径引用的,路径必须是绝对的,每个znode分为三部分,stat:状态信息,描述znode 的版本,权限等信息,data:与该znode关联的数据,children:该znode下的子节点,znode有两种,分别为临时节点和永久节点,临时节点不允许有子节点,并且生命周期依赖于他们的会话,当前会话结束,临时节点就会自动删除,当然也可以手动删除,永久节点不依赖于当前会话,只有在客户端执行删除操作的时候才会删除,znode还有一个序列化的特征,在创建的时候指定的话会在znode的名字后面自动添加一个自增的序列号,记录每个子节点创建的先后顺序,所以创建znode有四种类型,永久节点,永久序列化节点,临时节点,临时序列化节点.
zookeeper集群会通过选举机制选举出leader,其他作为follower,leader是集群工作的核心,是事务性请求也就是写操作的唯一调度和处理者,保证集群事物处理的顺序性,也可以处理非事物性请求是集群内部各个服务器的调度者,follower负责非事物性请求并将事务性请求转发给leader,参与集群中leader的选举,此外针对访问量比较大的zookeeper集群,还可以设置观察者observer,observer观测zookeeper集群的最新状态变化并将这些状态同步过来,可以独立处理非事物性请求,对于事物性请求则转发给leader,不参与集群中的任何投票,在不影响集群事务性处理能力的前提下,增加集群的非事物性处理能力.
zookeeper的特点有全局一致性,每个server中保存一份相同的数据副本,client不管连接哪一个server,得到的数据都是相同的,这是最重要的特性,通过Paxos算法保证每个server内的数据完全一致,Paxos是通过投票机制,全局编号机制使同一时刻只有一个写操作被批准,同时并发的写操作要去争取选票,只有获得半数选票的写操作才会被批准,所以永远只有一个写操作得到批准,竞争失败的写操作只能再发起一轮投票,其他的特性还有,顺序性,数据更新原子性,可靠性,实时性
zookeeper还提供了分布式的数据发布订阅功能,通过引入watcher机制来实现这种分布式的通知功能,watcher可以概括成三个过程:客户端向服务端注册watcher,服务端事件发生触发watcher,客户端回调watcher得到触发事件情况,watch机制的特点是一次性触发,事件封装,event异步发送,先注册再触发.
zookeeper的核心原理是原子广播机制,这个机制保证了各个server之间的同步,实现这个机制的协议叫Zab协议,Zab协议有两种模式分别是恢复模式和广播模式.

你可能感兴趣的:(zookeeper,面试,zookeeper,面试)