ZooKeeper鎖服務(wù)-創(chuàng)新互聯(lián)

分布式鎖在一組進(jìn)程之間提供了一種互斥機(jī)制。在任何時刻,只有一個進(jìn)程可以持有鎖。分布式鎖可以應(yīng)用于大型分布式系統(tǒng)中實現(xiàn)領(lǐng)導(dǎo)者選舉,在任何時間點,持有鎖的進(jìn)程就是系統(tǒng)的領(lǐng)導(dǎo)者。

成都創(chuàng)新互聯(lián)為客戶提供專業(yè)的網(wǎng)站設(shè)計制作、成都網(wǎng)站設(shè)計、程序、域名、空間一條龍服務(wù),提供基于WEB的系統(tǒng)開發(fā). 服務(wù)項目涵蓋了網(wǎng)頁設(shè)計、網(wǎng)站程序開發(fā)、WEB系統(tǒng)開發(fā)、微信二次開發(fā)、手機(jī)網(wǎng)站制作設(shè)計等網(wǎng)站方面業(yè)務(wù)。

為了使用ZooKeeper來實現(xiàn)分布式鎖服務(wù),我們使用順序znode來為那些競爭鎖的進(jìn)程強(qiáng)制排序。

實現(xiàn)思路很簡單:

首先指定一個作為鎖的znode,通常用它來描述被鎖定的實體,稱為/leader;

然后希望獲得鎖的客戶端創(chuàng)建一些短暫znode,作為鎖znode的子節(jié)點。

在任何時間點,順序號最小的客戶端將持有鎖。

例如,兩個客戶端差不多同時創(chuàng)建znode,分別為/leader/lock-1 和 /leader/lock-2,那么創(chuàng)建/leader/lock-1的客戶端將會持有鎖,因為它的znode順序號最小。

ZooKeeper服務(wù)是順序的仲裁者,因為它負(fù)責(zé)分配順序號。

通過刪除znode /leader/lock-1即可簡單的釋放鎖;另外,如果客戶端進(jìn)程死亡,對應(yīng)的短暫znode也會被刪除。

接下來,創(chuàng)建/leader/lock-2的客戶端將持有鎖,因為它的順序號緊跟前一個。通過創(chuàng)建一個關(guān)于znode刪除的觀察,可以是客戶端在獲得鎖時得到通知。

申請獲取所得偽代碼:

1.在鎖znode下創(chuàng)建一個名為lock-的短暫順序znode,并且記住它的實際路徑名(create操作的返回值)。

2.查詢鎖znode的子節(jié)點并設(shè)置一個觀察。

3.如果步驟1中所創(chuàng)建的znode在步驟2中所返回的所有子節(jié)點中具有最小的順序號,則獲取到鎖。退出。

4.等待步驟2中所設(shè)置的觀察的通知并且轉(zhuǎn)到步驟2.

ZooKeeper中的鎖機(jī)制

加鎖:

ZooKeeper 將按照如下方式實現(xiàn)加鎖的操作:

1 ) ZooKeeper 調(diào)用 create ()方法來創(chuàng)建一個路徑格式為“ _locknode_/lock- ”的節(jié)點,此節(jié)點類型為 sequence (連續(xù))和 ephemeral (臨時)。也就是說,創(chuàng)建的節(jié)點為臨時節(jié)點,并且所有的節(jié)點連續(xù)編號,即“ lock-i ”的格式。

2 )在創(chuàng)建的鎖節(jié)點上調(diào)用 getChildren ()方法,來獲取鎖目錄下的最小編號節(jié)點,并且不設(shè)置 watch 。

3 )步驟 2 中獲取的節(jié)點恰好是步驟 1 中客戶端創(chuàng)建的節(jié)點,那么此客戶端獲得此種類型的鎖,然后退出操作。

4 )客戶端在鎖目錄上調(diào)用 exists ()方法,并且設(shè)置 watch 來監(jiān)視鎖目錄下比自己小一個的連續(xù)臨時節(jié)點的狀態(tài)。

5 )如果監(jiān)視節(jié)點狀態(tài)發(fā)生變化,則跳轉(zhuǎn)到第 2 步,繼續(xù)進(jìn)行后續(xù)的操作,直到退出鎖競爭。

解鎖:

ZooKeeper 解鎖操作非常簡單,客戶端只需要將加鎖操作步驟 1 中創(chuàng)建的臨時節(jié)點刪除即可。

羊群效應(yīng)

“羊群效應(yīng)”就是指大量客戶端收到同一事件的通知,但實際只有很少一部分需要處理這一事件。

設(shè)想當(dāng)有成百上千客戶端,都在嘗試獲得鎖,每個客戶端都會在鎖上設(shè)置觀察,來捕捉節(jié)點的變化。每次鎖被釋放或另一個進(jìn)程申請獲取鎖時,觀察都會被觸發(fā)并且每個客戶端都會收到一個通知,但只有一個客戶端會成功獲得鎖。這時就會造成大量的峰值流量,給zookeeper服務(wù)器造成壓力。

為了避免羊群效應(yīng),我們需要優(yōu)化通知事件,將沒必要的觀察通知去掉,如刪除等,只有在前一個順序號的子節(jié)點消失時才需要通知下一個客戶端。

ZooKeeper帶有一個Java語言編寫的生產(chǎn)級別的鎖實現(xiàn),名為writelock,客戶端可以很方便的使用它。

ZooKeeper官網(wǎng)關(guān)于鎖服務(wù)的介紹:

http://zookeeper.apache.org/doc/trunk/recipes.html#sc_recipes_Locks

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站名稱:ZooKeeper鎖服務(wù)-創(chuàng)新互聯(lián)
本文路徑:http://www.muchs.cn/article10/djjpdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、品牌網(wǎng)站建設(shè)、品牌網(wǎng)站制作、移動網(wǎng)站建設(shè)微信公眾號、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管