Zookeeper是一个典型的发布订阅模式的分布式数据管理和协调框架,可以用来进行分布式数据的发布与订阅,而且通过其中丰富的数据节点类型与watcher事件通知机制,可以构建一系列分布式应用中设计的核心功能,下边对这些场景做下介绍。
二、应用场景 1.数据发布订阅数据发布订阅系统,我们通过发布者将数据信息存储到ZooKeeper的节点上,订阅者对数据进行订阅,达到动态获取数据的一个效果。
发布订阅系统一般由两种模式:推模式和拉模式,推模式服务端主动将数据更新发送给所有订阅的客户端;拉模式是客户端主动发起请求获取最新数据,客户端一般进行定时拉取。
Zookeeper采用的是推拉结合的方式:客户端向服务端注册自己关注的节点,如果阶段数据有变更,服务端会向客户端发送watcher时间通知,客户端收到后主动向服务器获取最新的数据。
应用场景举例:数据库切换配置管理
1.首先我们将需要管理的数据信息写入道指定的数据节点中。
2.集群中每台机器在启动初始化阶段,从指定的节点上读取配置信息,同时在改节点上注册一个数据变更的watcher监听。
3.在系统运行的过程中,可能会出现数据库切换的情况,这个时候需要进行配置变更。我们对节点上的内容进行更新,zookeeper会将数据变更的通知发给所有客户端,客户端在接受到这个变更通知后,重新对数据进行获取。
命名服务是我们经常可以见到的场景。在分布式系统中,被命名的实体通常可以是集群中的机器,提供的服务地址或者远程对象等。广义上命名服务的资源地址不一定都是实体资源,在分布式环境中,上层应用仅仅需要一个全局唯一的名字,类似于数据库中的唯一主键。
全局唯一ID
一般说起全局唯一ID,都会想到UUID,但是UUID本身存在一定的缺陷。
1.长度过长
UUID最大的问题在于生成的字符串过长,需要更多的一个空间区存储。
2.含义不明
UUID是一个包含32位字符和4个短线的字符串,类似于“e70f1357-f260-46ff-a32d-53a086c57ade”的一个字符串,无法从字母上看出任何含义。
调用Zookeeper节点创建的API接口可以创建一个顺序节点,并且在API返回值中会返回这个节点的完整名字。利用这个特性,我们可以来生成唯一id。



