zoukankan      html  css  js  c++  java
  • ZooKeeper 简介说明

    1.什么是Zookeeper?

    Zookeeper是一个高效的分布式协调服务,它暴露了一些公用服务,比如命名/配置管理/同步控制/群组服务等。我们可以使用Zookeeper来实现比如达成共识/集群管理/leader选举等。

    Zookeeper是一个高可用的分布式管理与协调框架,基于ZAB算法(原子消息广播协议)的实现。该框架能够很好的保证分布式环境中数据的一致性。也只是基于这样的特性,使得Zookeeper成为了解决分布式一致性问题的利器。

    Zookeeper的特性:

      顺序一致性:从一个客户端发起的事务请求,最终将会严格的按照其发起的顺序被应用到zookeeper中去。

      原子性:所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群所有的机器都成功应用了某一事务,要么没有应用,一定不会出现部分机器应用了该事务,而另一部分没有应用的情况。

      单一视图:无论客户端连接的是哪一个zookeeper服务器,其看到的服务器端数据模型都是一致的。

      可靠性:一旦服务器成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务器端状态将会被一直保留,除非有另一个事务对其更改。

      实时性:通常所说的实时性就是指一旦事务被成功应用,那么客户端就能立刻从服务器上获取变更后的新数据,zookeeper仅仅能保证在一段时间内,客户端最终能从服务器端读取最新的数据状态。

    2.Zookeeper设计目标

      目标1:简单的数据结构。zookeeper就是以简单的树形结构来进行相互协调的(也叫树形名字空间)。

      目标2:可以构建集群。一般zookeeper集群通常由一组机器构成,一般3~5台机器就可以组成一个zookeeper集群了。只要集群中超过半数以上的机器能够正常工作,那么整个集群就能够正常对外提供服务。

      目标3:顺序访问。对于来自每一个客户端的每一个请求,zookeeper都会分配一个全局唯一的递增编号,这个编号反应了所有事务操作的先后顺序,应用程序可以使用zookeeper的这个特性来实现更高层次的同步。

      目标4:高性能。由于zookeeper将全局数据存储在内存中,并直接服务于所有的非事务请求,因此尤其是在以读操作为主的场景下性能非常突出。在JMater压力测试下(100%读请求场景下),其结果大约在12~13W的QPS。

    Zookeeper 会维护一个具有层次关系的数据结构,它非常类似于一个标准的文件系统

    3.Zookeeper的数据模型

    1、每个子目录项如NameService都被称为znode,这个znode是被它所在的路径唯一标识,如Server1这个znode的标识为/NameService/Server1。

    2、znode可以有子节点目录,并且每个znode可以存储数据,注意EPHEMERAL类型的目录节点不能有子节点目录。

    3、znode是有版本的,每个znode中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据。

    4、znode可以是临时节点,一旦创建这个znode的客户端与服务器失去联系,这个znode也将自动删除。Zookeeper的客户端和服务器通信采用长连接方式,每个客户端和服务器通过心跳来保持连接,这个连接状态称为session。如果znode是临时节点,这个session失效,znode也就自动删除了。

    5、znode的目录名可以自动编号,如app1已存在,再创建的话,也将自动重命名为app2。

    6、znode可以被监控,包括这个目录节点中存储数据的修改,子节点目录的变化等。一旦变化,可以通知设置监控的客户端,这个是zookeeper的核心特性,zookeeper的很多功能都是基于这个特性实现的。

    4.Zookeeper的组成

    ZK Server根据其身份特性分为三种:leader、follower、observer(观察者),其中follower和observer又统称为learner(学习者)。

    leader:负责客户端的writer类型请求。

    follower:负责客户端的reader类请求,参与leader的选举等。

    observe:特殊的”follower“,其可以接受客户端reader请求,但不参与选举,只负责与leader同步数据。

    5.Zookeeper的应用场景

    Zookeeper从设计模式角度来看,是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应,从而实现集群中类似Master/Slave的管理模式。

    http://www.cnblogs.com/alter888/p/8866544.html

    6.ZooKeeper 节点类型

    ZooKeeper 节点是有生命周期的,这取决于节点的类型。在 ZooKeeper 中,节点类型可以分为持久节点(PERSISTENT )、临时节点(EPHEMERAL),以及时序节点(SEQUENTIAL ),具体在节点创建过程中,一般是组合使用,可以生成以下 4 种节点类型。

     持久节点(PERSISTENT)
    所谓持久节点,是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点——不会因为创建该节点的客户端会话失效而消失。

    持久顺序节点(PERSISTENT_SEQUENTIAL)
    这类节点的基本特性和上面的节点类型是一致的(会根据当前已存在的节点数自动加 1)。额外的特性是,在ZK中,每个父节点会为他的第一级子节点维护一份时序,会记录每个子节点创建的先后顺序。基于这个特性,在创建子节点的时候,可以设置这个属性,那么在创建节点过程中,ZK会自动为给定节点名加上一个数字后缀,作为新的节点名。这个数字后缀的范围是整型的最大值。

    临时节点(EPHEMERAL)
    和持久节点不同的是,临时节点的生命周期和客户端会话绑定。也就是说,如果客户端会话失效(客户端session超时),那么这个节点就会自动被清除掉。注意,这里提到的是会话失效,而非连接断开。另外,在临时节点下面不能创建子节点。

    临时顺序节点(EPHEMERAL_SEQUENTIAL)

    临时自动编号节点

  • 相关阅读:
    把一个英语句子中的单词次序颠倒后输出。例如输入“how are you”,输出“you are how”;
    个人简介
    Scala简单计算实例,其在数据分析方面的优势体会
    【转载】Hadoop分布式文件系统HDFS的工作原理详述
    RedHat Linux Shell常用命令(多数也适用于Unix和AIX)
    Hive insert into directory 命令输出的文件没有列分隔符分析和解决
    A Python example for HiveServer2
    Shell脚本,简单& 强大
    递归导致的StackOverflow的分析
    VS让人纠结的Release和网站一键发布
  • 原文地址:https://www.cnblogs.com/alter888/p/8867689.html
Copyright © 2011-2022 走看看