ZooKeeper 是一个分布式服务框架,它主要是用来解决分布式应用中经常遇到的 一些数据管理问题,如:命名服务、状态同步、配置中心、集群管理等。
一、命名服务
命名服务是分布式系统中比较常见的一类场景。命名服务是分布式系统最基本的 公共服务之一。在分布式系统中,被命名的实体通常可以是集群中的机器、提供 的服务地址或远程对象等——这些我们都可以统称它们为名字(Name),其中较 为常见的就是一些分布式服务框架(如 RPC、RMI)中的服务地址列表,通过使 用命名服务,客户端应用能够根据指定名字来获取资源的实体、服务地址和提供 者的信息等。
二、状态同步
每个节点除了存储数据内容和 node 节点状态信息之外,还存储了已经注册的 APP 的状态信息,当有些节点或 APP 不可用,就将当前状态同步给其他服务。
三、配置中心
现在我们大多数应用都是采用的是分布式开发的应用,搭建到不同的服务器上, 我们的配置文件,同一个应用程序的配置文件一样,还有就是多个程序存在相同 的配置,当我们配置文件中有个配置属性需要改变,我们需要改变每个程序的配 置属性,这样会很麻烦的去修改配置,那么可用使用 ZooKeeper 来实现配置中心, ZooKeeper 采用的是推拉相结合的方式: 客户端向服务端注册自己需要关注的 节点,一旦该节点的数据发生变更,那么服务端就会向相应的客户端发送 Watcher 事件通知,客户端接收到这个消息通知后,需要主动到服务端获取最新的数据。
四、集群管理
所谓集群管理,包括集群监控与集群控制两大块,前者侧重对集群运行时状态的收集,后者则是对集群进行操作与控制,在日常开发和运维过程中,我们经常会 有类似于如下的需求:
①希望知道当前集群中究竟有多少机器在工作。
②对集群中每台机器的运行时状态进行数据收集。
③对集群中机器进行上下线操作。
五、ZooKeeper两大特性
①客户端如果对 ZooKeeper 的一个数据节点注册 Watcher 监听,那么当该数据节点的内容或是其子节点列表发生变更时,ZooKeeper 服务器就会向订阅的客户端发 送变更通知。
②对在 ZooKeeper 上创建的临时节点,一旦客户端与服务器之间的会话失效,那么 该临时节点也就被自动清除。
Watcher(事件监听器),是 Zookeeper 中的一个很重要的特性。Zookeeper 允许用户在指定节点上注册一些 Watcher,并且在一些特定事件触发的时候, ZooKeeper 服务端会将事件通知到感兴趣的客户端上去,该机制是 Zookeeper 实现分布式协调服务的重要特性。
0 生产者启动
1 生产者注册至 zookeeper
2 消费者启动并订阅频道
3 zookeeper 通知消费者事件
4 消费者调用生产者
5 监控中心负责统计和监控服务状态