Zookeeper
為什么節(jié)點數必須是奇數?
ZK集群需要一個主節(jié)點,主節(jié)點選舉規(guī)則中要求可用節(jié)點數>總節(jié)點數/2
ZK存儲模型
類似Linux文件系統(tǒng),以"/"為根節(jié)點的樹,每個節(jié)點稱為Znode.除了"/"節(jié)點外,每個節(jié)點都有父節(jié)點
Znode可以保存二進制有效負載數據,上限為1M
整個樹形目錄結構都放在內存中
Znode四種類型
- 持久化節(jié)點
- 持久化順序節(jié)點
- 臨時節(jié)點
- 臨時順序節(jié)點
分布式命名
原理:ZK節(jié)點的樹形分層結構和子節(jié)點的順序維護能力
-
應用
- 分布式API服務(Dubbo),節(jié)點上存儲url地址
- 分布式ID生成器(利用ZK的順序節(jié)點)
分布式鎖
- 原理:利用臨時順序節(jié)點,順序節(jié)點的第一個位置即為獲取鎖成功
- 缺點:性能不高,創(chuàng)建和銷毀節(jié)點需要主服務器執(zhí)行,Leader服務器還需將數據同步所有的從服務器
- 傳遞有序(后ZNode監(jiān)聽前一個ZNode)
分布式事件監(jiān)聽
概念:實現(xiàn)對ZK服務器端的事件監(jiān)聽
類型
-
標準的觀察者模式(Watcher監(jiān)聽器)
- Watcher監(jiān)聽器只能監(jiān)聽一次
-
緩存監(jiān)聽模式(Cache事件監(jiān)聽機制)
定義:Cache在客戶端緩存ZK的ZNode的各種狀態(tài),感知ZNode狀態(tài)變化時,觸發(fā)事件,注冊的監(jiān)聽器會處理這些事件
提供反復注冊的能力
-
三種模式
- 當前結點
- 子結點
- 當前結點+子結點
Zookeeper.png