zookeeper 節點是有生命週期的,這取決於節點的型別。在 zookeeper 中,節點型別可以分為持久節點(persistent )、臨時節點(ephemeral),以及時序節點(sequential ),具體在節點建立過程中,一般是組合使用,可以生成以下 4 種節點型別。
持久節點(persistent)
所謂持久節點,是指在節點建立後,就一直存在,直到有刪除操作來主動清除這個節點——不會因為建立該節點的客戶端會話失效而消失。
持久順序節點(persistent_sequential)
這類節點的基本特性和上面的節點型別是一致的。額外的特性是,在zk中,每個父節點會為他的第一級子節點維護乙份時序,會記錄每個子節點建立的先後順序。基於這個特性,在建立子節點的時候,可以設定這個屬性,那麼在建立節點過程中,zk會自動為給定節點名加上乙個數字字尾,作為新的節點名。這個數字字尾的範圍是整型的最大值。
臨時節點(ephemeral)
和持久節點不同的是,臨時節點的生命週期和客戶端會話繫結。也就是說,如果客戶端會話失效,那麼這個節點就會自動被清除掉。注意,這裡提到的是會話失效,而非連線斷開。另外,在臨時節點下面不能建立子節點。
臨時順序節點(ephemeral_sequential)
可以用來實現分布式鎖
客戶端呼叫create()方法建立名為「locknode/guid-lock-」的節點,需要注意的是,這裡節點的建立型別需要設定為ephemeral_sequential。
客戶端呼叫getchildren(「locknode」)方法來獲取所有已經建立的子節點,注意,這裡不註冊任何watcher。
客戶端獲取到所有子節點path之後,如果發現自己在步驟1中建立的節點序號最小,那麼就認為這個客戶端獲得了鎖。
如果在步驟3中發現自己並非所有子節點中最小的,說明自己還沒有獲取到鎖。此時客戶端需要找到比自己小的那個節點,然後對其呼叫exist()方法,同時註冊事件監聽。
之後當這個被關注的節點被移除了,客戶端會收到相應的通知。這個時候客戶端需要再次呼叫getchildren(「locknode」)方法來獲取所有已經建立的子節點,確保自己確實是最小的節點了,然後進入步驟3。
**:
ZooKeeper 節點型別
zookeeper 節點是有生命週期的,這取決於節點的型別。在 zookeeper 中,節點型別可以分為持久節點 persistent 臨時節點 ephemeral 以及時序節點 sequential 具體在節點建立過程中,一般是組合使用,可以生成以下 4 種節點型別。持久節點 persistent...
ZooKeeper 節點型別
zookeeper 節點是有生命週期的,這取決於節點的型別。在 zookeeper 中,節點型別可以分為持久節點 persistent 臨時節點 ephemeral 以及時序節點 sequential 具體在節點建立過程中,一般是組合使用,可以生成以下 4 種節點型別。1 持久節點 persiste...
zookeeper節點型別
1 znode有兩種型別 短暫 ephemeral 客戶端和伺服器端斷開連線後,建立的節點自己刪除 持久 persistent 客戶端和伺服器端斷開連線後,建立的節點不刪除2 znode 有四種形式的目錄節點 預設是 persistent 1 持久化目錄節點 persistent 客戶端與zooke...