zk系列-zookeeper的使用
阿新 • • 發佈:2019-02-19
zk支援java/c訪問,java常用的有apache-zkclient、社群版的i0tec-zkclient、github.adyliu,apache-zkclient是zk自身提供的介面,i0tec/adyliu都是對apache版的封裝豐富,提供了便捷的事件監聽和資料序列化。C版的使用見"zk系列-c++下zookeeper使用例項"。具體使用不做介紹了。
一般zkclient要支援如下功能:
- 節點-建立、刪除、是否存在、永久節點、臨時節點、序列節點
- 事件-子節點變化、節點變化、狀態變化、資料變化事件的註冊和取消。也就是收到服務端事件通知時,根據事件型別呼叫相關函式。
- 維護對不同zkserver的zkclient,維護各自的連線數,當一個zkclient的連線數為0時,關閉其連線
- 如果維護全公司的zk,可以封裝一些預設的配置,讓zk對使用者完全透明
- 支援儲存資料的序列化和反序列化:如java中的Properties,來管理配置(properties或xml格式);或者其他格式,只要自己知道二進位制流的格式就好
- 分散式鎖-不同程序或服務間互斥的實現,主要使用臨時序列節點
- 向zkserver在同一個父目錄(如/lock)下建立臨時序列子節點(/lock/ip_),並監聽/lock子節點變化
- /lock下會有/ipa_1,/ipb_2,/ipc_3類似遞增的臨時節點
- ipa獲得/lock下所有子節點,當前最小節點是自己建立的時候,表示該服務獲得鎖
- ipa完成互斥操作後,刪除/lock/ipa_1,表示釋放鎖
- zkserver會通知其他client變化,其他client重複以上判斷和操作
- 統一配置:服務經常有自己的配置檔案,但服務又是多份部署,為了保證配置的一致性及修改方便,可以用zkserver維護配置檔案。各服務都監聽配置節點,當節點資料變化時,各自獲取新資料(即配置)
- 服務管理:後臺服務都向一個節點下建立子節點,儲存自己的Ip和埠;客戶端獲取該節點下的所有子節點,隨機選一個ip去呼叫。也可以做智慧一些,每個ip節點還能記錄下最近一段時間使用該ip的client數,這樣client選用使用數最少的ip,達到更好的負載均衡。