zoukankan      html  css  js  c++  java
  • Zookeeper白话解释

    官方的解释: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提供了诸如统一命名空间服务,配置服务和分布式锁等分布式基础服务。
    统一命名空间服务:我们上文说了,文件系统而已。
    分布式锁:我们上文也说了,就是利用文件系统创建节点来完成锁的效果。

  • 相关阅读:
    get 传 json 数据
    go text/template html/template invalid memory address or nil pointer dereference
    (转)go语言变参,匿名函数的多种用法
    shell 定义变量 坑
    python3 使用aria2下载的一个脚本
    python3 selenium 超时停止加载,并且捕捉异常, 进行下一步【亲测有效】
    selenium学习笔记——driver.get(url) 页面加载时间太长
    python Selenium chromedriver 自动化超时报错:你需要使用多标签保护罩护体
    selenium等待
    小数据池与代码块
  • 原文地址:https://www.cnblogs.com/ygbwb/p/11248834.html
Copyright © 2011-2022 走看看