zookeeper分布式鎖的應(yīng)用

2018-12-08 補(bǔ)充:
其實(shí)這兩種方案也就是Curator提供的兩種選主機(jī)制:
基于選舉和基于搶占的選主方式边苹,具體原理和使用參見(jiàn)以下鏈接
[Curator] Leader Latch 的使用與分析
[Curator] Leader Election 的使用與分析
建議直接使用Curator封裝好的接口

分布式鎖種類

zookeep分布式鎖的種類:排他鎖摆昧、共享鎖
如何用 zookeeper 實(shí)現(xiàn)分布式鎖 - world6 的博客 - CSDN 博客

鎖實(shí)現(xiàn)

Curator已經(jīng)實(shí)現(xiàn)的分布式鎖:

  • 可重入鎖:InterProcessMutex 實(shí)現(xiàn)了可重入的排它鎖谁撼,支持鎖等待超時(shí)娃胆、保證獲取鎖的公平性。

  • 不可重入鎖:InterProcessSemaphoreMutex 實(shí)現(xiàn)了不可重入的排它鎖矩距,支持鎖等待超時(shí)捞镰、保證獲取鎖的公平性『葡浚可以在多個(gè)線程間傳遞和釋放鎖可岂,從而滿足異步調(diào)用場(chǎng)景下的鎖需求。

  • 信號(hào)量:InterProcessSemaphoreV2 實(shí)現(xiàn)了信號(hào)量翰灾,支持信號(hào)量等待超時(shí)缕粹、保證獲取信號(hào)量的公平性≈交矗客戶端每次獲取信號(hào)量成功都會(huì)返回一個(gè)租約(Lease)對(duì)象平斩,建議客戶端在 finally 代碼塊 close 這個(gè)租約對(duì)象以釋放租約。注意在線程重入時(shí)咽块,每次獲取信號(hào)量成功也會(huì)占用一個(gè)租約绘面。另外,在多進(jìn)程場(chǎng)景下侈沪,可以通過(guò) SharedCountReader 來(lái)保障最大租約數(shù)的一致性揭璃,避免不同的進(jìn)程設(shè)置不同的最大租約數(shù)。

  • 讀寫鎖:InterProcessReadWriteLock 實(shí)現(xiàn)了可重入讀寫鎖亭罪,支持鎖等待超時(shí)瘦馍、保證獲取鎖的公平性。并且支持寫鎖降級(jí)(持有寫鎖的線程可以同時(shí)獲取到讀鎖)应役,不支持讀鎖升級(jí)(持有讀鎖的線程不能同時(shí)獲取到寫鎖)情组。 聯(lián)鎖:InterProcessMultiLock 實(shí)現(xiàn)了聯(lián)鎖,它使用裝飾器模式實(shí)現(xiàn)多把鎖的組合箩祥,與可重入鎖院崇、不可重入鎖實(shí)現(xiàn)相同的接口,使得可以像使用單鎖一樣使用聯(lián)鎖袍祖。聯(lián)鎖獲取成功代表它擁有的所有內(nèi)部鎖都獲取成功底瓣,聯(lián)鎖獲取失敗則會(huì)自動(dòng)釋放所有內(nèi)部已經(jīng)獲取成功的部分鎖,從而保證聯(lián)鎖的原子性語(yǔ)義盲泛。
    教你使用 Zookeeper 實(shí)現(xiàn)分布式鎖(上)

實(shí)際應(yīng)用

需求:集群中所有host都有池化好的相同資源濒持,后臺(tái)取資源比較耗時(shí),而且會(huì)頻繁請(qǐng)求這個(gè)集群來(lái)取寺滚。

基于排他鎖設(shè)計(jì)

image
  1. 開(kāi)始:各host在zk上競(jìng)爭(zhēng)創(chuàng)建臨時(shí)節(jié)點(diǎn)柑营,創(chuàng)建成功者為主節(jié)點(diǎn),同時(shí)其他候選host監(jiān)聽(tīng)節(jié)點(diǎn)目錄村视。后臺(tái)取目錄下的節(jié)點(diǎn)信息官套,從主節(jié)點(diǎn)中獲取資源。當(dāng)主服務(wù)主動(dòng)刪除節(jié)點(diǎn)或者會(huì)話失效時(shí),候選host將繼續(xù)競(jìng)爭(zhēng)選主奶赔。

  2. 主節(jié)點(diǎn)結(jié)束: 當(dāng)主節(jié)點(diǎn)被后臺(tái)占用最后一個(gè)資源時(shí)惋嚎,主動(dòng)刪除臨時(shí)節(jié)點(diǎn)。

  3. 重新選主: 候選host發(fā)現(xiàn)節(jié)點(diǎn)目錄有節(jié)點(diǎn)刪除事件站刑,如果自己有空余資源另伍,立刻參與選主,否則繼續(xù)監(jiān)聽(tīng)節(jié)點(diǎn)目錄绞旅。

  4. 所有節(jié)點(diǎn)忙: 當(dāng)所有host沒(méi)有空余資源時(shí)摆尝,zk目錄下沒(méi)有節(jié)點(diǎn)。

  5. 有空余節(jié)點(diǎn): 當(dāng)有host重新?lián)碛匈Y源因悲,檢查節(jié)點(diǎn)目錄是否有節(jié)點(diǎn)堕汞,如果沒(méi)有節(jié)點(diǎn),則嘗試創(chuàng)建晃琳,創(chuàng)建成功則成為主服務(wù)讯检,否則繼續(xù)監(jiān)聽(tīng)節(jié)點(diǎn)目錄。

基于共享鎖設(shè)計(jì)

image
  1. 開(kāi)始:各host在zk上競(jìng)爭(zhēng)創(chuàng)建臨時(shí)有序節(jié)點(diǎn)卫旱,后臺(tái)從創(chuàng)建最小節(jié)點(diǎn)的host中獲取資源人灼,因此該host成為主節(jié)點(diǎn)。

  2. 主節(jié)點(diǎn)結(jié)束: 當(dāng)主節(jié)點(diǎn)被后臺(tái)占用最后一個(gè)資源時(shí)誊涯,主動(dòng)刪除臨時(shí)節(jié)點(diǎn)挡毅。當(dāng)自己重新?lián)碛匈Y源后蒜撮,再次在zk創(chuàng)建臨時(shí)有序節(jié)點(diǎn)暴构,參加排隊(duì)。

  3. 重新選主:后臺(tái)從之前次小的節(jié)點(diǎn)host中獲取資源段磨,該host成為主節(jié)點(diǎn)取逾。

  4. 所有節(jié)點(diǎn)忙:當(dāng)所有host沒(méi)有空余資源時(shí),zk目錄下沒(méi)有節(jié)點(diǎn)苹支。

  5. 有空余節(jié)點(diǎn): 當(dāng)有host重新?lián)碛匈Y源砾隅,再次在zk創(chuàng)建臨時(shí)有序節(jié)點(diǎn),立即成為主節(jié)點(diǎn)债蜜。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末晴埂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子寻定,更是在濱河造成了極大的恐慌儒洛,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狼速,死亡現(xiàn)場(chǎng)離奇詭異琅锻,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門恼蓬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)惊完,“玉大人,你說(shuō)我怎么就攤上這事处硬⌒』保” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵荷辕,是天一觀的道長(zhǎng)本股。 經(jīng)常有香客問(wèn)我,道長(zhǎng)桐腌,這世上最難降的妖魔是什么拄显? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮案站,結(jié)果婚禮上躬审,老公的妹妹穿的比我還像新娘。我一直安慰自己蟆盐,他們只是感情好承边,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著石挂,像睡著了一般博助。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上痹愚,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天富岳,我揣著相機(jī)與錄音,去河邊找鬼拯腮。 笑死窖式,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的动壤。 我是一名探鬼主播萝喘,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼琼懊!你這毒婦竟也來(lái)了阁簸?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤哼丈,失蹤者是張志新(化名)和其女友劉穎启妹,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體削祈,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡翅溺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年脑漫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咙崎。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡优幸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出褪猛,到底是詐尸還是另有隱情网杆,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布伊滋,位于F島的核電站碳却,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏笑旺。R本人自食惡果不足惜昼浦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筒主。 院中可真熱鬧关噪,春花似錦、人聲如沸乌妙。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)藤韵。三九已至虐沥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泽艘,已是汗流浹背欲险。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留悉盆,地道東北人盯荤。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像焕盟,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宏粤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容