什么是 ZooKeeper?
ZooKeeper 是一种分布式协调服务, 用于管理大型主机. 在分布式环境中协调和管理服务是一个复杂的过程. ZooKeeper 通过其简单的架构和 API 解决了这个问题. ZooKeeper 允许开发人员专注于核心应用程序逻辑, 而不必担心应用程序的分布式特性.
ZooKeeper 提供哪些服务?
1. 命名服务 - 按名称标识集群中的节点. 它类似于 DNS, 但仅对于节点.
2. 配置管理 - 加入节点的最近的和最新的系统配置信息.
3. 集群管理 - 实时地在集群和节点状态中加入 / 离开节点.
4. 选举算法 - 选举一个节点作为协调目的的 leader.
5. 锁定和同步服务 - 在修改数据的同时锁定数据. 此机制可帮助你在连接其他分布式应用程序 (如 Apache HBase) 时进行自动故障恢复.
6. 高度可靠的数据注册表 - 即使在一个或几个节点关闭时也可以获得数据.
使用 ZooKeeper 有哪些好处?
1. 简单的分布式协调过程
2. 同步 - 服务器进程之间的相互排斥和协作. 此过程有助于 Apache HBase 进行配置管理.
3. 有序的消息
4. 序列化 - 根据特定规则对数据进行编码. 确保应用程序运行一致. 这种方法可以在 MapReduce 中用来协调队列以执行运行的线程.
5. 可靠性
6. 原子性 - 数据转移完全成功或完全失败, 但没有事务是部分的.
ZooKeeper 架构
ZooKeeper 采用 B/S 架构, 架构图如下:
ZooKeeper 架构
Sessions
会话对于 ZooKeeper 的操作非常重要. 会话中的请求按 FIFO 顺序执行. 一旦客户端连接到服务器, 将建立会话并向客户端分配会话 ID.
客户端以特定的时间间隔发送心跳以保持会话有效. 如果 ZooKeeper 集合在超过服务器开启时指定的期间 (会话超时) 都没有从客户端接收到心跳, 则它会判定客户端死机.
会话超时通常以毫秒为单位. 当会话由于任何原因结束时, 在该会话期间创建的临时节点也会被删除.
Watches
监视是一种简单的机制, 使客户端收到关于 ZooKeeper 集合中的更改的通知. 客户端可以在读取特定 znode 时设置 Watches.ZooKeeper 节点称为 znode,Watches 会向注册的客户端发送任何 znode(客户端注册表)更改的通知.
znode 更改是与 znode 相关的数据的修改或 znode 的子项中的更改. 只触发一次 watches. 如果客户端想要再次通知, 则必须通过另一个读取操作来完成. 当连接会话过期时, 客户端将与服务器断开连接, 相关的 watches 也将被删除.
参考资料
https://www.w3cschool.cn/zookeeper/zookeeper_overview.html
来源: http://www.jianshu.com/p/c8384c3b8c17