数据发布/订阅系统
数据分布/订阅(Publish/Subscribe)系统,即所谓的配置中心,顾名思义就是发布者将数据发布到Zookeeper的一个或一系列节点上,供订阅者进行数据订阅,进而达到动态获取数据的目的。实现配置信息的集中式管理和数据的动态更新。
发布/订阅系统有两种设计模式,分别是推(Push)模式和拉(Pull)模式。
推模式:服务端主动将数据更新发送给所有订阅的客户端。
拉模式:客户端主动向服务端发起请求获取最新数据。通常采用定时轮询的方式拉取最新数据。
Zookeeper实现数据发布/订阅的方式
Zookeeper采用的是推拉相结合的方式。客户端向服务端注册自己需要关注的节点,一旦该节点的数据发生变更,那么服务端就会向相应的客户端发送Watcher事件通知,客户端接收到这个消息通知之后,需要主动到服务端获取最新的数据。
如果将配置信息存放到Zookeeper上进行集中管理,那么通常情况下,应用在启动的时候都会主动到Zookeeper服务端上进行一次配置信息的获取。同时,在指定的节点上注册一个Watcher监听,这样一来,只要配置信息发生变更,服务端都会实时通知到所有订阅的客户端,从而达到实时获取最新配置信息的目的。
场景示例:数据库配置信息切换
配置存储
在进行配置管理之前,首先需要将初始化配置信息存储到Zookeeper上去。可以在Zookeeper上创建一个持久节点/configserver/app1/database_config
用于配置信息的存储。然后将管理的配置信息放入到该持久节点中去。
配置获取
集群中每台机器在启动初始化阶段,首先就从Zookeeper配置的持久节点 /configserver/app1/database_config
上读取数据库信息,同时,客户端还需要在该配置节点上注册一个数据变更的Watch监听,一旦发生节点数据变更,所有订阅的客户端都能获取到数据变更的通知。
配置变更
在系统运行过程中,可能会出现需要进行数据库切换的情况,这个时候就需要进行配置的变更。借助Zookeeper,我们只需要将Zookeeper上配置的持久节点 /configserver/app1/database_config
的内容进行更新,Zookeeper就能够帮我们将数据变更的通知发送到所有订阅的客户端中,每个客户端在接收到变更请求后,就可以重新进行最新数据的获取。