官方的解释: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. C# 操作服务命令

    安装服务 @echo.服务启动...... @echo off @sc create 服务名称 binPath= " exe地址" @net start 服务名称 @sc conf ...

  2. 初学Javascript,写一个简易的登陆框

    <!--下面是源代码--> <!DOCTYPE html> <html> <head> <meta charset = "utf-8&q ...

  3. 0078 Java与MySQL时间戳传递/存储/协调问题--userLegacyDatetimeCode--userTimezone--serverTimezone

    00. 基本问题 0.0 版本: 驱动5.1.47和8.0.17 0.1 MySQL驱动5.1有userLegacyDatetimeCode和userTimezone两个参数, 8.0没有 0.2 J ...

  4. Django-CRM后台管理系统

    crm整体流程 表结构 from django.db import models # Create your models here. from django.contrib.auth.models ...

  5. Codeforces 915 F. Imbalance Value of a Tree(并查集)

    F. Imbalance Value of a Tree 题意: 给一颗带点权的树,求所有简单路径上最大点权和最小点权之差的总和. 思路: 所求问题可以看作求各路径上的最大值之和减各路径上的最小值之和 ...

  6. Python入门(下载编译器,并安装)

    进入官网 https://www.python.org/ 当前:官网上面的版本是3.7.3 在Windows上面安装比较简单,就一直点下一步就ok了 我这边是选的第一个, 我学习的教程建议我用第二个, ...

  7. vsftp的安装和使用

    检查Linux系统是否安装了vsftpd的命令: rpm -qa|grep vsftpd 2.安装命令: yum -y install vsftpd 3.卸载命令: yum remove vsftpd ...

  8. sql语句中where 1=1和 0=1 的作用

    sql where 1=1和 0=1 的作用   where 1=1; 这个条件始终为True,在不定数量查询条件情况下,1=1可以很方便的规范语句. 一.不用where  1=1  在多条件查询中的 ...

  9. Netfilter 之 连接跟踪钩子函数分析

    ipv4_conntrack_defrag ipv4_conntrack_defrag对输入包进行检查,如果是分片包,则调用nf_ct_ipv4_gather_frags函数进行重组: static ...

  10. 微信小程序swiper禁止用户手动滑动

    最近做一个项目,由于用到了竖向swiper,导致占用屏幕过大,用户滑动总是滑动到swiper组件,页面无法向下拉动,于是找各种办法禁止用户手动滑动swiper组件. 经过网上一番查找,网友们也是闹洞大 ...