分布式服务框架

持久节点PERSISTENT

  • 节点创建后一直存在,直到删除操作主动清除此节点-不会因为创建该节点的客户端会话失效而消失

临时节点EPHEMERAL

  • 和持久节点不同的是,临时节点的生命周期和客户端会话绑定.如果客户端会话失效,那么这个节点就会自动被清除掉.注意,这里提到的是会话失效,而非连接断开.另外,在临时节点下面不能创建子节点.

时序节点SEQUENTIAL


持久时序节点PERSISTENT_SEQUENTIAL

  • 该节点与PERSISTENT特性一致,额外特性是,在Zookeeper中,每个父节点会为它的第一级子节点维护一份时序,会记录每个子节点创建的先后顺序.基于这个特性,在创建子节点的时候,可以设置这个属性,那么在创建节点过程中,Zookeeper会自动为给定节点名(tmp-)加上一个数字后缀(3),作为新的节点名(tmp-3).这个数字后缀的范围是整型的最大值.

临时时序节点EPHEMERAL_SEQUENTIAL(可以用来实现Master选举和分布式锁)

  • 分布式锁在同一个进程中很容易实现,但是在跨进程或者在不同Server之间就不好实现了.Zookeeper 却很容易实现这个功能,实现方式也是需要获得锁的 Server 创建一个 EPHEMERAL_SEQUENTIAL 目录节点,然后调用 getChildren方法获取当前的目录节点列表中最小的目录节点是不是就是自己创建的目录节点,如果正是自己创建的,那么它就获得了这个锁,如果不是那么它就调用 exists(String path, boolean watch) 方法并监控 Zookeeper 上目录节点列表的变化,一直到自己创建的节点是列表中最小编号的目录节点,从而获得锁,释放锁很简单,只要删除前面它自己所创建的目录节点就行了.

Zookeeper_其他

角色

Zookeeper_其他_02