数据模型

ZooKeeper跟分布式文件系统一样, 有一系列的命名空间. 唯一不同的地方是命名空间中的每个节点都有数据和他相关联. 它类似于一个允许文件同时是一个目录的文件系统. 节点的路径永远是以斜杠分隔的标准绝对路径; 没有相对路径. 你可以使用任何unicode字符, 但必须遵循以下限制:

  • 路径名不允许使用null字符(\u0000).(这会引起C绑定问题)
  • 以下字符不允许使用, 因为他们的显示渲染有问题: \u0001 - \u001F 以及 \u007F - \u009F
  • 以下字符不允许使用: \ud800 - uF8FF, \uFFF0 - uFFFF, \uXFFFE - \uXFFFF (X 是数字 1 - E), \uF0000 - \uFFFFF.
  • "."字符可以用在路径名中, 但是"."和".."不能单独用作节点路径, 因为ZooKeeper没有相对路径. 例如下面的路径是非法的: "/a/b/./c" 或者 "/a/b/../c"
  • "zookeeper"是保留字

ZNodes

每个ZooKeeper节点都表示为一个znode. Znode维护了包括数据和acl变化的版本号的状态数据结构. 这些状态数据结构也有时间戳. 利用版本号和时间戳, ZooKeeper可以验证缓存, 以及协调更新. 每当znode的数据改变, 版本号就会增加. 例如, 客户端获取数据时, 它也会获得数据的版本号. 每当客户端执行更新或删除操作, 它必须同时提供znode数据的当前版本号. 假如提供的版本号和数据的实际版本号不一致, 更新就会失败. (这种行为是可以被覆盖的.[tbd...])

注意

在分布式系统中, "节点"(node)一词可以用来表示一台主机, 一台服务器, 一个集群中的成员, 一个客户端进程. 在ZooKeeeper的文档中, znode表示的是数据节点. 服务器(Servers) 表示的是组成ZooKeeper服务的机器;  Quorum Peer 指的是组成集群的服务器; 客户端(Client)指的是任何使用ZooKeeper服务的主机或进程.

Znode是程序员最主要的访问试题.他们有好些值得提一提的特性.

Watches

客户端可以在znode上设置watches. Znode的变化会触发watch, 之后清除watch. 当watch被触发, ZooKeeper会发送给客户端一个通知. 更多关于watches的信息可以参看 ZooKeeper Watches 章节.

数据访问(Data Access)

命名空间中的节点数据都是可读并且原子可写的. 读操作获取节点中的所有数据字节, 写操作则替换所有数据. 每个节点都有访问控制列表(Access Control List, ACL)来限制读写操作.

ZooKeeper不是设计用来做为普通数据库和大数据存储的. 他是用来管理协调数据的. 这个数据可以是配置信息, 状态信息, 聚集信息. 这些协调数据的特点是他们都非常小: 大约是KB级别. ZooKeeper客户端和服务端都有健全的检查机制来保证znode的数据不会超过1M, 但是的品均大小应该比这个小得多. 操作相对较大的数据会导致操作时间过长, 从而影响某些操作的延迟, 因为需要额外的时间在网络中传输更多的数据并存储到媒体中. 假如确实有大数据需要存储, 一般的解决方案是使用大容量存储系统, 例如NFS或者HDFS, 并且将存储指针存储在ZooKeeper中.

临时节点(Ephemeral Nodes)

ZooKeeper中有临时节点这个概念. 这些znode在创建他的会话期间存在. 当会话结束时, 节点会被删除. 因此, 临时节点是不允许拥有子节点的.

顺序节点 - 唯一命名(Sequence Nodes - Unique Naming)

创建一个节点时, 你可以要求ZooKeeper在路径末尾添加一个递增的计数器. 这个计数器对于父节点来说是唯一的. 计数器的格式是%010d -- 补0的10位数字(这种格式的计数器可以简化排序), 例如, "<路径>00000000001". 示例请查看Queue Recipe. 注意: 用来存储下一个序列号的计数器是一个由父节点维护的有符整型(4 bytes), 如果他的值超过了2147483647, 会造成溢出(变成 "<path>-2147483647").

Zookeeper Tutorial 2 -- Programmer's Guide的更多相关文章

  1. [转帖]Programmer’s guide to the big tech companies 💻

    Programmer’s guide to the big tech companies

  2. TensorFlow 官方文档 Programmer's Guide 中文翻译 —— 引言

    TensorFlow Programmer's Guide (Introduction) TensorFlow 编程手册 (引言) #(本项目对tensorflow官网上给出的指导手册(TF1.3版本 ...

  3. 转载:ZooKeeper Programmer's Guide(中文翻译)

    本文是为想要创建使用ZooKeeper协调服务优势的分布式应用的开发者准备的.本文包含理论信息和实践信息. 本指南的前四节对各种ZooKeeper概念进行较高层次的讨论.这些概念对于理解ZooKeep ...

  4. zookeeper[1] (转)ZooKeeper Programmer's Guide(zookeeper编程向导)---中文

    原文:http://www.cnblogs.com/Xrinehart/p/3512509.html 本文是为想要创建使用ZooKeeper协调服务优势的分布式应用的开发者准备的.本文包含理论信息和实 ...

  5. [翻译] TensorFlow Programmer's Guide之Frequently Asked Questions(问得频率最多的几个问题)

    目录: 特点和兼容性(Features and Compatibility) 建立一个TensorFlow图(Building a TensorFlow graph) 运行一个TensorFlow计算 ...

  6. Good Zookeeper Tutorial with Java client

    参考: https://stackoverflow.com/questions/33524537/good-zookeeper-tutorial-with-java-client I was tryi ...

  7. Zookeeper Tutorial 1 -- Overview

    ZooKepper: 一个分布式应用的分布式协调服务(Distributed Coordination Service) 分布式服务难以管理, 他们容易造成死锁和竞争, ZooKepper的动机就是为 ...

  8. chapter3:Collaborative Filtering ---------A Programmer's Guide to Data Mining

    Implicit rating and item based filtering Explicit rating: 用户明确的对item评分 Implicit rating:反之 明确评分所存在的问题 ...

  9. ZooKeeper Getting Started Guide

    http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html What is ZooKeeper? ZooKeeper is a centra ...

随机推荐

  1. 003.NTP客户端配置

    一 NTP客户端同步方式 ntpdate定时任务同步 ntp服务同步 二 ntpdate定时任务同步 2.1 安装ntp软件 [root@client ~]# yum -y install ntp # ...

  2. UML用例图之间的关系

    在画用例图的时候,理清用例之间的关系是重点.用例的关系有泛化(generalization).扩展(extend)和包含(include).其中include和extend最易混淆.下面我们结合实例彻 ...

  3. MySql 时间戳存char还是存int?

    一次小事故,让我对时间戳存char还是存int有了深刻的印象. 生产环境的sql条件涉及到时间戳字段的大小比较(between and),当时设计的时间戳类型是char(10),结果当数据量达到200 ...

  4. 求有向图的强连通分量个数 之 Kosaraju算法

    代码: #include<cstdio> #include<cstring> #include<iostream> using namespace std; ][] ...

  5. hdu 4438 第37届ACM/ICPC 天津赛区现场赛H题

    题意:Alice和Bob两个人去打猎,有两种(只)猎物老虎和狼: 杀死老虎得分x,狼得分y: 如果两个人都选择同样的猎物,则Alice得分的概率是p,则Bob得分的概率是(1-p): 但是Alice事 ...

  6. Xtreme8.0 - Play with GCD dp

    Play with GCD 题目连接: https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/play-with-g ...

  7. java自动给版本升级,遇9变0且前面一个版本加1

    /** * 自动升级版本号,版本号+1 * @param version * @return */ private String autoUpgradeVersion(String version){ ...

  8. 使用 IntraWeb (20) - 基本控件之 TIWGrid

    TIWGrid 最终通过 Html Table 呈现; 其每个 Cell 都是一个 TIWGridCell 对象, Cell 对象的 Control 属性非常好, 可以非常方便地嵌入其他控件. TIW ...

  9. MikroTik RouterOS授权级别

    抄了一份来自淘宝代理商的说明: P系列许可级别(适用于联网的虚拟机,如:云主机,虚拟机,VPS等) 您必须在MikroTik官网 https://mikrotik.com/client/ 上拥有一个帐 ...

  10. Android 内存泄露测试数据处理--procrank,setprop,getprop(转)

    1.Android内存测试常用的几个概念. VSS--virtual set size 虚拟耗用内存(包含共享库占用的内存)RSS--Resident set size实际使用的物理内存(包含共享库占 ...