Zookeeper简介
Zookeeper系列文章
1.Zookeeper简介
2.Zookeeper集群安装
3.原生API操作Zookeeper
4.zkClient框架操作Zookeeper
5.Curator框架操作Zookeeper
1. 什么是 Zookeeper?
-
Zookeeper是一个高效的分布式协调服务,它暴露了一些公用服务,比如命名/配置管理/同步控制/群组服务等。我们可以使用ZK来实现比如达成共识/集群管理/leader选举等
-
Zookeeper 是一个高可用的分布式管理与协调框架,基于 ZAB 算法(原子消息广播协议)的实现。该框架能够很好地保证分布式环境中数据的一一致性。也正是基于这样的特性,使得 Zookeeper 成为了解决分布式一致性问题的利器。
zookeeper五个特性
-
顺序一致性:从一个客户端发起的事务请求,最终将会严格地按照其发起的顺序被应用到 zookeeper 中去。
-
原子性:所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群所有的机器都成功应用了某一事务,要么都没有应用,一定不会出现部分机器应用了该事务,而另一部分没有应用的情况。
-
单一视图:无论客户端连接的是哪一个 zookeeper 服务器,其看到的服务器端数据模型都是一致的。
-
可靠性:一旦服务器成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务器端状态将会被一致保留下来。除非有另外一个事务对其更改。
-
实时性:通常所说的实时性就是指一旦事务被成功应用,那么客户端就能立刻从服务器上获取变更后的新数据,zookeeper 仅仅能保证在一段时间内,客户端最终一定能从服务幕端读敢最新的数据状态。
-
2. Zookeeper设计目标
-
目标 1: 简单的数据结构。zookeeper 就是以简单的树形结构来进行相互协调的(也叫树形名字空间)。
-
目标 2: 可以构建集群。一般 zookeeper 集群通常由一组机器构成,一般 3~5 台机器就可以组成一个 zookeeper 集群了。只要集群中超过半数以上的机器能够正常工作,那么整个集群就能够正常对外提供服务。
-
目标 3: 顺序访问。对于来自每一个客户端的每一个请求,zookeeper 都会分配一个全局唯一的递增编号,这个编号反应了所有事务操作的先后顺序,应用程序可以使用 zookeeper 的这个特性来实现更高层次的同步。
-
目标 4: 高性能。由于 zookeeper 将全量数据存储在内存中,并直接服务与所有的非事务请求,因此尤其是在读操作为主的场景下性能非常突出。在 JMater 压力测试下(100%读请求场景下),其结果大约在 12* ~13 W 的 QPS.
3. Zookeeper的结构
-
Zookeeper会维护一个具有层次关系的数据结构,它非常类似于一个标准的文件系统.
image.png
4. Zookeeper的数据模型
-
1、每个子目录项如 NameService 都被称作为 znode,这个 znode 是被它所在的路 径唯一标识,如Server1这个znode的标识为/NameService/Server1
-
2、znode 可以有子节点目录,并且每个 znode 可以存储数据,注意 EPHEMERAL类型的目录节点不能有子节点目录
-
3、Znode 是有版本的,每个 znode 中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据
-
4、znode 可以是临时节点,一旦创建这个 znode。的客户端与服务器失去联系,这个 znode 也将自动删除,Zookeeper 的客户端和服务器通信采用长连接方式,每个客户端和服务器通过心跳来保持连接,这个连接状态称为 session,如果 znode 是临时节点,这个 session 失效,znode 也就删除了.(利用zookeeper实现分布式锁使用的就是此特性)
-
5、znode 的目录名可以自动编号,如 App1 已经存在,再创建的话,将会自动命名为 App2
-
6、znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化一旦变化可以通知设置监控的客户端,这个是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基于这个特性实现的,后面在典型的应用场景中会有实例介绍
5. Zookeeper集群组成
- ZK server 根据其身份特性分为三种:leader, Follower, Observer,其中 Follower 和 Observer 又统称 Learner(学习者)
- Leader:负责客户端的 writer 类型请求
- Follower:负责客户端的 reader 类型请求,参与 leader 选举等。
- Observer:特殊的“Follower“,其可以接受客户端 reader 请求,但不参与选举。(扩容系统支撑能力,提高了读取速度。因为它不接受任何同步的写入请求,只负责与 leader 同步数据)
6. Zookeeper应用场景
-
配置管理:配置的管理在分布式应用环境中很常见,比如我们在平常的应用系统中,经常会碰到这样的需求:如机器的配置列表、运行时的开关配置、数据库配置信息等。这些全局配置信息通常具备以下 3 个特性:
- 1 数据量比较小。
- 2 数据内容在运行时动态发生变化。
- 3 集群中各个节点共享信息,配置一致。
-
集群管理:Zookeeper 不仅能够帮你维护当前的集群中机器的服务状态,而且能够帮你选出一个“总管”,让这个总管来管理集群,这就是 Zookeeper 的另一个功能 Leader,并实现集群容错功能。
- 1 希望知道当前集群中究竟有多少机器工作。
- 2 对集群中每天集群的运行时状态进行数据收集。
- 3 对集群中每台集群进行上下线操作。
-
发布与订阅:Zookeeper 是一个典型的发布/订阅模式的分布式数控管理与协调框架,开发人员可以使用它来进行分布式数据的发布与订阅。
-
数据库切换:比如我们初始化 zookeeper 的时候读取其节点上的数据库配置文件,当配置一旦发生变更时,zookeeper 就能帮助我们把变更的通知发送到各个客户端,每个了服务在接收到这个变更通知后,就可以从新进行最新数据的获取。
-
分布式日志收集:我们可以做一个日志系统收集集群中所有的日志信息,进行统一管理。
下篇文章在这里 Zookeeper集群安装。