Java Zookeeper

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。


1.概述

特性:

数据一致性:每个Server保存一根相同的数据副本,Client调用任何一个server获得的数据都是一样的。

数据原子性:一次数据更新全部成功或全部失败。同一个Client的更新请求顺序执行。

实时性:在一定时间范围内,Client能读到最新数据。


集群要求:

集群至少3台服务器,集群由一个Leader,多个Follower组成。

集群中必须有半数以上的节点存活才能正常提供服务。


Leader选举机制

节点启动后:

① 给自己投票,判断得票数是否超过半数,超过确认为Leader。

② 未超过半数,投票给启动ID号大的节点。


2.zookeeper数据模型

ZooKeeper有一个分层的命名空间,类似分布式文件系统。它们唯一的区别就在于在命名空间中每个节点可以有数据关联作为它们的子节点。这就像有一个文件系统允许文件也作为文件目录。

节点路径通常表示为规范的、斜杠分隔的绝对路径(没有相对路径)。

任何包含在路径当中的unicode字符都必须遵循以下约束:

1)空字符不能作为路径名称;

2)以下字符串不能作为使用,这是优越它们显示不够友好,或容易引起混淆(\u0001 - \u001F and \u007F - \u009F)

3)以下字符串是不允许的。( \ud800 - uF8FF, \uFFF0 - uFFFF)

4)"."字符可以作为名称的一部分,但是"."和".."不能单独存在用于表示一个节点的路径,因为ZooKeeper没有使用相对路径。下述例子是无效的"/a/b/./c" or "/a/b/../c"

5)"zookeeper"关键字保留


3.zNode

在ZooKeeper树形结构中的每个节点都可以称为zNode。

每个zNode默认能够存储1MB数据。

1.类型

· PERSISTENT 持久化节点

· PERSISTENT_SEQUENTIAL 顺序自动编号持久化节点,这种节点会根据当前已存在的节点数自动加 1

· EPHEMERAL 临时节点, 客户端session超时这类节点就会被自动删除

· EPHEMERAL_SEQUENTIAL 临时自动编号节点

(同级节点必须唯一、临时节点下不能存在子节点)


2.Stat信息

ZooKeeper命名空间中的每个znode都有一个与之关联的stat结构,类似于Unix/Linux文件系统中文件的stat结构。
znode的stat结构中的字段显示如下,各自的含义如下:
· cZxid:这是导致创建znode更改的事务ID。
· mZxid:这是最后修改znode更改的事务ID。
· pZxid:这是用于添加或删除子节点的znode更改的事务ID。
· ctime:表示从1970-01-01T00:00:00Z开始以毫秒为单位的znode创建时间。
· mtime:表示从1970-01-01T00:00:00Z开始以毫秒为单位的znode最近修改时间。
· dataVersion:表示对该znode的数据所做的更改次数。
· cversion:这表示对此znode的子节点进行的更改次数。
· aclVersion:表示对此znode的ACL进行更改的次数。
· ephemeralOwner:如果znode是ephemeral类型节点,则这是znode所有者的 session ID。 如果znode不是ephemeral节点,则该字段设置为零。
· dataLength:这是znode数据字段的长度。
· numChildren:这表示znode的子节点的数量。



转载请指明出处!http://www.miselehe.com/article/view/17