zoukankan      html  css  js  c++  java
  • zookeeper 简介

    一、简介

    zookeeper是hadoop的一个子项目,A distribute coordination service for distributed applications 为了分布式应用而开发的分布式管理服务。多个server,少数server down不会影响整个分布式服务。

    zookeeper简单而又高效的保证是:

    1.顺序一致性---从client的更新会按顺序应用

    2.原子性---更新要么成功要么失败。没有更新了一半这个说法。

    3.可靠性---一旦更新被应用,它就会一直保持着直到下一次被更改

    二、特点

    zookeeper的数据模型像操作系统的文件结构,每个znode可以有子znode,并且znode可以存数据。不像文件系统是为了数据存储的,zookeeper的数据在内存中,也就是zookeeper能够获得高吞吐量和低延迟。

    但ephemeral类型的znode不能有子节点。ephemeral的znode一旦和服务器失去联系,这个znode将自动删除。zookeeper的客户端和服务器采用长连接,通过心跳来保持连接。这个链接称为session,seesion失效会导致ephemeral的znode删除。

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

    三、zookeeper watches


    所有的zookeeper读动作都有一个选项选择是否设置watch。getData(),getChildren(),exists()。watch的定义是:一次性触发,发送给set这个watch的client端,当这个watch的数据发生改变的时候。

    One-time trigger

    设置znode的watch,当znode发生改变会收到事件。除非重新设置一个watch,否则不会再收到znode改变的事件。

    Sent to client

    这意味着有可能因为网络的问题,发送改变已经完成,但watch event事件还没到。watch是异步到达的。

    The data for which the watch was set。

    这指的是一个node可以发生不同的改变方式。data watches and child watches。getData()和exists()设置data watches。getChildren()设置子节点监视。getData和exist()返回node数据,getchildren返回a list of children。

    这样setData()会触发设置的znode的data watch,create()会触发创建的znode的data watch和parent node的child watch。delete() 会触发这个node的data watch和child watch,以及 parent node的child watch。

    关于watch需要注意的

    one-time trigger,so must set again。

    因为watch是one有latency的,所以有可能在设置新的watch和得到事件之间znode发生了改变。

    一个watch函数只会因为一个通知调用一次。比如:exists和getData注册了同样的watch函数,当这个node被删除的时候,只会触发一次函数。

    当和server断掉时,你不会收到任何watch。所以,你要使用session events。

  • 相关阅读:
    10-padding(内边距)
    09-盒模型
    07-css的继承性和层叠性
    Python之路【第09章】:Python模块和包的详细说明
    Python之路【第10章】:程序异常处理
    Python之路【第09章】:Python模块
    排序算法—冒泡排序算法
    算法总结
    递归函数与二分法
    练习题
  • 原文地址:https://www.cnblogs.com/wataciii/p/4059146.html
Copyright © 2011-2022 走看看