哈喽!大家好,我是小奇,一位不靠谱的程序员
小奇打算以轻松风趣的对话形式来分享一些技术,如果你感觉通过小奇的文章学到了货色,那就给小奇一个赞吧
文章继续更新

一、前言

作为一名Java程序员,Zookeeper底层的一些原理是咱们不用学会就能够搬砖工作的一种技能点,然而小奇为什么还要讲一下呢?难道就是为了节约大家1分钟的宝贵时间,一个人1分钟,50万人就是1年,5000万人就是100年,赚了,小奇以一己之力胜利搞挂一个人(血赚)。

当然不是,并且小奇的文章也没有那么多人看,最多也就节约个吧。

学习Zookeeper底层原理是因为面试官要问啊!,所以咱们就要学,什么?不实用的你不学?那街坊小奇可要使劲学啦,到时候面试官只有小奇不要你。

至于你问为什么面试官要问Zookeeper底层原理呢,这个。。。我把这次机会留给你,下次你面试的时候面试官问:“讲一下Zookeeper底层原理”。你:“面试官你好,请问为什么你要问Zookeeper底层原理呢,你给我台电脑,我五分钟给你搭建好图书管理系统他不香吗,咱们键盘上见真章”。这时面试官就会通知你答案,你就能够把答案打在评论区,让小奇以及泛滥小伙伴一起晓得一下到底为什么要问?

二、面试

在一个晴朗的周日,我来到了一个生疏的园区(别问为什么是周日,问就是997,不过为了填饱肚子的打工人,只能明知山有虎、偏差虎山行),坐在生疏的会议室,期待HR小姐姐去叫面试官,此时我的情绪和各位小伙伴一样五味杂陈,放心面试官问的会不会很难?问到我的常识盲区我该怎么办?一会自我介绍的时候要不要吹一下我和小奇的关系?

一位英俊潇洒,眼神犀利的面试官走了进来,看到他那犀利、好像能看穿所有的眼神 ,我在想要不然一会就不要20k了,要8k得了,这个面试官一看就不好糊弄啊,然而我想起来我来之前刚看了小奇的趣学编程系列,我曾经齐全学会了小奇的精华,我登时就来了底气,决定一会要30k,不给就学小奇赖着不走(哈哈)

面试官:小奇是吧,带简历了吗?

我:没带,当初彩印两块一张,我简历五张,每次面试都要花费十块,我敌人说了还没工作就先让你掏钱的工作不要去。

面试官:。。。那你靠什么来驯服我,让我录用你

我:气质?

(此时面试官并没有叫保安,而是从门后拿出了恭候我多时的棍子,我霎时怂了)

我只好从我的双肩包中拿出了我上午从其余公司面试官手中要回的简历,上午的情景是这样的。

上午的面试官:明天的面试就到这吧,回去等告诉吧!

我:面试官你好,如果贵公司不打算录取我的话,能不能把我的纸质简历还给我,我下午还有一家面试。

上午的面试官:我说你的简历怎么皱皱巴巴,原来你始终在循环利用啊!这个症状呈现多久了?

我:半拉月了。。。

(当我把皱皱巴巴的简历交给面试官后,这场面试才得以持续进行。。。)

三、Zookeeper是什么

面试官:我看你简历上写的精通Zookeeper?(哼,面试官轻蔑的一笑)

我:原本不想写精通的,然而同行们抬爱,非逼着写,然而也无可非议,虽说没有达到炉火纯青,然而也差不多登峰造极了吧。

面试官:呵呵、那你先说一说Zookeeper是什么吧

我:ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,次要为了解决分布式架构下数据一致性问题,典型的利用场景有分布式配置核心、分布式注册核心、分布式锁、分布式队列、集群选举、分布式屏障、公布/订阅等场景。

面试官:嗯,Zookeeper是怎么的一个数据结构呢?

我:Zookeeper是一个相似于文件系统的数据结构,最外层咱们能够设想成一个大的文件夹,外面都是一些小的文件夹。

四、Zookeeper有哪些数据结构

面试官:嗯,Zookeeper有几种罕用的数据格式呢?

我:Zookeeper中每一个子目录项都是一个znode(目录节点),这些目录节点和咱们一般的目录一样能够新建、删除、批改,咱们罕用的次要有四种类型的znode。
1、长久化目录节点:
客户端与zookeeper断开连接后,该节点仍旧存在,只有不手动删除该节点,他将永远存在。
2、长久化程序编号目录节点:
客户端与zookeeper断开连接后,该节点仍旧存在,只是zookeeper给该节点名称进行程序编号。
3、长期目录节点:
客户端与zookeeper断开连接后,该节点被删除。
4、长期程序编号目录节点:
客户端与zookeeper断开连接后,该节点被删除,只是zookeeper给该节点名称进行程序编号。

五、Zookeeper有哪些外围性能

面试官:嗯,Zookeeper有哪些外围的性能呢?

我:zookeeper有监听告诉机制,如果对某个节点进行监听,当这个节点被删除,或者被批改时,监听方会感知到批改音讯。

面试官:嗯,既然zookeeper有监听机制,那么能够监听到几种类型的变动呢?

我:能够监听到七种类型变动:
1、None:连贯建设事件
2、NodeCreated:节点创立
3、NodeDeleted:节点删除
4、NodeDataChanged:节点数据变动
5、NodeChildrenChanged:子节点列表变动
6、DataWatchRemoved:节点监听被移除
7、ChildWatchRemoved:子节点监听被移除

面试官:咱们在开发中应用Synchronized就能够保障线程平安了,为什么还须要应用zookeeper来实现分布式锁呢?

我:如果咱们是单机状况下也就是只有一个过程的状况下应用Synchronized是能够保障线程平安的。然而分布式状况下是多个不同的过程,而不是一个过程外面不同的线程,所以Synchronized是无奈保障多个过程平安的。

面试官:zookeeper节点有哪些重要信息呢,怎么进行查看?

我:zookeeper节点能够通过stat命令来查看次要信息,其中信息有:
1、cZxid:创立znode的事务id(Zxid的值)。
2、mZxid:最初批改znode的事务id。
3、pZxid:最初增加或删除子节点的事务id(子节点列表发生变化才会产生扭转)。
4、ctime:znode创立工夫。
5、mtime:znode最近批改工夫。
6、dataVersion:znode的以后数据版本。
7、cversion:znode的子节点后果集版本(一个节点的子节点减少、删除都会影响这个版本)。
8、aclVersion:示意对此znode的acl版本。
9、ephemeralOwner:znode是长期znode时,示意znode所有者的sessionid,如果znode不是长期节点,则该字段设置为零。
10、dataLength:znode数据字段的长度。

面试官:zookeeper创立节点,和监听节点有哪些命令?

我:
1、创立长久节点:create /节点名称
2、创立长久程序节点:create -s /节点名称
3、创立长期节点:create -e /节点名称
4、创立长期程序节点:create -e -s /节点名称
5、监听节点:get -w /节点名称

六、Zookeeper有哪些权限管制

面试官:zookeeper有哪些权限管制呢?

我:应该是依照大小个吧,谁个高谁说了算。

面试官:你特么找打是吧,数据那特么有大小个。。。

我:zookeeper有ACL( Access Control List )权限管制,能够管制节点的读写操作,保证数据的安全性,不然的话谁都能够创立和删除节点,那不就乱了套了。

面试官:ACL权限设置有几局部组成呢?

我:有三局部组成,别离是权限模式、受权对象、权限信息

面试官:能具体说一说这三局部都代表什么吗?

我:权限模式: 就是zookeeper服务器进行权限验证的形式,比方手机解锁是用指纹还是用明码呢,如果用明码,晓得明码的都能够解锁你的手机,如果用指纹,只有你本人的手指头能够解锁。所以权限模式大体分为两种类型:

1、范畴验证: 范畴就是zookeeper能够针对一个ip或者一段ip地址授予权限,相当于指纹解锁,我给我一个手指头,或者所有的脚指头都授予权限。
2、口令验证: 能够了解为用户名明码的形式,这种就相当于明码解锁了,晓得了用户名明码后所有的人都相当于授予了权限。

受权对象: 受权对象就是把权限授予给谁,如果是范畴验证形式,那么受权对象就是ip地址,如果是口令验证,受权对象就是用户名。

受权信息: 受权信息就是指咱们具体的势力是什么,比方咱们解锁手机后能够打游戏还是能够听歌,还是能够用手机砸核桃呢。

zookeeper中定义好的权限有5种:
1、数据节点(c:create)创立权限,授予权限的对象能够在数据节点下创立子节点。
2、数据节点(w:wirte)更新权限,授予权限的对象能够更新该数据节点。
3、数据节点(r:read)读取权限,授予权限的对象能够读取该节点的内容以及子节点的列表信息。
4、数据节点(d:delete)删除权限,授予权限的对象能够删除该数据节点的子节点。
5、数据节点(a:admin)管理者权限,授予权限的对象能够对该数据节点体进行ACL权限设置。

面试官:咱们怎么查看和设置某个节点的ACL权限信息呢

我:能够通过getAcl来获取某个节点的权限信息,通过setAcl来设置某个节点的权限信息。

七、Zookeeper数据长久化

面试官:zookeeper的数据是存储在内存中的吗,怎么进行长久化操作呢?

我:zookeeper和redis很像,数据都是在内存中的,长久化也是两种形式,一种是记录事务日志,一种是快照形式。

记录事务日志磁盘会进行IO操作,事务日志的一直增多会触发磁盘为文件开拓新的磁盘块,所以为了晋升磁盘的效率,能够在创立文件的时候就向操作系统申请一块大一点的磁盘块,通过参数zookeeper.preAllocSize配置。

事务日志的寄存地址通过zoo.cfg配置文件中的dataDir来指定。

面试官:小伙子真厉害啊,我这边没有什么要问的了,你还有什么问题要问(面试官两眼放光)

我:额。。。面试官这个我的纸质简历能够给我吗,能够不往我的简历上写写画画吗,我今天的面试还要用。

面试官:还面啥别的公司啊,就来我这吧,条件轻易开

我:那就100k吧(此时面试官又拿起了他筹备好的棍子)

面试官:你要是不来就给我举荐一下,让他人来我这面试一下

我:你先好好学习一下zookeeper吧,明天幸好只是我来了,如果是小奇的忠诚读者来了,你将会被虐的很惨的。(我将我的博客地址留给了面试官,转身留下了帅气的背影,而面试官落寞无神的呆呆的坐在那里,好像一个亿离他而去。。。)

八、总结

这里对于zookeeper还没有整顿结束,文章前面继续更新,倡议珍藏。

文章中波及到的命令大家肯定要像我一样每个都敲几遍,只有在敲的过程中能力发现自己对命令是否真正的把握了。

如果感觉我的文章还不错的话就点个赞

本文参加了 SegmentFault 思否征文「如何“反杀”面试官?」,欢送正在浏览的你也退出。