zookeeper是什么
定义:zookeeper是一个开源的分布式协调服务,一个典型的分布式数据一致性解决方案。
前世今生:Yahoo创建,最初为 hadoop的子项目,是google Chubby的开源实现,现为Apache的顶级项目。
分布式应用程序可以基于zookeeper实现数据发布订阅、负载均衡、命名服务、分布式锁、集群管理等一系列功能。
zookeeper提供什么能力
zookeeper搭建的集群可以保证以下分布式协议
- 顺序一致性
从同一个客户端发起的多个事务请求,将会严格按照发起顺序应用到各个节点
- 原子性
所有事务请求的处理结果在集群中所有机器的应用情况一致。所有机器要么全部应用,要么全部不应用。
- 单一视图
无论连接的是哪个节点,效果都一样
- 可靠性
一旦一个事务被应用,那么该事物状态会被保持
- 实时性
zookeeper保证一定时间段后,客户端从服务端读取到最新状态
zookeeper的特点
数据模型简单
zk的数据模型是一个共享的、树树型结构的名字空间。由一系列ZNode组成,ZNode被称为数据节点,具有层级关系。zk将全量数据存储在内存中,以此来实现提高服务器吞吐,减少延迟的目的
可构成集群
zk集群由一组机器构成,3~5台即可,组成zk集群的每台机器在内存中维护当前的服务器状态,并且每台机器之间都互相保持着通信。集群中只要超过一般的机器能正常工作,那整个集群就能正常对外服务
顺序访问
对于来自客户端的每个更新请求,zk都会分配一个全局唯一的递增编号,事务操作将按照这个编号按照先后顺序执行,且该特性可被实用于其他用途。
高性能
全量数据都存储在内存中,并直接服务于客户端的所有非事务请求,尤其适合读操作为主的场景。
zookeeper的基本概念
zk的概念此处只做基本介绍和简单讲解,后续做详细讲解
集群角色
- Leader
一个,提供读写能力
- Follower
多个,提供读能力,选举Leader能力
- Observer
多个,提供读能力,不参与选举
会话
zk客户端和服务器之间是TCP长连接。sessionTimeout设置一个会话超时时间,连接异常断开时,只要在超时时间内连接上任意一台zk节点,之前的会话依然有效。
节点
1.机器节点
构成集群的机器
2.数据节点 ZNode
ZNode数据节点,数据模型中的数据单元。数据模型是一棵树,由斜杠(/)分割路径,保存数据内容和属性。可分为持久节点和临时节点两类
版本
每个ZNode上面都有一个stat的数据结构,记录3个数据版本:
- version:当前ZNode版本
- cversion:当前ZNode子节点的版本
- aversion:当前ZNode的ACL版本
ACL
(access control lists) 权限控制清单
- CREATE: 创建子节点权限
- READ: 获取节点数据和子节点列表的权限
- WRITE: 更新节点数据的权限
- DELETE: 删除子节点的权限
- ADMIN: 设置节点ACL的权限
create和delete都是针对子节点的权限控制
Watcher
事件监听。zk的重要特性,zk允许用户注册事件到指定节点,当特定时间触发,事件通知会被发送到具体的客户端。