ZooKeeper:04---基礎語法(節點:znode)

一、節點概述

  • ZooKeeper操作和維護⼀個⼩型的數據節點,這些節點被稱爲znode採⽤類似於⽂件系統的層級樹狀結構進⾏管理
  • 下圖描述了⼀個znode樹的結構,根節點包含4個⼦節點,其中三個⼦節點擁有下⼀級節點,葉⼦節點存儲了數據信息:

  • 我們假設上面的ZooKeeper數據結構取自於一個主從模式的例子。那麼有:
    • /workers節點:作爲⽗節點,其下每個znode⼦節點保存了系統中⼀個可用從節點信息。如上所示,其當前只有⼀個從節點/worker/worker-1(foot.com:2181)
    • /tasks節點:作爲⽗節點,其下每個znode⼦節點保存了所有已經創建並等待從節點執⾏的任務的信息,主-從模式的應用的客戶端在/tasks下添加 ⼀個znode⼦節點,用來表示⼀個新任務,並等待任務狀態的znode節點
    • /assign節點:作爲⽗節點,其下每個znode⼦節點保存了分配到某個從節點的⼀個任務信息,當主節點爲某個從節點分配了⼀個任務,就會在/assign下增加⼀個⼦節點

二、節點相關基礎API

三、節點數據

節點數據

  • znode節點可以包含數據,也可以不包含數據
  • 在使用create命令創建節點時我們可以指定節點數據,也可以不指定數據

數據的格式

  • 如果⼀個znode節點包含數據,那麼數據存儲爲字節數組(byte array)
  • 字節數組的具體格式特定於每個應⽤的實現,ZooKeeper並不直接提供解析的⽀持。我們可以使⽤如 Protocol Buffers、Thrift、Avro或MessagePack等序列化(Serialization)包來⽅便地處理保存於znode節點的數據格式,不過有些時候,以UTF-8或 ASCII編碼的字符串已經夠⽤了

數據不允許局部寫入/讀取

  • ZooKeeper不允許局部寫入或局部讀取znode節點的數據當設置或讀取一個znode節點的數據時,必須全局替換或者全部讀取

四、節點的類型

  • 當新建znode時,還需要指定該節點的類型(mode),不同的類型決定了znode節點的⾏爲⽅式
  • znode的節點類型組合在一起有4種情況:
    • 持久的(persistent):create創建節點時,不指定任何參數即爲創建持久性節點
    • 臨時的 (ephemeral):create創建節點時,指定-e選項
    • 持久有序的(persistent_sequential):create創建節點時,指定-s選項
    • 臨時有序的 (ephemeral_sequential):create創建節點時,指定-s -e選項

①持久節點

  • znode節點可以是持久(persistent)節點
  • 持久的znode,如/path,只能通過調⽤delete來進⾏刪除
  • 持久znode是⼀種⾮常有⽤的znode,可以通過持久類型的znode爲應⽤保存⼀些數據,即使znode的創建者不再屬於應⽤系統時,數據也可以保存下來⽽不丟失。例如,在主-從模式例⼦中,需要保存從節點的任務分配情況,即使分配任務的主節點已經崩潰了

②臨時節點

  • znode節點可以是臨時(ephemeral) 節點
  • 臨時的znode與持久節點相反,當創建該節點的客戶端崩潰或關閉了與ZooKeeper的連接時,這個節點就會被刪除
  • 臨時znode傳達了應⽤某些⽅⾯的信息,僅當創建者的會話有效時這些信息必須有效保存。例如,在主從模式的例⼦中,當主節點創建的znode爲臨時節點時,該節點的存在意味着現在有⼀個主節點,且主節點狀態處於正常運⾏中。如果主znode消失後,該znode節點仍然存在,那麼系統將⽆法監測到主節點崩潰。這樣就可以阻⽌系統繼續進⾏,因此這個znode需要和主節點⼀起消失。我們也在從節點中使⽤臨時的znode,如果⼀個從節點失效,那麼會話將會過期,之後znode/workers也將⾃動消失
  • ⼀個臨時znode,在以下兩種情況下將會被刪除:
    • 1.當創建該znode的客戶端的會話因超時或主動關閉⽽中⽌時
    • 2.當某個客戶端(不⼀定是創建者)主動刪除該節點時
  • 因爲臨時的znode在其創建者的會話過期時被刪除,所以我們現在不允許臨時節點擁有⼦節點。在社區討論中,已經討論過關於允許臨時znode擁 有⼦節點的問題,其想法是使其⼦節點也均爲臨時節點。這個功能也許會 出現在未來的發佈版本中,但現在還是不可⽤的

③有序節點

  • ⼀個znode還可以設置爲有序(sequential)節點
  • ⼀個有序znode節點被分配唯⼀個單調遞增的整數。當創建有序節點時,⼀個序號會被追加到路徑之後
  • 例如,如果⼀個客戶端創建了⼀個有序znode節點,其路徑爲/tasks/task-,那麼ZooKeeper將會分配⼀個序號,如1,並將這個數字追加到路徑之後,最後該znode節點爲/tasks/task-1
  • 有序znode通過提供了創建具有唯⼀名稱的znode的簡單⽅式。同時也通過這種⽅式可以直觀地查看znode的創建順序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章