官网给出的架构图就描述的是一个集群版的 ZooKeeper。通常 3 台服务器就可以构成一个 ZooKeeper 集群了 。
为什么最好使用奇数台服务器构成 ZooKeeper 集群?
我们知道在 ZooKeeper 中 Leader 选举算法采用了 Zab 协议 。Zab 核心思想是当多数 Server 写成功,则任务数据写成功:
- 如果有 3 个 Server,则最多允许 1 个 Server 挂掉 。
- 如果有 4 个 Server,则同样最多允许 1 个 Server 挂掉 。
所以选择奇数个 ZooKeeper Server 即可,这里选择 3 个 Server 。
二、关于 ZooKeeper 的一些重要概念Ⅰ.重要概念总结
关于 ZooKeeper 的一些重要概念:
- ZooKeeper 本身就是一个分布式程序(只要半数以上节点存活,ZooKeeper 就能正常服务) 。
- 为了保证高可用,最好是以集群形态来部署 ZooKeeper,这样只要集群中大部分机器是可用的(能够容忍一定的机器故障),那么 ZooKeeper 本身仍然是可用的 。
- ZooKeeper 将数据保存在内存中,这也就保证了 高吞吐量和低延迟(但是内存限制了能够存储的容量不太大,此限制也是保持 Znode 中存储的数据量较小的进一步原因) 。
- ZooKeeper 是高性能的 。在“读”多于“写”的应用程序中尤其地高性能,因为“写”会导致所有的服务器间同步状态 。(“读”多于“写”是协调服务的典型场景 。)
- ZooKeeper 有临时节点的概念 。当创建临时节点的客户端会话一直保持活动,瞬时节点就一直存在 。
- 而当会话终结时,瞬时节点被删除 。持久节点是指一旦这个 ZNode 被创建了,除非主动进行 ZNode 的移除操作,否则这个 ZNode 将一直保存在 Zookeeper 上 。
- ZooKeeper 底层其实只提供了两个功能:①管理(存储、读取)用户程序提交的数据;②为用户程序提交数据节点监听服务 。
Ⅱ.会话(Session)
Session 指的是 ZooKeeper 服务器与客户端会话 。在 ZooKeeper 中,一个客户端连接是指客户端和服务器之间的一个 TCP 长连接 。
客户端启动的时候,首先会与服务器建立一个 TCP 连接,从第一次连接建立开始,客户端会话的生命周期也开始了 。
通过这个连接,客户端能够通过心跳检测与服务器保持有效的会话,也能够向 Zookeeper 服务器发送请求并接受响应,同时还能够通过该连接接收来自服务器的 Watch 事件通知 。
Session 的 sessionTimeout 值用来设置一个客户端会话的超时时间 。
当由于服务器压力太大、网络故障或是客户端主动断开连接等各种原因导致客户端连接断开时,只要在 sessionTimeout 规定的时间内能够重新连接上集群中任意一台服务器,那么之前创建的会话仍然有效 。
在为客户端创建会话之前,服务端首先会为每个客户端都分配一个 sessionID 。
由于 sessionID 是 Zookeeper 会话的一个重要标识,许多与会话相关的运行机制都是基于这个 sessionID 的 。
因此,无论是哪台服务器为客户端分配的 sessionID,都务必保证全局唯一 。
Ⅲ.Znode
在谈到分布式的时候,我们通常说的“节点"是指组成集群的每一台机器 。
然而,在 ZooKeeper 中,“节点"分为两类:
- 第一类同样是指构成集群的机器,我们称之为机器节点 。
- 第二类则是指数据模型中的数据单元,我们称之为数据节点一ZNode 。
在 Zookeeper 中,Node 可以分为持久节点和临时节点两类 。所谓持久节点是指一旦这个 ZNode 被创建了,除非主动进行 ZNode 的移除操作,否则这个 ZNode 将一直保存在 ZooKeeper 上 。
而临时节点就不一样了,它的生命周期和客户端会话绑定,一旦客户端会话失效,那么这个客户端创建的所有临时节点都会被移除 。
另外,ZooKeeper 还允许用户为每个节点添加一个特殊的属性:SEQUENTIAL 。
一旦节点被标记上这个属性,那么在这个节点被创建的时候,ZooKeeper 会自动在其节点名后面追加上一个整型数字,这个整型数字是一个由父节点维护的自增数字 。
推荐阅读
- java反射机制
- 互联网前端开发技术之JavaScript JSON语法详解
- 5大常用jquery插件,JavaScript框架小常识
- 2019 年常用 JavaScript 正则大全
- java生成微信小程序二维码
- 十年技术大牛总结:分布式架构之日志技术
- 图解 Java 垃圾回收机制,写得非常好
- 一文读懂 JavaScript 和 ECMAScript 的区别
- 阿里技术大牛:一份架构师成神路线图
- 看看顶级互联网公司都在研究的无服务器架构,看完收获满满
