中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

zookeeper分布式鎖服務的原理分析

發布時間:2021-12-09 09:21:40 來源:億速云 閱讀:135 作者:小新 欄目:云計算

小編給大家分享一下zookeeper分布式鎖服務的原理分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

分布式鎖服務在大家的項目中或許用的不多,因為大家都把排他放在數據庫那一層來擋。當大量的行鎖、表鎖、事務充斥著數據庫的時候。一般web應用很多的瓶頸都在數據庫上,這里給大家介紹的是減輕數據庫鎖負擔的一種方案,使用zookeeper分布式鎖服務。

zookeeper是hadoop下面的一個子項目, 用來協調跟hadoop相關的一些分布式的框架, 如hadoop, hive, pig等, 其實他們都是動物, 所以叫zookeeper ——“動物園管理員”。動物園里當然有好多的動物,游客可以根據動物園提供的向導圖到不同的場館觀賞各種類型的動物,而不是像走在原始叢林里,心驚膽顫的被動物所觀賞。為了讓各種不同的動物呆在它們應該呆的地方,而不是相互串門,或是相互廝殺,就需要動物園管理員按照動物的各種習性加以分類和管理,這樣我們才能更加放心安全的觀賞動物。回到我們企業級應用系統中,隨著信息化水平的不斷提高,我們的企業級系統變得越來越龐大臃腫,性能急劇下降,客戶抱怨頻頻。拆分系統是目前我們可選擇的解決系統可伸縮性和性能問題的唯一行之有效的方法。但是拆分系統同時也帶來了系統的復雜性——各子系統不是孤立存在的,它們彼此之間需要協作和交互,這就是我們常說的分布式系統。各個子系統就好比動物園里的動物,為了使各個子系統能正常為用戶提供統一的服務,必須需要一種機制來進行協調——這就是ZooKeeper——動物園管理員。

ZooKeeper本質上是一個分布式的小文件存儲系統。原本是Apache Hadoop的一個組件,現在被拆分為一個Hadoop的獨立子項目,在HBase(Hadoop的另外一個被拆分出來的子項目,用于分布式環境下的超大數據量的DBMS)中也用到了ZooKeeper集群。ZooKeeper有如下的特性:

1) 簡單

ZooKeeper核心是一個精簡的文件系統,它提供了一些簡單的文件操作以及附加的功能,例如排序和通知。

2) 易表達

ZooKeeper的數據結構原型是一棵znode樹(類似Linux的文件系統),并且它們是一些已經被構建好的塊,可以用來構建大型的協作數據結構和協議。

3) 高可用性

ZooKeeper可以運行在一組服務器上,同時它們被設計成高可用性,為你的應用程序避免單點故障。

4) 松耦合交互

ZooKeeper提供的Watcher機制使得各客戶端與服務器的交互變得松耦合,每個客戶端無需知曉其他客戶端的存在,就可以和其他客戶端進行數據交互。

5) 豐富的API

ZooKeeper為開發人員提供了一套豐富的API,減輕了開發人員編寫通用協議的負擔。

zookeeper其實是集群中每個節點都維護著一棵相同的樹, 樹的結構跟linux的目錄結構的概念差不多, 以/為跟節點, 下邊可以擴展任意的節點和葉子節點, 每個節點都可以寫入數據. 基于zookeeper的分布式鎖的實現, 其實是得益于zookeeper同步文件的強大性, 我們相信每時每刻我們訪問zookeeper的樹時, 相同節點返回的數據都是一致的. 這要靠zookeeper內部的一些算法來實現. 特別是leader的選舉算法。

官方文檔:http://zookeeper.apache.org/doc/r3.3.2/zookeeperOver.html#ch_DesignOverview

下載:http://zookeeper.apache.org/releases.html

C#的zookeeper客戶端還是有一些和zookeeper最新版3.4.3兼容 https://github.com/ewhauser/zookeeper/branches 

zookeeper集群的每個節點的數據都是一致的, 那么我們可以通過這些節點來作為鎖的標志.

首先給鎖設置一下API, 至少要包含, lock(鎖住), unlock(解鎖), isLocked(是否鎖住)三個方法,然后我們可以創建一個工廠(LockFactory), 用來專門生產鎖.鎖的創建過程如下描述:

前提:每個鎖都需要一個路徑來指定(如:/geffzhang/lock)

1.根據指定的路徑, 查找zookeeper集群下的這個節點是否存在.(說明已經有鎖了)

2. 如果存在, 根據查詢者的一些特征數據(如ip地址/hostname), 當前的鎖是不是查詢者的

3. 如果不是查詢者的鎖, 則返回null, 說明創建鎖失敗

4. 如果是查詢者的鎖, 則把這個鎖返回給查詢者

5. 如果這個節點不存在, 說明當前沒有鎖, 那么創建一個臨時節點, 并將查詢者的特征信息寫入這個節點的數據中, 然后返回這個鎖.

據以上5部, 一個分布式的鎖就可以創建了.

創建的鎖有三種狀態:

1. 創建失敗(null), 說明該鎖被其他查詢者使用了.’

2. 創建成功, 但當前沒有鎖住(unlocked), 可以使用

3. 創建成功, 但當前已經鎖住(locked)了, 不能繼續加鎖.

以上是“zookeeper分布式鎖服務的原理分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

民和| 丹巴县| 喀什市| 剑阁县| 广元市| 平凉市| 山丹县| 花垣县| 沂源县| 东丽区| 红桥区| 青岛市| 榆社县| 山东省| 鄯善县| 浦城县| 桓台县| 中方县| 兴宁市| 巴青县| 合水县| 昭觉县| 敦煌市| 武胜县| 高陵县| 湘潭市| 章丘市| 喀喇沁旗| 贵州省| 海晏县| 习水县| 红安县| 常山县| 山西省| 甘洛县| 治县。| 伊金霍洛旗| 玉屏| 定南县| 夏河县| 邹城市|