1. 程式人生 > >zookeeper學習心得一:基礎講解---zk節點型別以及對節點的相應操作

zookeeper學習心得一:基礎講解---zk節點型別以及對節點的相應操作

zookeeper節點型別

    持久節點(PERSISTENT)
    所謂持久節點,是指在節點建立後,就一直存在,直到有刪除操作來主動清除這個節點——不會因為建立該節點的客戶端會話失效而消失。
    持久順序節點(PERSISTENT_SEQUENTIAL)
    這類節點的基本特性和上面的節點型別是一致的。額外的特性是,在ZK中,每個父節點會為他的第一級子節點維護一份時序,會記錄每個子節點建立的先後順序。基於這個特性,在建立子節點的時候,可以設定這個屬性,那麼在建立節點過程中,ZK會自動為給定節點名加上一個數字字尾,作為新的節點名。這個數字字尾的範圍是整型的最大值。
    在建立節點的時候只需要傳入節點 “/test_”,這樣之後,zookeeper自動會給”test_”後面補充數字。
    臨時節點(EPHEMERAL)
    和持久節點不同的是,臨時節點的生命週期和客戶端會話繫結。也就是說,如果客戶端會話失效,那麼這個節點就會自動被清除掉。注意,這裡提到的是會話失效,而非連線斷開。另外,在臨時節點下面不能建立子節點。
    這裡還要注意一件事,就是當你客戶端會話失效後,所產生的節點也不是一下子就消失了,也要過一段時間,大概是10秒以內,可以試一下,本機操作生成節點,在伺服器端用命令來檢視當前的節點數目,你會發現客戶端已經stop,但是產生的節點還在。
    臨時順序節點(EPHEMERAL_SEQUENTIAL)
    此節點是屬於臨時節點,不過帶有順序,客戶端會話結束節點就消失。下面是一個利用該特性的分散式鎖的案例流程。
    (1)客戶端呼叫create()方法建立名為“locknode/
    guid-lock-”的節點,需要注意的是,這裡節點的建立型別需要設定為EPHEMERAL_SEQUENTIAL。
    (2)客戶端呼叫getChildren(“locknode”)方法來獲取所有已經建立的子節點,注意,這裡不註冊任何Watcher。
    (3)客戶端獲取到所有子節點path之後,如果發現自己在步驟1中建立的節點序號最小,那麼就認為這個客戶端獲得了鎖。
    (4)如果在步驟3中發現自己並非所有子節點中最小的,說明自己還沒有獲取到鎖。此時客戶端需要找到比自己小的那個節點,然後對其呼叫exist()方法,同時註冊事件監聽。
    (5)之後當這個被關注的節點被移除了,客戶端會收到相應的通知。這個時候客戶端需要再次呼叫getChildren(“locknode”)方法來獲取所有已經建立的子節點,確保自己確實是最小的節點了,然後進入步驟3。
---------------------
作者:荷馬先生
來源:CSDN
原文:https://blog.csdn.net/randompeople/article/details/70500076
版權宣告:本文為博主原創文章,轉載請附上博文連結!