概述:做为一枚搬砖工人,只能不能的学习,稍微偷懒感受就要被淘汰了,赶忙弥补下。下面开始啰嗦的理论知识阐述,虽然啰嗦可是对于后续理解仍是颇有必要。java
Zookeeper是一个高性能,分布式的,开源分布式应用协调服务。它提供了简单原始的功能,分 布式应用能够基于它实现更高级的服务,好比同步,配置管理,集群管理,名空间。它被设计为 易于编程,使用文件系统目录树做为数据模型。服务端跑在java上,提供java和C的客户端 APInode
什么是分布式?linux
什么是协调服务?编程
A distributed system consists of multiple computers that communicate through a computer network and interact with each other to achieve a common goal数组
多台计算机构成网络
计算机之间经过我网络进行通讯数据结构
彼此进行交互并发
共同目标负载均衡
协调: 多个节点一块儿完成的一个动做框架
举例:
集群成员管理 (Group membership)
锁 (Locking)
选主 (Leader Election)
分层结构
树形结构中的每一个节点叫作Znode
每一个Znode都有数据 (byte[] 数组),也能够有子节点
节点路径 一、斜线分割: /Zoo/Duck 二、没有相对路劲
经过数据结构stat来存储数据的变化 ACL的变化和时间戳
数据发生变化时,版本号会递增
能够对Znode中的数据进行读写操做
数据发布/订阅即所谓的配置中心:发布者将数据发布到zk的一个或者一系列节点上,订阅者进行数据订阅,当数据有变化时,能够及时获得数据的变化通知
本质是利用zookeeper的配置管理功能,涉及的步骤为:
在分布式系统中,命名服务(ͧName Serviceͨ)也是很重要的应用场景,经过zk也能够实现相似 于J2EE中的JNDI的效果ͺ分布式环境下,命名服务更可能是资源定位,并非是真正的实体资源, 其本质也是用到zk的集中配置管理和查找
经过watcher和通知机制实现
分布式锁
分布式事务
当前集群中的机器数量
集群中机器的运行时状态
集群中节点的上下线操做
集群节点的统一配置
临时节点
顺序节点
排它锁
共享锁
Leader:为客户端提供读和写服务
Follower:提供读服务,全部写服务都须要转交给Leader角色,参与选举
Observer:提供读服务,不参与选举过程,通常是为了加强zk集群的读请求并发能力
– Zk的客户端与zk的服务端之间的链接
– 经过心跳检测保持客户端链接的存活
– 接收来自服务端的watch事件通知
– 能够设置超时时间
不是机器的意思
ZK树形结构中的数据节点,用于存储数据
持久节点:一旦建立,除非主动调用删除操做,不然一直存储在zk上
临时节点:与客户端的会话绑定,一旦客户端会话失效,这个客户端建立的全部临时及诶单都会被移除
SEQUENTIAL Znode :建立节点时,若是设置属性SEQUENTIAL,则会自动在节点名后面追加一个整型数字
version : 当前Znode的版本
Cversion : 当前Znode的子节点的版本
Aversion : 当前Znode的ACL(访问控制)版本
做用于Znode节点上
多种事件通知:数据更新,子节点状态等
相似于linux/unix的权限控制
CREATE:建立子节点的权限
READ:获取节点数据和子节点列表的权限
WRITE:更新节点数据的权限
– DELETE:删除子节点的权限