Zookeeper什么,它可以做什么?看了这篇就懂了

什么是ZooKeeper,你真的了解它吗。我们一起来看看吧~

什么是 ZooKeeper

ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效、高可用的分布式协调服务,提供了诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知和分布式锁等分布式基础服务。由于 ZooKeeper 便捷的使用方式、卓越的性能和良好的稳定性,被广泛地应用于诸如 Hadoop、HBase、Kafka 和 Dubbo 等大型分布式系统中。

Zookeeper 有三种运行模式:单机模式、伪集群模式和集群模式。

单机模式:
这种模式一般适用于开发测试环境,一方面我们没有那么多机器资源,另外就是平时的开发调试并不需要极好的稳定性。

集群模式:
一个 ZooKeeper 集群通常由一组机器组成,一般 3 台以上就可以组成一个可用的 ZooKeeper 集群了。组成 ZooKeeper 集群的每台机器都会在内存中维护当前的服务器状态,并且每台机器之间都会互相保持通信。

伪集群模式:
这是一种特殊的集群模式,即集群的所有服务器都部署在一台机器上。当你手头上有一台比较好的机器,如果作为单机模式进行部署,就会浪费资源,这种情况下,ZooKeeper 允许你在一台机器上通过启动不同的端口来启动多个 ZooKeeper 服务实例,以此来以集群的特性来对外服务。

ZooKeeper 的相关知识

Zookeeper 中的角色:

领导者(leader):
负责进行投票的发起和决议,更新系统状态。

跟随者(follower):
用于接收客户端请求并给客户端返回结果,在选主过程中进行投票。

观察者(observer):
可以接受客户端连接,将写请求转发给 leader,但是observer 不参加投票的过程,只是为了扩展系统,提高读取的速度。

Zookeeper什么,它可以做什么?看了这篇就懂了

Zookeeper 的数据模型

1.层次化的目录结构,命名符合常规文件系统规范,类似于 Linux。

2.每个节点在 Zookeeper 中叫做 Znode,并且其有一个唯一的路径标识。

3.节点 Znode 可以包含数据和子节点,但是 EPHEMERAL 类型的节点不能有子节点。

4.Znode 中的数据可以有多个版本,比如某一个路径下存有多个数据版本,那么查询这个路径下的数据就需要带上版本。

5.客户端应用可以在节点上设置监视器。

6.节点不支持部分读写,而是一次性完整读写。

Zookeeper什么,它可以做什么?看了这篇就懂了

ZooKeeper 的节点特性

ZooKeeper 节点是生命周期的,这取决于节点的类型。在 ZooKeeper 中,节点根据持续时间可以分为持久节点(PERSISTENT)、临时节点(EPHEMERAL),根据是否有序可以分为顺序节点(SEQUENTIAL)、和无序节点(默认是无序的)。

持久节点一旦被创建,除非主动移除,不然一直会保存在 Zookeeper 中(不会因为创建该节点的客户端的会话失效而消失)。

Zookeeper 的应用场景

ZooKeeper 是一个高可用的分布式数据管理与系统协调框架。基于对 Paxos 算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得 ZooKeeper 解决很多分布式问题。

值得注意的是,ZooKeeper 并非天生就是为这些应用场景设计的,都是后来众多开发者根据其框架的特性,利用其提供的一系列 API 接口(或者称为原语集),摸索出来的典型使用方法。

数据发布与订阅(配置中心)

发布与订阅模型,即所谓的配置中心,顾名思义就是发布者将数据发布到 ZooKeeper 节点上,供订阅者动态获取数据,实现配置信息的集中式管理和动态更新。例如全局的配置信息,服务式服务框架的服务地址列表等就非常适合使用。

应用中用到的一些配置信息放到 ZooKeeper 上进行集中管理。这类场景通常是这样:应用在启动的时候会主动来获取一次配置,同时在节点上注册一个 Watcher。这样一来,以后每次配置有更新的时候,都会实时通知到订阅的客户端,从来达到获取最新配置信息的目的。

分布式搜索服务中,索引的元信息和服务器集群机器的节点状态存放在 ZooKeeper 的一些指定节点,供各个客户端订阅使用。

分布式日志收集系统

这个系统的核心工作是收集分布在不同机器的日志。收集器通常是按照应用来分配收集任务单元,因此需要在 ZooKeeper 上创建一个以应用名作为 path 的节点 P,并将这个应用的所有机器 IP,以子节点的形式注册到节点 P 上。这样一来就能够实现机器变动的时候,能够实时通知到收集器调整任务分配。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxyjf.html