15.1.3 ZooKeeper中的节点和临时节点

通过上一节的内容,大家可以了解到在ZooKeeper中存在着节点的概念,同时也知道了这些节点是通过像树一样的结构来进行维护的,并且每一个节点通过路径来标识及访问。除此之外,每一个节点还拥有自身的一些信息,包括:数据、数据长度、创建时间、修改时间等。从节点的这些特性(既含有数据,又通过路径来标识)可以看出,它既可以被看作是一个文件,又可以被看作是一个目录,因为它同时具有二者的特点。为了便于表达,后面我们将使用Znode来表示所讨论的ZooKeeper节点。

具体地说,Znode维护着数据、访问控制列表(access control list, ACL)、时间戳等包含交换版本号信息的数据结构,通过对这些数据的管理使缓存中的数据生效,并且执行协调更新操作。每当Znode中的数据更新它所维护的版本号就会增加,这非常类似于数据库中计数器时间戳的操作方式。

另外Znode还具有原子性操作的特点:在命名空间中,每一个Znode的数据将被原子地读写。读操作将读取与Znode相关的所有数据,写操作将替换掉所有的数据。除此之外,每一个节点都有一个访问控制列表,这个访问控制列表规定了用户操作的权限。

ZooKeeper中同样存在临时节点。这些节点与session同时存在,当session生命周期结束时,这些临时节点也将被删除。临时节点在某些场合也发挥着非常重要的作用,例如Leader选举、锁服务等。