1. 程式人生 > >ZooKeeper架構設計及其應用要點

ZooKeeper架構設計及其應用要點

ZooKeeper中的Watch是隻能觸發一次。也就是說,如果客戶端在指定的ZNode設定了Watch,如果該ZNode資料發生變更,ZooKeeper會發送一個變更通知給客戶端,同時觸發設定的Watch事件。如果ZNode資料又發生了變更,客戶端在收到第一次通知後沒有重新設定該ZNode的Watch,則ZooKeeper就不會發送一個變更通知給客戶端。
ZooKeeper非同步通知設定Watch的客戶端。但是ZooKeeper能夠保證在ZNode的變更生效之後才會非同步地通知客戶端,然後客戶端才能夠看到ZNode的資料變更。由於網路延遲,多個客戶端可能會在不同的時間看到ZNode資料的變更,但是看到變更的順序是能夠保證有序一致的。
ZNode可以設定兩類Watch,一個是Data Watches(該ZNode的資料變更導致觸發Watch事件),另一個是Child Watches(該ZNode的孩子節點發生變更導致觸發Watch事件)。呼叫getData()和exists() 方法可以設定Data Watches,呼叫getChildren()方法可以設定Child Watches。呼叫setData()方法觸發在該ZNode的註冊的Data Watches。呼叫create()方法建立一個ZNode,將觸發該ZNode的Data Watches;呼叫create()方法建立ZNode的孩子節點,則觸發ZNode的Child Watches。呼叫delete()方法刪除ZNode,則同時觸發Data Watches和Child Watches,如果該被刪除的ZNode還有父節點,則父節點觸發一個Child Watches。
另外,如果客戶端與ZooKeeper Server斷開連線,客戶端就無法觸發Watches,除非再次與ZooKeeper Server建立連線。