Zookeeper入门(一)

 
Zookeeper是分布式服务治理中间件
 

1、Zookeeper的简介

 
官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中常常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

上面的解释有点抽象,简单来讲zookeeper=文件系统+监听通知机制。
 

2、 ZooKeeper 的做用

1.1 配置管理

在咱们的应用中除了代码外,还有一些就是各类配置。好比数据库链接等。通常咱们都 是使用配置文件的方式,在代码中引入这些配置文件。当咱们只有一种配置,只有一台服务 器,而且不常常修改的时候,使用配置文件是一个很好的作法,可是若是咱们配置很是多, 有不少服务器都须要这个配置,这时使用配置文件就不是个好主意了。这个时候每每须要寻 找一种集中管理配置的方法,咱们在这个集中的地方修改了配置,全部对这个配置感兴趣的 均可以得到变动。Zookeeper 就是这种服务,它使用 Zab 这种一致性协议来提供一致性。现 在有不少开源项目使用 Zookeeper 来维护配置,好比在 HBase 中,客户端就是链接一个 Zookeeper,得到必要的 HBase 集群的配置信息,而后才能够进一步操做。还有在开源的消 息队列 Kafka 中,也使用 Zookeeper来维护broker的信息。在 Alibaba开源的 SOA 框架Dubbo 中也普遍的使用 Zookeeper 管理一些配置来实现服务治理。html

1.2 名字服务

名字服务这个就很好理解了。好比为了经过网络访问一个系统,咱们得知道对方的 IP 地址,可是 IP 地址对人很是不友好,这个时候咱们就须要使用域名来访问。可是计算机是 不能是域名的。怎么办呢?若是咱们每台机器里都备有一份域名到 IP 地址的映射,这个倒 是能解决一部分问题,可是若是域名对应的 IP 发生变化了又该怎么办呢?因而咱们有了 DNS 这个东西。咱们只须要访问一个你们熟知的(known)的点,它就会告诉你这个域名对应 的 IP 是什么。在咱们的应用中也会存在不少这类问题,特别是在咱们的服务特别多的时候, 若是咱们在本地保存服务的地址的时候将很是不方便,可是若是咱们只须要访问一个你们都 熟知的访问点,这里提供统一的入口,那么维护起来将方便得多了。node

1.3 分布式锁

Zookeeper 是一个分布式协调服务。这样咱们就能够利 用 Zookeeper 来协调多个分布式进程之间的活动。好比在一个分布式环境中,为了提升可靠 性,咱们的集群的每台服务器上都部署着一样的服务。可是,一件事情若是集群中的每一个服 务器都进行的话,那相互之间就要协调,编程起来将很是复杂。而若是咱们只让一个服务进 行操做,那又存在单点。一般还有一种作法就是使用分布式锁,在某个时刻只让一个服务去干活,当这台服务出问题的时候锁释放,当即 fail over 到另外的服务。这在不少分布式系统 中都是这么作,这种设计有一个更好听的名字叫 Leader Election(leader 选举)。好比 HBase 的 Master 就是采用这种机制。但要注意的是分布式锁跟同一个进程的锁仍是有区别的,所 以使用的时候要比同一个进程里的锁更谨慎的使用。数据库

1.4 集群管理

在分布式的集群中,常常会因为各类缘由,好比硬件故障,软件故障,网络问题,有些 节点会进进出出。有新的节点加入进来,也有老的节点退出集群。这个时候,集群中其余机 器须要感知到这种变化,而后根据这种变化作出对应的决策。好比咱们是一个分布式存储系 统,有一个中央控制节点负责存储的分配,当有新的存储进来的时候咱们要根据如今集群目 前的状态来分配存储节点。这个时候咱们就须要动态感知到集群目前的状态。还有,好比一 个分布式的 SOA 架构中,服务是一个集群提供的,当消费者访问某个服务时,就须要采用 某种机制发现如今有哪些节点能够提供该服务(这也称之为服务发现,好比 Alibaba 开源的 SOA 框架 Dubbo 就采用了 Zookeeper 做为服务发现的底层机制)。还有开源的 Kafka 队列就 采用了 Zookeeper 做为 Cosnumer 的上下线管理。编程


三、 文件系统

Zookeeper维护一个相似文件系统的数据结构:小程序

 

每一个子目录项如 NameService 都被称做为 znode(目录节点),和文件系统同样,咱们可以自由的增长、删除znode,在一个znode下增长、删除子znode,惟一的不一样在于znode是能够存储数据的。服务器

有四种类型的znode:网络

  • PERSISTENT-持久化目录节点数据结构

    客户端与zookeeper断开链接后,该节点依旧存在架构

  • PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点框架

    客户端与zookeeper断开链接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号

  • EPHEMERAL-临时目录节点

    客户端与zookeeper断开链接后,该节点被删除

  • EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点

    客户端与zookeeper断开链接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

四、 监听通知机制

客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增长删除)时,zookeeper会通知客户端。

就这么简单,下面咱们看看Zookeeper能作点什么呢?

五、Zookeeper能作什么

zookeeper功能很是强大,能够实现诸如分布式应用配置管理、统一命名服务、状态同步服务、集群管理等功能,咱们这里拿比较简单的分布式应用配置管理为例来讲明。

假设咱们的程序是分布式部署在多台机器上,若是咱们要改变程序的配置文件,须要逐台机器去修改,很是麻烦,如今把这些配置所有放到zookeeper上去,保存在 zookeeper 的某个目录节点中,而后全部相关应用程序对这个目录节点进行监听,一旦配置信息发生变化,每一个应用程序就会收到 zookeeper 的通知,而后从 zookeeper 获取新的配置信息应用到系统中。

 

如上,你大体应该了解zookeeper是个什么东西,大概能作些什么了,咱们立刻来学习下zookeeper的安装及使用,并开发一个小程序来实现zookeeper这个分布式配置管理的功能。

相关文章
相关标签/搜索