ZooKeeper是一个典型的分布式数据一致性解决方案。分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。ZooKeeper可以保证如下分布式一致性特性。

  • 顺序一致性
  • 原子性
  • 单一视图
  • 可靠性
  • 实时性

    基本概念

    集群角色

  • Leader:为客户端提供读和写服务

  • Follower:为客户端提供读服务和参与Leader选举
  • Observer:为客户端提供读服务不参与Leader选举

问题:Observer存在的意义?
Observer可以在不影响写性能的情况下提升集群性能

会话(Session)

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

数据节点(ZNode)

ZNode是ZooKeeper中最小数据单位,ZooKdeeper的数据模型是一颗树(ZNode Tree),由斜杠(/)进行分割的路径,就是一个ZNode,每个ZNode上都会保存自己的数据内容,同时还会保存一系列属性信息。
ZooKeeper节点类型可以分为三大类:

  • 持久性节点(Persistent)
  • 临时性节点(Ephemeral)
  • 顺序性节点(Sequential)

    版本

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

    Watcher(事件监听器)

    Watcher(事件监听器),是ZooKeeper中一个很重要的特性,ZooKeeper允许用户在指定节点上注册一些Watcher,并且在一些特定事件触发的时候,ZooKeeper服务端会将事件通知到感兴趣的客户端

    ACL

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

  • CREATE:创建字节点

  • READ:获取节点数据和字节点列表
  • WRITE:更新节点数据
  • DELETE:删除字节点
  • ADMIN:设置节点ACL

应用场景

数据发布订阅

命名服务

集群管理

Master选举

分布式锁

分布式队列