1、【zookeeper】zookeeper简介

1 官方定义:

Zookeeper是一个高性能的,分布式的,开源分布式的应用协调服务。它提供了简单原始的功能,分布式应用基于它实更高级 的服务,比如,配置管理,集群管理。它被 设计易于编程,使用文件系统目录树作数据模型。服务端端跑在java,提供java和C的客户端 API 。

在官方定义中,我们可以主要解释两点就:
1、分布式
2、协调服务

1、A distributed system consists of multiple computers that communicate through a computer network and interact with each other to achieve a common goal

  • 多台机器
  • 通过网络通信
  • 相互交互
  • 共同目标
    1、【zookeeper】zookeeper简介
    协调:多个节点一起完成一个目标。
  • 集群成员管理
  • 选主
  • 同步
  • 发布-订阅

zookeeper就是为了解决以上问题而诞生的。

2 基本概念:

集群角色

  • Leader客户端提供读和写服务
    zk 集群的主节点,所有的写操作,都必须哟leader来完成。其他服务连接的时候不一定是leader,可以是其他的follower,observer等,当有写操作的时候则交给leader。
  • Follower提供读服务,所有写服务都需要转交给Leader角色,参与选举
  • Observer提供读服务,参选举过程,一般是了增强zk集群的读请求并发能力 (不常用)

会话session

  • Zk的客户端与zk的服务端之间的连接 。
  • 通过心跳检测,保持客户端连接的存活。
  • 接收来自服务端的watch事件通知 。
  • 可以设置超时时间 。

数据节点Znode

  • 不是机器的意思 。
  • 是Zk树形结构中的数据节点,用于存储数据
  • 持久节点:一旦创建,除非调用删除操作,否一直存在zk上
  • 临时节点:与客户端的会话绑定,一客户端会话失效,这个客户端建的所有临时节点都会被移除
  • SEQUENTIAL Znode:创建节点时,如果置属性SEQUENTIAL,会自在节点面追一个 整型数字

版本

  • Version:当前Znode的版本
  • Cversion:当前Znode的节点的版本
  • Aversion:当前Znode的ACL(访问控制)版本

Watcher

  • 作用于Znode节点
  • 多种事件通知:数据更新,子节点状态等

ACL

  • Access Control Lists
  • 类似于linux的权限控制
  • CREATE:创建子节点的权限
  • READ:获取节点数据和子节点列表的权限
  • WRITE:更新节点数据的权限
  • DELETE:删除子节点的权限
  • ADMIN:置节点ACL的权限

CREATE和DELETE是针对节点的权限控制

3 数据模型

1、【zookeeper】zookeeper简介

分层结构

  • 树形结构中的每个节点做Znode
  • 每个Znode都有数据(byte[]类型),也可以有子节点
  • 节点路径
    • 斜线分隔:/Zoo/Duck
    • 没有相对路径
  • 通过数据结构stat来储数据的变化 ACL的变化和时间戳
  • 数据发变化时,版本号会递增
  • 对Znode中的数据进行读写操作