细说 ZooKeeper 上篇

Posted 百果科技研发团队

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了细说 ZooKeeper 上篇相关的知识,希望对你有一定的参考价值。



前言

现阶段互联网分布式服务非常流行,作为大型系统的必备方案。而 ZooKeeper 具备严格的顺序访问控制能力的分布式协调服务是不可或缺的一部分。接下来我们将讲述 ZooKeeper 的概念、选举算法、分布式锁和利用 ZooKeeper 实现服务注册与发现的简单案例,进而让你简单快速上手 ZooKeeper,师傅领进门修行在个人,想更加深入的理解 ZooKeeper 还需要自己深入的研究和学习。

细说 ZooKeeper 【上篇】

ZooKeeper 的概念

ZooKeeper 致力于提供一个高性能、高可用,且具备严格的顺序访问控制能力的分 布式协调服务,是雅虎公司创建,是 Google 的 Chubby 一个开源的实现,也是 Hadoop 和 Hbase 的重要组件。

简单的数据结构:共享的树形结构,类似文件系统,存储于内存;

可以构建集群:避免单点故障,3 - 5 台机器就可以组成集群,超过半数正 常工作就能对外提供服务;

设计目标:

顺序访问:对于每个读请求,ZK 会分配一个全局唯一的递增编号,利用这个特性可以实现高级协调服务;

高性能:基于内存操作,服务于非事务请求,适用于读操作为主的业务 场景。3 台 ZK 集群能达到 13W QPS;

细说 ZooKeeper 【上篇】

基本概念

集群角色

最典型的集群就是 Master/Slave 模式(主备模式),此情况下把所有能够处理写操作的机器称为 Master 机器,把所有通过异步复制方式获取最新数据,并提供读服务的机器为 Slave 机器。ZooKeeper 引入了 Leader、Follower、Observer 三种角色,ZooKeeper 集群中的所有机器通过 Leaser 选举过程来选定一台被称为 Leader 的机器,Leader 服务器为客户端提供写服务,Follower 和 Observer 提供读服务,但是 Observer 不参与 Leader 选举过程,不参与写操作的过半写成功策略,Observer 可以在不影响写性能的情况下提升集群的性能。

会话

指客户端会话,一个客户端连接是指客户端和服务端之间的一个 TCP 长连接,ZooKeeper 对外的服务端口默认为 2181,客户端启动的时候,首先会与服务器建立一个 TCP 连接,从第一次连接建立开始,客户端会话的生命周期也开始了,通过这个连接,客户端能够心跳检测与服务器保持有效的会话,也能够向 ZooKeeper 服务器发送请求并接受响应,同时还能够通过该连接接受来自服务器的 Watch 事件通知。

数据节点

第一类指构成集群的机器,称为机器节点,第二类是指数据模型中的数据单元,称为数据节点 - Znode,ZooKeeper 将所有数据存储在内存中,数据模型是一棵树,由斜杠/进行分割的路径,就是一个 Znode,如 /foo/path1,每个 Znode 都会保存自己的数据内存,同时还会保存一些列属性信息。Znode 分为持久节点和临时节点两类,持久节点是指一旦这个 Znode 被创建了,除非主动进行 Znode 的移除操作,否则这个 Znode 将一直保存在 ZooKeeper 上,而临时节点的生命周期和客户端会话绑定,一旦客户端会话失效,那么这个客户端创建的所有临时节点都会被移除。另外,ZooKeeper 还允许用户为每个节点添加一个特殊的属性:SEQUENTIAL。一旦节点被标记上这个属性,那么在这个节点被创建的时候,ZooKeeper 会自动在其节点后面追加一个整形数字,其是由父节点维护的自增数字。

 版本

对于每个 Znode,ZooKeeper 都会为其维护一个叫作 Stat 的数据结构,Stat 记录了这个 Znode 的三个数据版本,分别是 version(当前 Znode 的版本)、cversion(当前 Znode 子节点的版本)、aversion(当前 Znode 的 ACL 版本)。

Watcher

ZooKeeper 允许用户在指定节点上注册一些 Watcher,并且在一些特定事件触发的时候,ZooKeeper 服务端会将事件通知到感兴趣的客户端。

ACL

ZooKeeper 采用 ACL(Access Control Lists)策略来进行权限控制,其定义了如下五种权限:

以上是关于细说 ZooKeeper 上篇的主要内容,如果未能解决你的问题,请参考以下文章

zookeeper集群环境搭建(纯zookeeper)

物联网架构成长之路(27)-Docker练习之Zookeeper安装

Zookeeper 提供的API

Zookeeper客户端java代码操作

zookeeper的命令使用

Zookeeper启动流程分析