java进阶干货Java学习笔记Java 杂谈

ZooKeeper 技术内幕初探(二)

2018-04-02  本文已影响57人  AI贺贺

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

与文无关

主要涉及以下:

ZooKeeper服务概览

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


ZooKeeper服务架构

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

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

ZooKeeper读写图

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

ZooKeeper数据模型

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

Znode图

注意

Znode 特性

Znode类型

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

节点状态

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

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

命令演示

ZooKeeper的访问控制(ACL)

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

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

(scheme:expression, perms) 。其中:

  1. Schema 代表权限控制模式,分别为
  1. perms(权限),ZooKeeper支持如下权限

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

ACL图

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

注意

ZooKeeper的Watcher

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

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

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

最后

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

接下来我会写下:

参考

上一篇 下一篇

猜你喜欢

热点阅读