一、简介

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。

zookeeper 简介的更多相关文章

  1. ZooKeeper简介

    本文中,我们将对ZooKeeper进行介绍.简单地说,ZooKeeper是一个用来在构成应用的各个子服务之间进行协调的一个服务. 由于其本身并没有特别复杂的机制,因此我们将会把更多的笔墨集中在如何对Z ...

  2. Zookeeper简介与安装

    Zookeeper:A Distributed Coordination Service for Distributed Applications. 一.Zookeeper简介 众所周知,协同服务是分 ...

  3. Zookeeper简介与集群搭建

    Zookeeper简介 Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理.命名.分布式同步.集群管理.数据库切换等服务.它不适合用来存储大量信息,可以用来存储一些配置.发布与订阅等少 ...

  4. Zookeeper简介与集群搭建【转】

    Zookeeper简介 Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理.命名.分布式同步.集群管理.数据库切换等服务.它不适合用来存储大量信息,可以用来存储一些配置.发布与订阅等少 ...

  5. Zookeeper简介及单机、集群模式搭建

    1.zookeeper简介 一个开源的分布式的,为分布式应用提供协调服务的apache项目. 提供一个简单的原语集合,以便于分布式应用可以在它之上构建更高层次的同步服务. 设计非常易于编程,它使用的是 ...

  6. Zookeeper简介及使用

    一.Zookeeper简介 1.zookeeper简介 动物管理员 Apache ZooKeeper致力于开发和维护开源服务器,实现高度可靠的分布式协调. 2.什么是ZooKeeper? ZooKee ...

  7. ZooKeeper学习之路(一)—— ZooKeeper简介及核心概念

    一.Zookeeper简介 Zookeeper是一个开源的分布式协调服务,目前由Apache进行维护.Zookeeper可以用于实现分布式系统中常见的发布/订阅.负载均衡.命令服务.分布式协调/通知. ...

  8. ZooKeeper系列(一)—— ZooKeeper 简介及核心概念

    一.Zookeeper简介 Zookeeper 是一个开源的分布式协调服务,目前由 Apache 进行维护.Zookeeper 可以用于实现分布式系统中常见的发布/订阅.负载均衡.命令服务.分布式协调 ...

  9. Zookeeper简介及安装(一)

    1 Zookeeper入门1.1 概述Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. 1.2 特点 1.3 数据结构 1.4 应用场景提供的服务包括:统一命名服务 ...

  10. 第1章 分布式系统概念与ZooKeeper简介

    ZooKeeper分布式专题与Dubbo微服务入门 第1章 分布式系统概念与ZooKeeper简介 1-1 zookeeper简介 1-2 什么是分布式系统 略 1-3 分布式系统的瓶颈以及zk的相关 ...

随机推荐

  1. SQL三大范式三个例子搞定

    第一范式(1NF) (必须有主键,列不可分) 数据库表中的任何字段都是单一属性的,不可再分 create table aa(id int,NameAge varchar(100)) insert aa ...

  2. Android长时间后台运行Service

         项目需要在后台获取GPS经纬度.当用户对手机有一段时间没有操作后,屏幕(Screen)将从高亮(Bright)变为暗淡(Dim),如果再过段时间没操作, 屏幕(Screen)将又由暗淡(Di ...

  3. python splinter

    from splinter.browser import Browser with Browser() as b: for url,name in web: b.visit(url) b.fill(' ...

  4. margin 碰到过的重叠问题

    双倍margin 稍微记录一下,因为常忘 float + margin,实际边距会变成设置值的双倍. 解决办法是 将元素设为 display:inline 最好要了解 IE的 haslayout 问题 ...

  5. Tire树入门专题

    POJ 3630Phone List 题目连接:http://poj.org/problem?id=3630 题意:问是否有号码是其他号码的前缀. #include<iostream> # ...

  6. Http协议的常见参数

    Requests部分 Header 解释 示例 Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/html Accept-Charset 浏览器可以接受的字 ...

  7. java问卷

    1.你对自己的未来有什么规划?做了那些准备? 对于每个人来讲只有一次,七八十年的时间是一个即漫长然而又很短暂的过程,对于漫长与短暂的看法,由于每个人所处的环境的不同以及对人生看法的不同而有所差异.痛苦 ...

  8. easyui datagrid 加载两次请求,触发两次ajax 请求 问题

    datagrid初始化的时候请求两次URL 两种情况 1. <table id="gridview" class="easyui-datagrid"> ...

  9. [11]APUE:(文件)记录锁

    [a] 概念 建议锁:在遵循相同记录锁规则的进程间生效,通常用于保证某个程序自身多个进程间的数据一致性 强制锁:意在保证所有进程间的数据一致性,但不一定有效:如不能应对先 unlink 后建立同名副本 ...

  10. 未定义标识符string

    “未定义标识符string”  解决方法: 头文件加上 #include <iostream>using namespace std; string是标准库的,要加std::string, ...