官方的解释:Zookeeper提供了诸如统一命名空间服务,配置服务和分布式锁等分布式基础服务。

嗯,说上面这个话的人,良心不会痛吗?
Zookeeper功能如上边说到的:统一命名空间服务
其他就tm跟我们平时本地磁盘那种文件系统没多大区别
文件系统大家都知道吧,例如windows的:

我的电脑://
············C://
·················Windows
·················program files
············D://
·················相片
·················电影

如果要把window的“我的电脑”理解为根目录的话,
在Zookeeper中则是用/作为根目录。
/:
········用户自己创建的文件夹1
·························文件夹1下的某文件1
·························文件夹1下的某文件2
········用户自己创建的文件2
·························文件夹2下的某文件1
·························文件夹2下的某文件2

注意了,在我的理解中,Zookeeper这个看上去没什么特别的文件结构其实非常有用,让我来举例子吧。

例如可以用Zookeeper的这种文件结构做分布式锁
我先说一下分布式锁是什么东西:
有两台电脑都想去修改存在第三台电脑的一个文件,但是这个文件同一时刻只能由一台电脑访问,所以需要加一把锁来满足同一时刻只有同一个电脑访问这个文件的需求。

我们来看看Zookeeper是如何利用文件结构来完成这个分布式锁这个功能的:
还是上面的例子:
电脑1访问美国某电脑文件之前,先去Zookeeper中某目录(例如/readfile)下创建一个顺序文件(所谓顺序文件,就是Zookeeper会为你创建的文件加一个顺序号,这个序号由时间先后顺序递增),名字叫“我要访问A文件+顺序号”
电脑2访问美国某电脑文件之前,先去Zookeeper中与电脑1同一目录(/readfile)创建一个顺序文件,名字叫“我要访问A文件+顺序号”
电脑3访问美国某电脑文件之前,先去Zookeeper中与电脑1同一目录(/readfile)创建一个顺序文件,名字叫“我要访问A文件+顺序号”

假设现在三台电脑创建了三个文件,分别是:
电脑1创建的:我要访问A文件00000000001
电脑2创建的:我要访问A文件00000000003
电脑3创建的:我要访问A文件00000000002

其实这个过程就有点像排队拿锁的过程,电脑1创建的序列号最小,那么电脑1就拿到了锁,电脑2和电脑3就等着电脑1访问文件结束,才能访问。
这里我又需要说一下Zookeeper里面的文件类型:
1、就是我们刚刚说的顺序文件
例如电脑1创建的:我要访问A文件00000000001。
2、无顺序文件
就是创建文件后,不会在文件名后面加上数字编号。
3、临时节点
临时节点是什么意思呢?电脑1刚刚在Zookeeper中创建了一个文件,如果电脑1断开与Zookeeper的连接,这个时候电脑1创建的文件就会被Zookeeper自动删除。
4、永久节点
如果某电脑在Zookeeper上创建的是永久节点,那当某电脑与Zookeeper断开之后,创建的节点仍在存在
注:这里所说节点和文件等效,说文件是问了方便大家理解。
上面的4种类型的组合方式是:顺序临时节点,无顺序临时节点,顺序永久节点,无顺序永久节点4种。

现在再来说刚刚三台电脑访问美国某电脑上的文件,电脑1创建的其实是临时顺序节点,那当电脑1访问完美国某电脑上的文件之后,电脑1将断开与Zookeeper的连接,这个时候电脑1创建的文件被Zookeeper自动删除,电脑3创建的文件此时序号最小,所以电脑3拿到锁,然后访问美国某服务器上的文件。(这里还有一些细节没有讲到,因为这些细节涉及到Zookeeper另一个监听的特性,之后再讲)

这里再说清楚几个事情:
Zookeeper是一个集群,多台服务器对外提供服务,但是对于客户端来说是不可见的,啥意思呢?我来讲一个故事,这里也比较重要
最开始有个喜欢拽专业词汇的程序员,我们叫他小逼吧,小逼的妈妈死了,他哭瞎了眼睛。在他妈妈的葬礼上,他饿了,于是点了一份外卖。
这个时候有很多外卖小哥在等着接单,然后有一个外卖小哥先抢到单子,告诉大家:他的外卖我去送,你们等其他单子吧。于是乎这个抢到单子的外卖小哥把外卖送到小逼手上,小逼由于眼瞎,并不知道送外卖的人是谁。

Zookeeper其实是部署在很多台电脑上,但是每个电脑上部署的Zookeeper几乎一样,每个Zookeeper都可以看做外卖小哥,一个外卖小哥接到单子,也会告诉其他外卖小哥这个消息,Zookeeper文件系统也是一样,例如电脑1在某一台Zookeeper电脑上创建了一个文件,那么Zookeeper也会将这个文件同步到其他Zookeeper电脑上。
好,所以Zookeeper分布式,就是这么分布来的,Zookeeper分布在不同节点上,某台节点上有文件删除修改就跟其他节点上的Zookeeper兄弟说,然后一起同步。理解了这个再来看一开始装逼的傻逼说的充满专业术语的话:

Zookeeper提供了诸如统一命名空间服务,配置服务和分布式锁等分布式基础服务。
统一命名空间服务:我们上文说了,文件系统而已。
分布式锁:我们上文也说了,就是利用文件系统创建节点来完成锁的效果。

Zookeeper白话解释的更多相关文章

  1. 用大白话解释什么是Socket

    好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 前言 我在去年就学习过Java中 ...

  2. 白话解释IIS并发连接数

    做负载均衡的时候会发现有很多并发数的参数.其中有一个"IIS并发连接数"是我们要关注的. 假设"IIS并发连接数"显示为1000,这并不代表有1000个客户端在 ...

  3. 六白话经典算法系列 高速分拣 高速GET

     高速分拣,因为相同的排序效率O(N*logN)几个订购流程更高效,因此,经常使用,再加上高速分拣思想----分而治之的方法也是非常有用的,如此多的软件公司书面采访.它包含了腾讯,微软等知名IT企业宁 ...

  4. ZooKeeper系列(1):安装搭建ZooKeeper环境

    ZooKeeper系列文章:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk ZooKeeper有三种安装模式:单机安装(standalone ...

  5. “context:include-filter”与“context:exclude-filter”标签作用解释

    注意到spring中<context:component-scan>标签中会出现include和exclude的子标签,具体是做什么用的? spring的配置文件与springmvc的配置 ...

  6. zookeeper 快速入门

    分布式系统简介 在分布式系统中另一个需要解决的重要问题就是数据的复制.我们日常开发中,很多人会碰到一个问题:客户端C1更新了一个值K1由V1更新到V2.但是客户端C2无法立即读取到K的最新值.上面的例 ...

  7. 探究Dubbo的拓展机制: 上

    这篇博文是我决心深度学习Dubbo框架时记录的笔记, 主题是Dubbo的拓展点, 下面的几个部分相对来说比较零散, 貌似是不和主题挂钩的 , 并且是一些很冷门的知识点 , 但是它们确实是深入学习Dub ...

  8. 动态规划 Dynamic Programming

    March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...

  9. 窥探Swift之新添数据类型元组与可选值

    今天的博客中就总结一下关于Swift中相对Objc新添加的两个数据类型:元组(Tuple)和可选值类型(Optional).上面这两个类型是Swift独有的类型,使用起来也是非常方便的,今天就通过一些 ...

随机推荐

  1. vue 后退不刷新,前进刷新 keep-alive

    最近在开发中遇到了这样的一个问题: A.B.C三个页面,有如下这样的场景: (1)从页面A离开进入B或C的时候,缓存A页面的数据,并且返回到A后,能保持A页面的跳转前职位 (2)离开B进入C的时候,缓 ...

  2. 长春理工大学第十四届程序设计竞赛D Capture The Flag——哈希&&打表

    题目 链接 题意:给定一个字符串 $s$,求不同于 $s$ 的字符串 $t$,使得 $Hash(s) = Hash(t)$,其中 $\displaystyle Hash(s) = \sum_0^{le ...

  3. Educational Codeforces Round 50 (Rated for Div. 2) F - Relatively Prime Powers(数学+容斥)

    题目链接:http://codeforces.com/contest/1036/problem/F 题意: 题解:求在[2,n]中,x != a ^ b(b >= 2 即为gcd)的个数,那么实 ...

  4. BZOJ 3065 带插入区间K小值 (替罪羊树套线段树)

    毒瘤题.参考抄自博客:hzwer 第一次写替罪羊树,完全是照着题解写的,发现这玩意儿好强啊,不用旋转每次都重构还能nlognnlognnlogn. 还有外面二分和里面线段树的值域一样,那么r = mi ...

  5. net core 3 使用 autofac

    参考官方:https://docs.autofac.org/en/latest/integration/aspnetcore.html#startup-class 有一些变动,现在暂时还没用net c ...

  6. 洛谷 P4933 大师

    题面 (实名推荐:本题的出题人小哥哥打球暴帅哦!(APIO/CTSC/WC的时候一起打过球w,而且大学在我隔壁喔) ) 没仔细看数据范围的时候真是摸不着头脑...还以为要 O(N^2) dp 爆锤.. ...

  7. NSNull

    集合中是不能放nil值的,因为nil是结尾,但是为了存放表示什么都没有的值,可以使用NSNull,它也是NSObject的一个子类. void null(){ NSNull *nl=[NSNull n ...

  8. Django从Models 10分钟定制一个Admin后台

    目录 Django从Models 10分钟建立一套RestfulApi Django从Models 10分钟定制一个Admin后台 简介 Django自带一个Admin后台, 支持用户创建,权限配置和 ...

  9. 关于phoenix构建hbase视图,更新hbase表后,视图表是否更新的验证

    1:创建表 create 'MY_TABLE', 'CF1','CF2' 2:在hbase上插入一条数据 put ' ,'CF1:V1', 'uwo1' 3:在phoenix上创建视图 create ...

  10. 图书管理(单链表C++)

    #include<iostream> #include<string> #include<iomanip> #include<fstream> usin ...