ZooKeeper 技术内幕初探(二)

前面介绍了ZooKeeper的一些基本特性,ZooKeeper入门,也安装运行了一个简单的ZooKeeper的例子。这此主要介绍ZooKeeper内部的一些工作方式理论部分。

与文无关

主要涉及以下:

  • ZooKeeper服务的架构
  • ZooKeeper的数据模型
  • ZooKeeper的节点特性
  • ZooKeeper的访问控制
  • Watcher(监听器)

ZooKeeper服务概览

ZooKeeper是一个复制式的分布式应用,有点像DNS服务或一些中心化的服务。


ZooKeeper服务架构

这是官网给的ZooKeeper服务图,所有组成ZooKeeper服务的服务器都相互知晓,它们维护了一个内存状态的镜像,也包含事务日志,持久存储的快照等。只要半数以上的的服务器是可用的,ZooKeeper服务就是可用的。

顺便提一下ZooKeeper的设计目标(Design Goals)

  • 简单
  • 复制式的 所有节点相互复制状态
  • 有序的,所有的事务都有时间戳
  • 快速 在读大于写的时候...
ZooKeeper读写图

ZooKeeper在读数据的时候可以直接从当前节点读取数据,在写数据的时候需要将写请求转发到Leader节点上。

ZooKeeper数据模型

ZooKeeper的各个服务器节点共同维护一个可以注册数据的层级结构,类似于Unix的文件系统。数据注册的位置也称为znode

Znode图

注意

  • 数据节点一般以字节形式存储,节点存储的数据大小最大不超过1MB。协作的数据一般不会太大。最好让数据远小于1MB会好些。
  • ZooKeeper无法识别相对路径。 znode的路径必须是绝对路径
  • 每个Znode除了存储数据以外,还有维护一些状态信息。

Znode 特性

Znode类型

ZooKeeper主要有两种节点类型,也可以说是三种。持久节点,临时节点。第三个是顺序节点,顺序节点也可以说是刚才那两种节点。 持久节点和顺序节点都可以是顺序节点。
注意节点的类型是在创建的时候就设置好的。

  • 持久节点。ZooKeeper中最常见的一种节点类型,创建之后一直存在服务器上,知道有删除操作来主动清楚这个节点
  • 临时节点,与客户端会话绑定在一起。 客户端会话失效,节点自动清理。(网络突然坏掉不算会话失效)
  • 顺序节点,在节点创建的时候,ZooKeeper自动给节点名分配一个序列号。例如/path/to/znode-0000000001,一般是10位数字,序号之外的位以0填充。
节点状态

每一个Znode都有对应的stat结构,和文件系统类似。stat状态主要包含下面的信息:

  • cZxid. 节点被创建时候的事务ID
  • mZxid 节点最后一次被修改时候的事务ID
  • pZxid 该节点的子节点最后一次被修改时的事务ID。子节点删除或添加才会影响pZxid
  • ctime 节点被创建的时间
  • mtime 节点被修改的世界
  • dataVersion 这个节点数据改变的次数
  • cversion 子节点被改变的次数
  • aclVersion 节点的ACL(访问控制列表被改变的次数)
  • ephemeralOwner 创建该临时节点的 session ID。如果是持久节点,设置为0
  • dataLength 数据内容长度
  • numChildren 当前节点子节点的个数

可以使用ls2stat命令查看ZooKeeper节点下的信息。

命令演示

ZooKeeper的访问控制(ACL)

ZooKeeper的数据模型提供了ACL来控制znode节点的访问。如果一个客户端符合ACL控制,那么就可以对其进行访问,否则将无法操作。

Zookeeper支持可配置的认证机制。它利用一个三元组来定义客户端的访问权限:

(scheme:expression, perms) 。其中:

  1. Schema 代表权限控制模式,分别为
  • World 任何人
  • Auth 不需要ID
  • Digest 用户名和密码方式的认证
  • IP Address IP地址方式的认证
  1. perms(权限),ZooKeeper支持如下权限
  • CREATE: 创建子节点
  • READ: 获取子节点与自身节点的数据信息
  • WRITE:在Znode节点上写数据
  • DELETE:删除子节点
  • ADMIN:设置ACL权限

贴上如下图,在下次使用ZooKeeper的时候更明白,这次我们主要说明一些ZooKeeper理论方面的知识,具体编程的实现下次再说。

ACL图

权限模式和授权对象的关系:

  • IP: 通常是IP地址或是IP端,例如"192.168.1.2"或"192.168.1.1/24"
  • Degist: 自定义,通常是"username:BASE64(SHA-1(username:password))"
  • World:只有一个ID,“anyone”
  • Super: 与Degist模式一致

注意

  • Znode的Acl只是针对某个节点,不会作用到它的子节点上
  • 任何连接到ZooKeeper的客户端都可以使用exist操作,exist是不需要权限的。

ZooKeeper的Watcher

ZooKeeper中引入了Watcher机制来实现分布式通知功能,ZooKeeper允许客户端像服务端注册一个Watcher监听,当服务端的一些指定事件触发了这个Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能。

有如下的Watcher事件类型可能出现:

  • NodeChildrenChanged: zNode的子节点创建或删除的时候
  • NodeCreated: 新的Znode节点被创建的时候
  • NodeDataChanged: Znode节点的数据改变了的时候
  • NodeDeleted: Znode节点被删除的时候。

关于Watcher内部实现机制,下次可以通过分析其源码进行更详细的说明

最后

这次主要介绍了一些ZooKeeper内部的基本概念,理论部分较多,若无理论的基础实施接下来的操作也不太方便。

接下来我会写下:

  • ZooKeeper 客户端编程
  • ZooKeeper Watcher监听器原理分析

参考

  • 《从Paxos到ZooKeeper-分布式一致性原理与实践》
  • 《Apache ZooKeeper Essential》
  • ZooKeeper Overview
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 一、ZooKeeper的背景 1.1 认识ZooKeeper ZooKeeper---译名为“动物园管理员”。动物...
    algernoon阅读 9,044评论 1 106
  • 本文将从系统模型、序列化与协议、客户端工作原理、会话、服务端工作原理以及数据存储等方面来揭示ZooKeeper的技...
    端木轩阅读 3,775评论 0 42
  • 你会遇到一个人让你打破所有的原则。 这几天在看日版的《一吻定情》。一直都很喜欢这部剧,各个版本看了许多遍都不...
    lleneee阅读 298评论 3 3
  • 概率这件事儿 本不是高数达人,也不是天生神才,让我来说这点事,貌似也说的不是那么明白,权当你们在无聊的时候取个乐子...
    让我笑一会儿阅读 304评论 0 1
  • 每个人都有他的特点,哪怕是你讨厌的人,或者是你知道什么原因而去厌烦的人。 对于他,真的不知道是什么时候开始有些厌烦...
    与步阅读 125评论 0 0