zooleeper面试题
1.ZooKeeper文件系统
Zookeeper提供一个多层级的节点命名空间(节点称为znode)。
与文件系统不同的是,这些节点都可以设置关联的数据,而文件系统中只有文件节点可以存放数据而目录节点不行。
为什么zookeper不能存储大数据(像mysql数据库那样)?
内存上: Zookeeper为了保证高吞吐和低延迟,在内存中维护了这个树状的目录结构,这种特性使得Zookeeper不能用于存放大量的数据,每个节点的存放数据上限为1M。
查询上:mysql的底层数据结构是b+树,有很好的可拓展性,查询速度也是非常的快,而zookeeper用的普通的树,如果数量很大或者树的层次结构很复杂时候则查询效率很低。
2.四种类型的znode
- 1.持久化节点
- 2.临时节点
- 3.持久化顺序节点
- 4.临时顺序节点
3.Zookeeper通知机制
ZooKeeper的watcher机制,当ZNode的发生节点删除添加的操作或者节点内容发生改变,子节点的操作等,监听的Client会收到通知,然后我们可以在程序中进行自己进行处理。
4.命名服务 (路径查询)
命名服务是指通过指定的名字来获取资源或者服务的地址,利用zk创建一个全局的路径,即是唯一的路径,这个路径就可以作为一个名字,指向集群中的集群,提供的服务的地址,或者一个远程的对象等等。
也就是我们常说的注册中心,进行服务的发布与消费,通过ZooKeeper协议进行服务的注册,将地址作为内容放到临时结点上,然后消费者可以通过ZooKeeper暴露出来的地址访问指定的服务名称获得服务的地址,
然后服务间进行通信即可,与注册中心就无关了,一旦地址发生修改,ZooKeeper也会通过Watcher机制通知消费方修改地址,而且集群环境下只需要添加多个地址,然后再消费方程序中进行负载均衡算法的实现即可;
5.机器中为什么会有leader?
在分布式环境中,有些业务逻辑只需要集群中的某一台机器进行执行,其他的机器可以共享这个结果,这样可以大大减少重复计算,提高性能,于是就需要进行leader选举。
6.zk节点宕机如何处理?
Zookeeper本身也是集群,推荐配置不少于3个服务器。Zookeeper自身也要保证当一个节点宕机时,其他节点会继续提供服务。
如果是一个Follower宕机,还有2台服务器提供访问,因为Zookeeper上的数据是有多个副本的,数据并不会丢失;
如果是一个Leader宕机,Zookeeper会选举出新的Leader。
ZK集群的机制是只要超过半数的节点正常,集群就能正常提供服务。只有在ZK节点挂得太多,只剩一半或不到一半节点能工作,集群才失效。
7.zookeeper负载均衡和nginx负载均衡区别
zookeeper
- 不存在单点问题,zab机制保证单点故障可重新选举一个leader
- 只负责服务的注册与发现,不负责转发,减少一次数据交换(消费方与服务方直接通信)
- 需要自己实现相应的负载均衡算法
nginx
- 存在单点问题,单点负载高数据量大,需要通过KeepAlived+LVS备机实现高可用
- 每次负载,都充当一次中间人转发角色,增加网络负载量(消费方与服务方间接通信)
- 自带负载均衡算法
8.zk集群保证的是强一致性,它跟rredis集群是不一样的。
zookeper:当一个主节点收到数据之后,会自动与其他几个从节点进行进行数据的通信保证数据一致性,再返回给相应的请求端(客户端)。
redis:当一个主节点收到数据之后,会从新开启一个线程与其他几个从节点进行进行数据的通信,进行数据同步。