當前位置:
首頁 > 知識 > ZooKeeper分布式鎖淺談(一)

ZooKeeper分布式鎖淺談(一)

一.概述

清明節的時候寫了一篇分布式鎖概述,裡面介紹了分布式鎖實現的幾種方式,其實那時候我一直沉迷於使用redis的悲觀鎖和樂觀鎖來實現分布式鎖,直到一個血案的引發才讓我重新認識了redis分布式鎖的弊端,所以才痛定思痛潛心研究Zookeeper;自己裝了三台Centos虛擬機,搭建了ZooKeeper集群。

二.ZooKeeper基本概念

1.前言

ZooKeeper 是一個開源的分布式協調服務,由雅虎創建,是 Google Chubby 的開源實現。分布式應用程序可以基於 ZooKeeper 實現諸如數據發布/訂閱、負載均衡、命名服務、分布式協調/通知、集群管理、Master 選舉、分布式鎖和分布式隊列等功能。

2.ZooKeeper角色

在 ZooKeeper 中,有三種角色:

Leader

Follower

Observer

一個 ZooKeeper 集群同一時刻只會有一個 Leader,其他都是 Follower 或 Observer。當Leader奔潰後會從Follower重新選舉一個出來,讀者可以自行參考Zab協議。

3.節點介紹

1、PERSISTENT-持久化目錄節點

客戶端與Zookeeper斷開連接後,該節點依舊存在

2、PERSISTENT_SEQUENTIAL-持久化順序編號目錄節點

客戶端與Zookeeper斷開連接後,該節點依舊存在,只是Zookeeper給該節點名稱進行順序編號

3、EPHEMERAL-臨時目錄節點

客戶端與Zookeeper斷開連接後,該節點被刪除

4、EPHEMERAL_SEQUENTIAL-臨時順序編號目錄節點

客戶端與Zookeeper斷開連接後,該節點被刪除,只是Zookeeper給該節點名稱進行順序編號

三.Zookeeper分布式鎖的實現

Zookeeper實現分布式鎖是通過節點和臨時順序節點來實現的:主要有一下步驟:

1. 在構造函數裡面啟動的時候建立一個節點,假如命名為:lock。節點類型為持久節點(PERSISTENT)【ZooKeeper裡面的znode節點會自動同步的,而且是強一致性,創建一個節點後只有ZooKeeper集群同步完成後算成功】

2. 每當進程需要訪問共享資源時,會在lock節點下面建立響應的順序子節點,節點類型為臨時順序節點(EPHEMERAL_SEQUENTIAL)

3. 在建立子節點之後,判斷剛剛建立的子節點順序號是否為最小節點,如果是最小節點,則可以獲得該鎖對資源進行訪問。(臨時子節點建立會自動生成一個序號的)

4. 如果不是該節點,就獲得該節點的上一順序節點,並給該節點是否存在註冊監聽事件。同時在這裡阻塞。等待監聽事件的發生。獲得控制權(實現watch介面,並且重寫process方法,在process裡面實現監聽)

5. 當完成之後,關閉ZooKeeper連接,進而可以應發監聽事件,釋放該鎖(客戶端關閉ZooKeeper連接之後會刪除當前的臨時節點)

下一篇將貼上代碼基於代碼進行詳細介紹。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

一不小心,陷入TCP的性能問題
javascript痛點之一變數作用域
react router 4.0以上的路由應用
Java 8 新特性1-函數式介面

TAG:科技優家 |

您可能感興趣

Zookeeper+Hadoop+Hbase整合平台搭建(全分布模式)全套小白教程
ZooKeeper 設計原理
從Paxos到zookeeper分散式一致性原理與實踐-Zookeeper與Paxos
緩存架構SpringBoot集成Curator實現zookeeper分散式鎖
《ZooKeeper分散式專題與Dubbo微服務入門》
Redis Zookeeper 添加本地服務
分散式系統中的冪等性-zookeeper與dubbo
docker zookeeper 集群搭建
漫畫:什麼是 ZooKeeper?
ZooKeeper運維部署的一些經驗
Facebook為何放棄ZooKeeper轉用自研配置管理系統?
zookeeper 實現分散式鎖安全用法
zookeeper之acl 張飛的繡花針
大數據開發系列之Zookeeper
zookeeper入門系列:概述
詳解分散式應用程序協調服務Zookeeper
雲伺服器-安裝zookeeper單機環境
可能是全網把 ZooKeeper 概念講的最清楚的一篇文章
阿里巴巴為什麼不用 ZooKeeper 做服務發現?
深入淺析zookeeper的一致性模型及其實現