Znode分为永久节点、持久节点和时序节点。具体在节点创建过程中,一般是组合使用,可以生成以下 4 种节点类型。
PERSISTENT (永久节点)
EPHEMERAL(临时节点)
PERSISTENT _SEQUENTIAL(永久顺序节点)
EPHEMERAL_SEQUENTIAL(临时顺序节点)
顾名思义,所谓持久节点,是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点,不会因为创建该节点的客户端会话失效而消失;临时节点的生命周期和客户端会话绑定。如果客户端会话失效,那么这个节点就会自动被清除;时序节点会记录每个子节点创建的先后顺序,ZooKeeper会自动为给定节点名加上一个数字后缀,作为新的节点名。Zookeeper的许多功能都是基于时序节点的前提上实现的。
值得注意的是,节点Znode可以包含数据和子节点, 但是EPHEMERAL类型的 节点不能有子节点。在java中我们可以通过getChildren来获取节点的子节点信 息,以及使用getData来获取节点的数据信息。这点在后文中会提到。
客户端也可以在Znode设置watcher(监听器),有点类似于java中的Listener,watcher在zookeeper是一个核心功能,可以监视目录节点的数据变化以及子目录的变化,一旦这些状态发送变化,服务器就会通知所有设置在这个目录上的watcher,从而每个客户端都很快知道它所关注的目录节点状态发生变化。需要留意的是,这些watcher只能触发一次。
上面介绍了zookeeper的一些基本概念以及数据结构,让我们来看看zookeeper究竟能帮我们做什么呢?
应用场景1:统一命名服务
简单点来说,就是伪分布式系统提供一套完整的命名规则。既能产生唯一的名称又便于让人识别和记住。
应用场景2:配置管理
通过zookeeper达到统一的配置文件管理,将配置文件保存在zookeeper的某个目录节点中,然后将所有需要修改的应用及其监控配置信息的状态(也就是用上面我们说到的watcher)。一旦配置文件发生变化,每台机器就会收到zookeeper的通知。然后从zookeeper获取到最新的配置信息应用到系统中。
应用场景3:集群管理
如果有多台server组成的一个服务集群,那么必须要一个“总管”知道当前集群中每台机器的服务状态,一旦有机器不能提供服务,集群中的其他机器必须知道,同样当增加一台或多台server,同样也必须让“总管知道”,从而做出调整重新分配服务策略。Zookeeper不仅能维护当前集群中机器的服务状态,而且能够选出一个“总管”,让这个总管来管理集群。
应用场景4:数据发布/订阅(其实也就是dubbo的注册中心)
数据发布/订阅系统,就是将数据发布到ZooKeeper的一个或一系列节点上,供订阅者进行数据订阅,从而达到动态获取数据的目的。发布/订阅系统一般有两种设计模式,分别是推(Push)和拉(Pull)。ZooKeeper中采用的是推拉接口的方式:客户端向服务端注册自己需要关注的节点,一旦该节点数据发生变更,服务端就会向相应的客户端发送Watcher事件通知,客户端收到这个消息后,需要主动到服务端获取最新的数据。
应用场景5:负载均衡
在分布式系统中,负载均衡是一种普遍的技术。ZooKeeper作为一个集群,负责数据的存储以及一系列分布式协调。所有的请求,会通过ZooKeeper通过一些调度策略去协调调度哪一台服务器。
本篇文章是有青岛达内培训为您呈现,希望给您带来更多更好的文章