久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何進行Zookeeper分布式鎖的代碼實現

168次閱讀
沒有評論

共計 1711 個字符,預計需要花費 5 分鐘才能閱讀完成。

這期內容當中丸趣 TV 小編將會給大家帶來有關如何進行 Zookeeper 分布式鎖的代碼實現,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

前言 Zookeeper 分布式鎖的代碼實現

在上一篇博客中,從思路上已經分析了 Zookeeper 如何幫助我們實現分布式鎖,我們直接來看代碼:

[分布式客戶端]

[獲取分布式鎖的方法 lock: 初始化 ZK]

[獲取分布式鎖的方法 lock: 創建臨時節點與判斷最小路徑]

[main 測試]

[運行結果]

需要注意的是,即便監控到了比自己序號小的節點的刪除 Watcher,也需要再次確認下!

從結果上,看的很清楚,各個線程有序獲得鎖。

zkclient

zkclient 是在 zookeeper 原生 API 基礎上做了一點封裝,簡化了 ZK 的復雜性。

來看代碼:

我們觀察下 zkclient 的使用,和以前基于 zookeeper 的原生 API 有哪些區別呢?

第一,原生 API 需要我們利用 CountDownLatch 來確保 ZK 的初始化,現在 zkclient 幫助我們屏蔽掉了這個細節

第二,原生 API 是不可以遞歸創建節點的,而 zkclient 可以幫助我們遞歸創建不存在的父節點,還可以遞歸刪除

第三,支持序列化操作,上面的代碼你大概可以看出一些端倪,就是我們從操作 byte[] 到操作 String 了。(事實上,在 zkclient 中你只需要實現 ZkSerializer 接口,就可以完成 Object 到 byte[] 的轉換,雖然如此,但是實際開發中,利用 JSON 也挺好的!)

第四,還有最重要的一點就是,zkclient 將對節點的操作和對節點的監控分離開了,在原生 API 中 2 者是耦合在一起的!從思想上來看,便于理解;從代碼上來看,也簡潔些(如果寫在一起,頭都大了);更加方便的是,zkclient 替我們完成了重復 watch 的功能!

[watch 訂閱機制]

看到沒有,是不是有點像 MQ 的訂閱機制,非常好用!【但是也有點不太完美,子節點的數據變更為什么沒有監控呢,這有點不符合人性啊!還好有 Curator…】

但是呢,我們知道 ZK 是有很多應用場景的,比如實現分布式鎖,zkclient 并沒有替我們進行封裝,但是 Curator 框架可以幫助我們做到!

Curator

為了更好實現 Java 操作 Zookeeper 服務器,后來出現 Curator 框架,功能非常強大,目前已經是 Apache 的頂級項目,有很多豐富的特性,比如 session 超時重連,主從選舉,分布式計數器,分布式鎖等,非常有利于 Zookeeper 復雜場景下的開發。

POM 文件:

增刪改查:

Curator 框架使用鏈式編程風格,易讀性很強!

注意,不論是原生的 API,還是基于 zkclient 的 API,都是提供的 connectTimeout,而 Curator 提供了 sessionTimeout,功能很強大。

無論是原生的 API,還是 zkclient,都是支持異步回調的,但是 Curator 框架在支持異步回調的同時,增加了線程池供我們優化!

[NodeCacheListener]

如何進行 Zookeeper 分布式鎖的代碼實現

[PathChildrenCacheListener]

如何進行 Zookeeper 分布式鎖的代碼實現

對于 Curator 而言,為了解決重復 Watch 的問題,它引入了一種全新的思想:Cache 與 ZK SERVER 比對的機制。不論是原生的 API,還是基于 ZKCLIENT 的,其實它們解決思路都是重復注冊!

思路決定出路!Curator 通過事件驅動將客戶端的 Cache 與 ZK SERVER 的數據比對,就自然而然的解決了重復 WATCH 的功能!為什么 Curator 能成為 Apache 的頂級項目呢,我想大概就是因為它的與眾不同的設計思想!

在 Curator 中,有 2 種 Listener,一個是監控節點的 NodeCacheListener,一個是監控子節點的 PathChildrenCacheListener。PathChildernCacheListener 可以監控子節點的新增、修改、刪除,非常好用!

上述就是丸趣 TV 小編為大家分享的如何進行 Zookeeper 分布式鎖的代碼實現了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-04發表,共計1711字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 莱州市| 赤水市| 枣庄市| 错那县| 富源县| 普安县| 青海省| 旬邑县| 永济市| 延川县| 会泽县| 鄂伦春自治旗| 潮州市| 康定县| 保康县| 沙湾县| 松滋市| 拜城县| 盱眙县| 黄冈市| 汉阴县| 娱乐| 莲花县| 陆丰市| 曲麻莱县| 泰来县| 肥东县| 和平县| 平原县| 镇雄县| 名山县| 仲巴县| 冕宁县| 宾阳县| 通许县| 蚌埠市| 白朗县| 齐齐哈尔市| 保康县| 交城县| 泾源县|