数据模型

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. 002.etcd使用场景

    引用链接: https://blog.csdn.net/linuxheik/article/details/77853119 https://www.cnblogs.com/doscho/p/6221 ...

  2. Redis介绍及部署在CentOS7上(一)

    0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...

  3. bzoj5293: [Bjoi2018]求和

    题目链接 bzoj5293: [Bjoi2018]求和 题解 暴力 对于lca为1的好坑啊.... 代码 #include<cmath> #include<cstdio> #i ...

  4. JavaScript 的装饰器:它们是什么及如何使用

    请访问我的独立博客地址:https://imsense.site/2017/06/js-decorator/ 装饰器的流行应该感谢在Angular 2+中使用,在Angular中,装饰器因TypeSc ...

  5. ip定位

    http://www.cnblogs.com/pengcc/p/5294836.html https://wx.jdcloud.com/shop/shopDetail/RTBAsia,里面有各种IP地 ...

  6. SlickMaster.NET 开源表单设计器快速使用指南

    前言:在企业数据处理过程中,经常需要通过定制表单来输入业务数据.由于涉及的数据比较离散,并不同于ERP系统的紧密关联数据.假如由开发人员每个增加页面,工作量会比较大,后期后期的维护很升级也耗费时间和精 ...

  7. 利用 PHP 导出 Git 某个分支下,新增或修改过的文件

    使用 SVN 作为版本控制的时候,整理过一个 导出文件脚本:利用 PHP 导出 SVN 新增或修改过的文件 现在换成了 Git,整理出类似的脚本: [第一版]git.php <?php /** ...

  8. 基于设备树的TQ2440 DMA学习(4)—— client驱动

    作者 彭东林pengdonglin137@163.com 平台 TQ2440Linux-4.9 概述 前面分析了DMA控制器驱动,下面我们调用DMAENGINE的API写一个MEM2MEM的驱动 正文 ...

  9. 在ASP.NET MVC下扩展一个带验证的RadioButtonList

    在ASP.NET MVC4中,HtmlHelper为我们提供了Html.RadioButton()方法用来显示Radio Button单选按钮.如果想显示一组单选按钮,通常的做法是遍历一个集合把每个单 ...

  10. 使用 Android 的日志工具LogCat

    Android 中的日志工具类是 Log(android.util.Log),这个类中提供了如下几个方法来供我们打印日志. 1.    Log.v() 这个方法用于打印那些最为琐碎的,意义最小的日志信 ...