大数据生态之zookeeper(典型应用场景)
1. 命名服务
命名服务是分布式系统中较为常见的一类场景,分布式系统中,被命名的实体通常可以是集群中的机器、提供的服务地址或者远程对象,通过命名服务,客户端可以根据指定名字来获取资源的实体、服务地址和提供者的信息。Zookeeper可以帮助应用系统通过资源引用的方式来实现对资源的定位和使用。Zookeeper 也可帮助应用系统通过资源引用的方 式来实现对资源的定位和使用,广义上的命名服务的资源定位都不是真正意义上的实体资源, 在分布式环境中,上层应用仅仅需要一个全局唯一的名字。Zookeeper 可以实现一套分布式 全局唯一 ID的分配机制。
2. 配置管理
程序总需要配置,如果程序分散到各个机器上,要逐个改变配置就变得困难,现在这些配置全部放入zookeeper中,保存在zookeeper的某个目录节点中,然后所有相关的应用程序对这个目录节点进行监听,一旦配置信息发生变化,每一个应用程序就会收到zookeeper的通知,然后从zookeeper获取新的配置信息应用到系统中就好。例:以安装hadoop集群为例,集群中的每一个节点的配置文件统一,在zk管理配置文件时,用监听的手段,监听配置文件内容是否被修改,配置文件是否添加配置文件是否删除。以便于各个集群节点中同步配置文件。
3.集群管理
所谓的集群管理分两大块:是否有机器加入/退出,选举master
(1)是否有节点机器加入或者退出
所有的机器约定在父目录GroupMembers 下创建临时目录节点,然后监听父目录节点的子节点变化的信息。一旦有机器挂掉,该机器与zookeeper的连接断开,其所创建的临时节点目录被删除。所有其他机器都收到通知:某个兄弟目录被删除,于是,所有人都 知道:有兄弟挂了。新机器加入也是类似,所有机器收到通知:新兄弟目录加入,又多了个新兄弟。
(2)选举master
所有机器创建临时顺序编号目录节点,每次选取编号最小 的机器作为 master 就好。
4. 分布式锁
在zk中锁有三种:写锁、读锁、时序锁。
写锁:在zk上创建的一个临时的无编号的节点。由于是无序编号,在创建时不会自动编号,导致只能客户端有一个客户端得到锁,然后进行写入。
读锁:在zk上创建一个临时的有编号的节点,这样即使下次有客户端加入是同时创建相同的节点时,他也会自动编号,也可以获得锁对象,然后对其进行读取。
时序锁:在zk上创建的一个临时的有编号的节点根据编号的大小控制锁。
5.队列管理
在zk中有两种队列管理方式:
(1)同步队列:当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达。
作用:在约定目录下创建临时目录节点,监听节点数目是否是我们要求的数目。
(2)先进先出队列:队列按照 FIFO 方式进行入队和出队操作。
作用:和分布式锁服务中的控制时序场景基本原理一致,入列有编号,出列按编号。