茂展的分享博客

Zookeeper深入学习总结

zookeeper深入学习(观察者设计模式)

Zookeeper = 文件系统 + 通知机制
Zookeeper是一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储。但是,zookeeper并不是专门存储数据的,它主要是维护和监控系统的数据的状态的变化的。通过监控这些数据的变化,从而达到基于数据的集群管理。
Zookeeper所提供的服务主要是通过: 数据结构+原句+watcher机制这三个部分来实现的。

初步了解

zookeeper的节点初步介绍

zookeeper中的数据存储在一个叫做ReplicatedDataSource的数据库中,该数据是一个内存数据库,既然是内存数据库,数据量就不会很大
zookeeper的数据存储在内存中,由于内存空间的限制,存储的节点需要根据需求和功能进行选择,都是有ZK节点的性质和该节点所关联的数据实现的。

Zookeeper中每个节点存储的数据都是要进行原子性的操作,也就是读操作将获取与节点相关的所有数据,写操作将替换掉节点所有的数据。每一个节点都拥有自己的ACL(访问控制列表),这个列表规定了用户的权限,即限定了特定用户对目标节点可以执行的操作。

特点

zookeeper特点

zookeeper节点类型

主要有两种,一种是 临时节点,另一种是 永久节点,节点的类型在创建时即被确定,并且不能改变。

临时节点

该节点的生命周期依赖于创建它们的会话。一旦会话(Session)结束,临时节点将被自动删除,当然可以也可以手动删除。虽然每个临时的Znode都会绑定到一个客户端会话,但他们对所有的客户端还是可见的。另外,ZooKeeper的临时节点不允许拥有子节点。

永久节点

该节点的生命周期不依赖于会话,并且只有在客户端显示执行删除操作的时候,他们才能被删除。

存储结构是一个树状,每个节点被称为一个ZNode,默认能够存储1MB的数据,并且每个ZNode都是可以通过路径唯一标识

Zookeeper的常用方式

统一配置信息

把集群的中各个服务器配置存放于每一个ZNode中,节点信息变化,会通知到各个服务器

统一集群模式

主要是把各个集群的状态存放于节点中,哪台服务器宕机了,其他节点会立刻被通知到

服务器动态上下线

服务节点上下线会把信息返回给客户端,客户端将不再调用此服务

软负载均衡

把服务器的访问量存储在ZNode中,然后,客户端去访问的时候,把访问的请求分发给请求少的服务器

Zookeeper监听原理

  1. 首先要有一个main()线程
  2. 在main线程中创建zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信(connect),一个负责监听(listener)
  3. 通过connect线程将注册的监听事件发给zookeeper
  4. 在zookeeper的注册监听列表中将注册的监听事件添加到列表中
  5. zookeeper监听到数据或者路径有变化时,会将这个消息发送给listener线程
  6. listener线程内部调用process()方法。

常见的监听类型

  • 监听节点数据的变化

get [path] watch

  • 监听节点数量的变化

ls [path] watch

------本文结束感谢阅读------
🐶 您的支持将鼓励我继续创作 🐶