zookeeper设置临时节点失效时间_ZooKeeper 相关概念以及使用小结
Dubbo 通過注冊中心在分布式環(huán)境中實現(xiàn)服務的注冊與發(fā)現(xiàn),而注冊中心通常采用 ZooKeeper,研究注冊中心相關(guān)源碼繞不開 ZooKeeper,所以學習了 ZooKeeper 的基本概念以及相關(guān) API 操作。
ZooKeeper 相關(guān)概念
session
客戶端與服務端采用 TCP 長連接,服務端在為客戶端創(chuàng)建 Session 會分配一個唯一 sessionId。在 Session timeout 時間內(nèi),客戶端可以向服務端發(fā)送請求以及接受 watcher 事件通知。
數(shù)據(jù)結(jié)構(gòu)
Zookeeper 將所有數(shù)據(jù)存儲在內(nèi)存中,數(shù)據(jù)模型是一棵樹(Znode Tree),由斜杠(/)的進行分割的路徑,就是一個Znode,例如/foo/path1。
Znode
Znode 將會保存數(shù)據(jù)內(nèi)容以及相關(guān)屬性信息。在 Znode 中使用 Stat 數(shù)據(jù)結(jié)保存相關(guān)屬性信息。Stat 屬性中有三種版本信息,分別為 version:當前節(jié)點版本信息,cversion:當前節(jié)點子節(jié)點版本,aversion 當前節(jié)點的 ACL 版本。每次發(fā)生改動,版本數(shù)值將會單調(diào)遞增。
更新,刪除 Znode 可以傳入版本數(shù)值,如果版本數(shù)值不對,將會導致刪除/更新失敗,這個特性類似于 CAS 操作。
Znode 有以下幾種類型:
一旦創(chuàng)建,將會一直存在,除非手動刪除。dubbo 目錄節(jié)點為永久節(jié)點。
臨時節(jié)點基于客戶端 Session,Session 有效期內(nèi)將會一直存在,Session 失效,節(jié)點將會自動刪除。
利用這個機制,Dubbo 服務者創(chuàng)建的節(jié)點就是臨時節(jié)點。如果 Dubbo 服務者程序意外宕機,在 Session 超時之后,也能自動刪除服務節(jié)點,自動下線有問題的服務。
3 順序節(jié)點
創(chuàng)建順序節(jié)點將會自動在名字后追加整形數(shù)字,默認長度為 10 位。順序節(jié)點也分為永久與臨時。
利用臨時順序節(jié)點,我們可以用來實現(xiàn)分布式鎖 https://juejin.im/post/5c01532ef265da61362232ed。
Watcher 機制
客戶端可以在指定節(jié)點注冊監(jiān)聽器(Watcher),在觸發(fā)特定事件后,ZooKeeper 服務端會將事件通知到客戶端。在 Dubbo 中消費者基于 watcher 機制可以動態(tài)感知到新的服務者加入。
ZooKeeper 可以在三種請求中設置監(jiān)聽,分別為:
- getData(),獲取節(jié)點數(shù)據(jù)
- getChildren() 獲取子節(jié)點
- exists() 判斷節(jié)點是否存在
通知事件類型分為,增刪改事件,以及子節(jié)點變動事件。
需要注意的是,watcher 通知過一次之后將會失效,若想繼續(xù)監(jiān)聽通知,需要重新注冊。
ZooKeeper 原生 API 操作
ZooKeeper 官方提供 Java API 實現(xiàn),提供相關(guān)操作的方法。
創(chuàng)建連接
ZooKeeper zk=new ZooKeeper("127.0.0.1:2181總結(jié)
以上是生活随笔為你收集整理的zookeeper设置临时节点失效时间_ZooKeeper 相关概念以及使用小结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么判断对方是一个怎样的人 我以前有个朋
- 下一篇: 打开闪光灯_用手机拍照这么久,你居然还不