• 用途跟功能不是一个意思咩?给我一个眼神,让我自己体会ZooKeeper的十二连问,你顶得了嘛?-LMLPHP

    2. 面试官:说下什么是命名服务,什么是配置管理,又什么是集群管理吧

    小菜鸡的我(幸好我刷过面试题),无所畏惧ZooKeeper的十二连问,你顶得了嘛?-LMLPHP

    3. 面试官:你提到了znode节点,那你知道znode有几种类型呢?zookeeper的数据模型是怎样的呢?

    小菜鸡的我(我先想想):

    zookeeper的数据模型

    ZooKeeper的视图数据结构,很像Unix文件系统,也是树状的,这样可以确定每个路径都是唯一的。zookeeper的节点统一叫做znode,它是可以通过路径来标识,结构图如下:ZooKeeper的十二连问,你顶得了嘛?-LMLPHP

    znode的4种类型

    根据节点的生命周期,znode可以分为4种类型,分别是持久节点(PERSISTENT)、持久顺序节点(PERSISTENT_SEQUENTIAL)、临时节点(EPHEMERAL)、临时顺序节点(EPHEMERAL_SEQUENTIAL)

    4、面试官:你知道znode节点里面存储的是什么吗?每个节点的数据最大不能超过多少呢?

    小菜鸡的我:ZooKeeper的十二连问,你顶得了嘛?-LMLPHP

    znode节点里面存储的是什么?

    Znode数据节点的代码如下

    public class DataNode implements Record {
        byte data[];                    
        Long acl;                       
        public StatPersisted stat;       
        private Set<String> children = null; 
    }

    哈哈,Znode包含了存储数据、访问权限、子节点引用、节点状态信息,如图:ZooKeeper的十二连问,你顶得了嘛?-LMLPHP

    每个节点的数据最大不能超过多少呢

    为了保证高吞吐和低延迟,以及数据的一致性,znode只适合存储非常小的数据,不能超过1M,最好都小于1K。

    5、面试官:你知道znode节点上的监听机制嘛?讲下Zookeeper watch机制吧。

    小菜鸡的我:

    Watcher监听机制

    Zookeeper 允许客户端向服务端的某个Znode注册一个Watcher监听,当服务端的一些指定事件触发了这个Watcher,服务端会向指定客户端发送一个事件通知来实现分布式的通知功能,然后客户端根据 Watcher通知状态和事件类型做出业务上的改变。

    Watcher监听机制的工作原理

    Watcher特性总结

    6、面试官:你对Zookeeper的数据结构都有一定了解,那你讲下Zookeeper的特性吧

    小菜鸡的我:(我背过书,啊哈哈)ZooKeeper的十二连问,你顶得了嘛?-LMLPHPZookeeper 保证了如下分布式一致性特性:

    7、面试官:你刚提到顺序一致性,那zookeeper是如何保证事务的顺序一致性的呢?

    小菜鸡的我:(完蛋了这题不会)ZooKeeper的十二连问,你顶得了嘛?-LMLPHP

    这道题可以看下这篇文章(本题答案来自该文章):聊一聊ZooKeeper的顺序一致性 https://time.geekbang.org/column/article/239261

    ZXID的生成规则如下:ZooKeeper的十二连问,你顶得了嘛?-LMLPHP

    ZXID有两部分组成:

    8、面试官:你提到了Leader,你知道Zookeeper的服务器有几种角色嘛?Zookeeper下Server工作状态又有几种呢?

    小菜鸡的我:ZooKeeper的十二连问,你顶得了嘛?-LMLPHP

    Zookeeper 服务器角色

    Zookeeper集群中,有Leader、Follower和Observer三种角色

    Leader

    Follower

    Observer

    Zookeeper下Server工作状态

    9、面试官:你说到服务器角色是基于ZooKeeper集群的,那你画一下ZooKeeper集群部署图吧?ZooKeeper是如何保证主从节点数据一致性的呢?

    小菜鸡的我:ZooKeeper的十二连问,你顶得了嘛?-LMLPHP

    ZooKeeper集群部署图

    ZooKeeper的十二连问,你顶得了嘛?-LMLPHPZooKeeper集群是一主多从的结构:

    ZooKeeper如何保证主从节点数据一致性

    我们知道集群是主从部署结构,要保证主从节点一致性问题,无非就是两个主要问题:

    Zookeeper是采用ZAB协议(Zookeeper Atomic Broadcast,Zookeeper原子广播协议)来保证主从节点数据一致性的,ZAB协议支持崩溃恢复和消息广播两种模式,很好解决了这两个问题:

    10、面试官:Leader挂了,进入崩溃恢复,是如何选举Leader的呢?你讲一下ZooKeeper选举机制吧

    小菜鸡的我:ZooKeeper的十二连问,你顶得了嘛?-LMLPHP

    服务器启动或者服务器运行期间(Leader挂了),都会进入Leader选举,我们来看一下~假设现在ZooKeeper集群有五台服务器,它们myid分别是服务器1、2、3、4、5,如图:ZooKeeper的十二连问,你顶得了嘛?-LMLPHP

    服务器启动的Leader选举

    zookeeper集群初始化阶段,服务器(myid=1-5)依次启动,开始zookeeper选举Leader~

    服务器运行期间的Leader选举

    zookeeper集群的五台服务器(myid=1-5)正在运行中,突然某个瞬间,Leader服务器3挂了,这时候便开始Leader选举~ZooKeeper的十二连问,你顶得了嘛?-LMLPHP

    11、面试官: 你前面提到在项目中使用过Zookeeper的分布式锁,讲一下zk分布式锁的实现原理吧?

    小菜鸡的我:ZooKeeper的十二连问,你顶得了嘛?-LMLPHPZookeeper就是使用临时顺序节点特性实现分布式锁的。

    获取锁过程

    释放锁

    我们再来看看释放锁的流程,zookeeper的客户端业务完成或者故障,都会删除临时节点,释放锁。如果是任务完成,Client1会显式调用删除lock1的指令ZooKeeper的十二连问,你顶得了嘛?-LMLPHP如果是客户端故障了,根据临时节点得特性,lock1是会自动删除的ZooKeeper的十二连问,你顶得了嘛?-LMLPHPlock1节点被删除后,Client2可开心了,因为它一直监听着lock1。lock1节点删除,Client2立刻收到通知,也会查找locks下面的所有临时顺序子节点,发下lock2是最小,就获得锁。ZooKeeper的十二连问,你顶得了嘛?-LMLPHP

    同理,Client2获得锁之后,Client3也对它虎视眈眈,啊哈哈~

    12. 面试官:好的,最后一道题,你说说dubbo和Zookeeper的关系吧,为什么选择Zookeeper作为注册中心?

    小菜鸡的我(答了这么多道题,不会还不给我过吧?):ZooKeeper的十二连问,你顶得了嘛?-LMLPHP

    dubbo的注册中心可以选Zookeeper,memcached,redis等。为什么选择Zookeeper,因为它的功能特性咯~

    个人公众号

    参考与感谢

    Reference

    09-02 13:21