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