内容框架:
Part1--Basic knowledgements
Part2--Znode
Part3--Basic Operation
----------------------------------------------------------
Part1--Basic Knowledgements:
由Yahoo开发的开源分布式应用协同中间件,提供分布式应用的元数据存储/监控、配置管理、分布式同步、集群管理等功能。其架构如下图所示:
zookeeper提供了分布式应用的元数据存储功能,内置了以znode数据节点为基本存储单元的树状存储结构。该结构类似Linux的文件系统,拥有单一root节点,除root外其它节点均有自己的父节点,如下图所示:
Part2--Znode:
zookeeper中的znode是基本的数据存储单元,按数据存活时间TTL【time-to-live】来划分,可分为persistent-znode及ephemeral-znode;按节点名称是否包含序列号【sequence-number】可分为:sequential-znode及non-squential-znode。其中sequential-znode还可进一步细分为persistence_sequential-znode及ephemeral_sequential-znode。
persistence节点和ephemeral节点区别如下:
所有节点的类型都是在创建时指定的,节点名称与节点全路径对应。
persisence意思是持久的,这种节点TTL与zookeeper服务端状态相对应,并且对所有client而言是可见的;可通过delete命令移除该类节点;
ephemeral节点是会话级【session-level】其TTL依赖于创建该节点的client与server会话【session】状态,若session终止,该类节点消失。ephemeral节点不能拥有child节点。
sequential节点的名称后附有序列号数字【也可称为版本号version No.】,这种序列号由zookeeper创建该节点时由自增计数器自动生成。
znode节点名使用全路径标识作为标识,可以将其比作Redis的key-value。key对应节点名-节点全路径,value对应该节点存储的值。ZooKeeper的znode是为存储应用的元数据而设计的,故其znode节点存储的value为不超过1MB的byte数组。同Redis采用hash实现key的快速定位不同,zookeeper采用了Tree结构来实现这一需求。
Part3--Basic Operation :
对znode数据操作是zookeeper实现高级功能【如集群管理,命名服务,分布式同步,leader选举等】的基石。zookeeper数据操作包含以下命令:
很多命令与Redis数据操作相似。注意节点删除delete命令:若节点包含有子节点,对该节点delete操作是无法进行的。
zookeeper的read/write操作都是原子性的。
对znode进行read操作时,可以附带设置watch模式。watch事件会在节点的write操作时触发,并且只能响应一次触发操作。znode节点发生状态变更时,可能发生以下类型的watch事件:
分别对应:子节点更新/节点创建/节点数据更新/节点删除。