1. 程式人生 > >ZooKeeper的名字空間節點(有關znode的一切)

ZooKeeper的名字空間節點(有關znode的一切)

    當某個znode的變化可觸發監視點時,ZooKeeeper會觸發其上可觸發的所有監視點,這在某些情況下可能會產生問題,如1000個客戶端都在監視某znode的Data時,當該znode的資料發生變化,會觸發1000個通知,這會造成效能的波動,比如同一時刻的提交操作可能延遲。解決這一問題,OREILLY書上給出了一個利用有序節點的辦法(這塊書上寫的不錯,但翻譯依舊很爛,現實中很常用所以整理下):例如n個客戶端都搶一把鎖。第一種方法是搶到的客戶端建立/lock節點,其餘客戶端便監視該節點的刪除事件,當佔用鎖的客戶端完成操作斷開時,/lock節點刪除,其他客戶端獲得通知,這種方法就有效能問題。另一種方法是,所有客戶端均建立有序節點/lock/lock-xxx,其中xxx為序號,xxx最小的客戶端獲得鎖,其餘客戶端監視前一個節點,例如有/lock/lock-001,/lock/lock-002,/lock/lock-003三個節點時,001的客戶端獲得鎖,002的客戶端監視001的znode,003的客戶端監視002的znode,當001的鎖釋放時,002即獲得鎖,以此類推,這種方式下每個znode上監視的客戶端只有一個,儘管總watches數是一樣的,卻不會造成效能的波動。