第一章-zookeeper简介

一、背景

  在互联网应用中,为了适应业务的要求,企业级的系统通常是庞大的,为了解决这一问题,分布式架构应运而生。

  分布式架构带来了其特有的复杂性。各个系统需要协调服务,于是zookeeper便诞生了。

  zookeeper主要用来解决分布式集群中应用系统的一致性问题。

二、存储结构

  ZooKeeper采用了类似文件系统的的数据模型。

  1)类似文件系统的结构

  

  2)在zookeeper中,每一个节点被称为一个znode如nodeA、nodeB都是一个znode,每个znode具有唯一的路径标识。

     在zookeeper中,有4种znoode类型。

    1、PERSISTENT:持久节点。创建后只要不删除就永久存在。

    2、EPHEMERAL:临时节点。会话结束后该结点自动被删除,EPHEMERAL结点不允许有子节点。

    3、PERSISTENT_SEQUENTIAL:持久有序节点。

    4、EPHEMERAL_SEQUENTIAL:临时有序节点。

  3) znode节点可以被监控,包括这个目录中存储的数据的修改,子节点目录的变化,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的集中管理,集群管理,分布式锁等等。

  4)每一个znode为三部分组成:

   1、stat. 此为状态信息, 描述该znode的版本, 权限等信息

   2、data. 与该znode关联的数据

   3、children. 该znode下的子节点

三、常见应用场景

  让我们来看看zookeeper可以为我们带来什么,在来决定是否要适用这项结束。

  1)配置管理:zookeepe通过发布与订阅模式为我们提供了一个集中的配置管理,当这个配置产生变化时,可以立刻通知到各个应用系统。

    

  2)Name Server:分布式环境下,经常需要对应用/服务进行统一命名,便于识别不同服务。

     比如通过名称来获取服务的地址。

  3)分布式锁:单机程序为了避免数据不一致的问题常常加锁,zookeeper可以为我们提供在分布式情况需要对相应资源加锁。

     (可以支持多种锁类型如互斥锁、自旋锁等)

  4)集群管理:在分布式环境下经常会由于各种原因,比如硬件故障,软件故障,网络问题,有些节点会进进出出。zookeeper通过对临时有序节点和监听机制实现集群管理。

四、成熟项目中的使用

  1)storm中用zookeeper来协调同步集群中机器的状态(并不传递消息)。基本不会有负载,对机器性能没什么要求。

  2)dubbo中采用zookeeper来作注册中心,在阿里内部采用的是基于数据库的注册中心。

  3)Hadoop中用zookeeper来管理集群中的NameNode。

  4)kafka通过zookeeper实现生产者在消费端的负载均衡,动态的集群扩展等等。

  还有很多场景就不一一列举了。

五、总结

  虽然在挺久之前就接触过zk,但一直没有太深入的学习,现在正好工作中需要使用,借此机会再深入的学习下。

 

posted @ 2018-05-08 10:10  vi-2525  阅读(187)  评论(0编辑  收藏  举报