Zookeeper目的:旨在减轻构建健壮的分布式系统的任务
Zookeeper的作用: 可以在分布式系统中协作多个任务
这里的协作 包括协同和管理竞争
协同例子:主-从节点之间的协作,如主节点更新数据,从节点更新数据
管理竞争例子:主-从节点之间主节点只有一个,从节点竞争成为主节点
Zookeeper不适用的场景: 不适用存储海量数据,默认节点数据限制1MB
运行方式:Zookeeper服务端和客户端都是以进程的方式运行的,这就意味着会涉及到多线程
在分布式系统中的进程通信有两种方式:
A 直接通过网络进行信息交换
B 读写某些共享存储(zookeeper使用的方式)
Zookeeper结构: 类似文件系统的层级树状结构,每一个节点(znode)可能会有数据,也可能没有数据,
且数据的存储方式为 字节数组;
znode4种类型:持久有序,临时有序,持久无序,临时无序;
持久:这种节点只有使用delete才会被删除, 用例:主从模式中的从
临时:创建节点的客户端一旦断开连接就会删除 用例: 主从模式中的主
有序:分配一个唯一单调递增的整数,序号会被加到路径后 例: /test1000
无序:
注意:因为临时节点在客户端断开时被删除,所以规定了临时节点不能拥有子节点,但是这
存在解决方案,可以让临时节点的子节点都为临时节点,只不过这个功能还未实现;
监视与通知:如果每次客户端访问znode,每需要获取数据(轮询),这样代价太大,所以使用基于通知机制,可设置监视点,来监视节点的数据是否发生变更,如果节点数据发生变更,zookeeper会先通知客户端,然后变更数据;
版本号:每个znode都有一个版本号,随着数据的更新而自增,使用setData和delete用版本号做为参数的时候,操作znode,当客户端和服务端的版本号一致时才能成功
zk运行模式: 独立模式(单机),仲裁模式(集群),实习中接触到的项目就是3个zk
zk回话:客户端和一个服务端的连接,就是一个回话
第一个not_conneted 就是无连接,没啥好说的
conecting:客户端初始化ok
conneted:客户端和服务端建立连接,当然,如果客户端和服务端断开了连接,会变为conecting状态,如果能够重新连上另外一个zk服务器的话,那么又会变为conneted状态
close:会话过期