日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

zookeeper设置临时节点失效时间_ZooKeeper 相关概念以及使用小结

發(fā)布時(shí)間:2024/9/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 zookeeper设置临时节点失效时间_ZooKeeper 相关概念以及使用小结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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 有以下幾種類型:

  • 永久節(jié)點(diǎn)
  • 一旦創(chuàng)建,將會(huì)一直存在,除非手動(dòng)刪除。dubbo 目錄節(jié)點(diǎn)為永久節(jié)點(diǎn)。

  • 臨時(shí)節(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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。