美文网首页
zookeeper基本概念

zookeeper基本概念

作者: Audience0 | 来源:发表于2019-08-26 12:44 被阅读0次

    zookeeper :  

    1.协作多个任务:例如主从工作模式,从节点处于空闲状态时会通知主节点可以接受任务,于是主节点就会分配任务给从节点.

    2.管理竞争:竞争则是两个进程不能同时处理工作,一个进程必须等待另一个进程.例如主从模式中的,选注节点的过程.

    Apache HBase 通常与Hadoop一起使用的数据存储仓库,Zookeeper在HBase中,选举主节点,以便跟踪可用的服务器,并保存集群的元数据.

    Apache Kaftka 是一个基于发布-订阅(pub-sub)模型的消息系统.Zookeeper用于检测崩溃,实现主题(topic)的发现,并保持主题的生产和消费状态

    Apache  Solr 是一个企业级的搜索平台.Solr分布式版本命名为SolrCloud,它使用Zookeeper存储集群元数据,并协作更新这些元数据.

    分布式系统定义:分布式系统是同时跨越多个物理主机,独立运行的多个软件组件所组成的系统.

    分布式系统中的进程通信有两种选择: 直接通过网络进行信息交换,或读写某些共享存储

    Zookeeper使用共享存储模型来实现应用间的协作和同步原语.对于共享存储本身,又需要在进程和存储间进行网络通信.

    消息延迟:消息传输可能会发生网络延迟,比如,网络拥堵

    处理器性能:操作系统的调度和超载也可能导致消息处理的任意延迟.

    始终偏移:处理器始终并不可靠,他们之间会发生任意的偏移.

    --------------------------------------------------------------------------------------------------------------------------------------------------

    zookeeper 通过暴露了一小部分调用方法组成的类似文件系统的API,以便允许应用实现自己的原语.

    zookeeper操作和维护一个小型的数据节点,这个节点叫做znode,采用类似文件系统的层级结构进行管理.如下图所示,

    主节点的znode没有数据表示还没有选举出主节点.

    ---------------------------------------------------------------------------------------------------------------------------------------------------

    znode节点可能含有数据,也可能没有数据.如果一个znode节点包含任何数据,那么数据存储为字节数据(byte array).字节数据的具体格式特定于每个应用的实现,zookeeper并不直接提供解析的支持.我们可以通过使用Protocol Buffers, THRIFT,Avro,MessagePack等序列化包来方便处理保存于znode节点的数据格式,不过一般以UTF-8或ASCII编码的字符串就已经够用了.

    -------------------------------------------------------------------------------------------------------------------------------------------------

    zookeeper的API暴露出一下方法

    create /path data   创建出一个名为/path的znode,并包含数据data

    delete  /path   删除名为/path的znode

    exists /path  检查是否存在名为/path的znode

    setData  /path data  设置名为/path的znode节点的数据为data

    getData /path 获取名为/path的znode节点的所有数据信息

    getChildren /path 返回所有/path节点的所有子节点列表

    需要注意的是,zookeeper并不允许局部写入或读取znode节点的数据,当设置一个znode节点的数据或读取时,znode节点的内容会被整个替换或全部读取出来.

    zookeeper客户端连接到zookeeper服务器,通过API调用简历会话(session).

    -----------------------------------------------------------------------------------------------------------------------------------------------------

    当新建znode的时候需要指定,znode的类型.

    持久节点和临时节点.

    持久节点,只能通过调用delete来进行删除. 可以通过持久节点znode为应用保存一些数据,即使znode的创建者不再属于应用系统时,数据页可以保存下来而不丢失. 例如,主从模式中,即使分配任务的主节点崩溃了,也要保存从节点的任务分配情况.

    临时节点,当创建该节点的客户端崩溃或关闭与zookeeper的连接时,这个节点就会被删除.

    临时znode节点,仅当创建者会话有效时这些信息必须有效保存.例如,主从模式的例子中,当主节点创建的znode为临时节点时,该节点的存在意味着主节点的存在及其的正常运行.如果该临时znode节点消失了,那么就表示主节点的崩溃,系统可依据此判断主节点的状态.

    一个临时znode,以下两种情况将会被删除.

    1.当创建该znode的客户端的会话因超时或主动关闭而中止时.

    2.当某个客户端(不一定是创建者)主动删除该节点时.

    有序节点

    一个znode还可以设置为有序节点,一个有序znode节点被分配唯一一个单调递增的证书.当创建有序节点时,一个序号会被追加到路径之后.例如,如果一个客户端创建了一个有序节点,其路径为/task/task-,那么zookeeper将会分配一个序号,如1,并将这个数字最佳到路径之后,最后改znode节点为/task/task-1.有序节点通过提供创建具有唯一名称的znode方式,同时这种方式可以直观的查看znode的创建顺序.

    总之,znode一共有4种类型,持久的,临时的,持久有序的,临时有序的.

    ----------------------------------------------------------------------------------------------------------------------------------------------

    监视与通知

    zookeeper基于通知的机制,客户端向zookeeper注册需要接收通知的znode,通过对znode设置监视点来接收通知.

    监视点是一个单次出发的操作,意即监视点会出发一个通知.为了接收多个通知,客户端必须在每次通知后设置一个新的监视点.如下图所示,当节点/task发生变化的时候,客户端会受到一个通知,并从zookeeper读取一个新值.

    zookeeper可以定义不同类型的通知,如 监听znode数据变化,监听znode子节点变化,监听znode的创建或删除.为了设置监视点,可以使用API中的调用来读取zookeeper的状态,在调用这些API时,传入一个watcher对象或使用默认的watcher.

    ------------------------------------------------------------------------------------------------------------------------------------------

    版本

    每一个znode都有一个版本号,她随着每次数据变化而自增.

    两个API操作可以有条件的执行setData和delete.这两个调用以版本号作为传入参数,只有当传入参数的版本号与服务器上的版本号一致时,调用才会成功.

    -----------------------------------------------------------------------------------------------------------------------------------------------

    zookeeper架构

    独立模式,仲裁模式

    独立模式:单独的服务器,zookeeper状态无法复制

    仲裁模式:具有一组zookeeper服务器,我们成为zookeeper集合.在仲裁模式下,zookeeper复制集群中的所有服务器的数据树.并且为了解决所有服务器复制数据时造成的延迟问题,引入法定人数概念,它表示需要保存客户端数据的服务器的最小个数(一般需要大于集合的一半).即当保存客户端数据的服务器达到这个数时,客户端即可继续执行,而其他为完成数据保存的zookeeper服务器会后续捕获到数据,并保存数据.

    -------------------------------------------------------------------------------------------------------------------------------------------------

    会话

    在对zookeeper集合执行任何请求前,一个客户端必须先与服务器建立会话.

    当客户端通过某一个特定语言套件来创建一个zookeeper句柄时,它就会通过服务建立一个会话.客户端初试连接到集合中某一个服务器或一个独立的服务器.客户端通过TCP协议与服务器进行连接并通信,但当会话无法与当前连接的服务器继续通信时,会话就可能转移到另一个服务器上.zookeeper客户端库透明转移一个会话到不同的服务器.

    会话提供了顺序保证,同一个会话遵循请求的FIFO规律执行.

    -----------------------------------------------------------------------------------------------------------------------------------------------------

    相关文章

      网友评论

          本文标题:zookeeper基本概念

          本文链接:https://www.haomeiwen.com/subject/rgqxaftx.html