基于zookeeper的分布式鎖實現(xiàn)

zookeeper實現(xiàn)分布式鎖

zk存儲結構

zk.png
  • 在lock節(jié)點下存儲每個節(jié)點對應的臨時節(jié)點數(shù)據(jù),按順序遞增圾叼。

實現(xiàn)流程

process.png
  • 首先通過Zookeeper客戶端鏈接zookeeper集群

  • 往zk寫臨時順序節(jié)點信息瓷蛙。

  • 判斷目前的節(jié)點是否最小瘫拣。如果是损合,獲取鎖,如果不是瓜挽,獲取前一個次小的節(jié)點。

  • 對前一個節(jié)點加監(jiān)聽征绸,監(jiān)聽nodedeleted或者Sessionclosed的事件久橙。

  • 后面兩種做法:

    1俄占、事件觸發(fā),返回到第三部淆衷。
    2缸榄、事件觸發(fā),獲取鎖祝拯。本例采用的是這種方式甚带。

案例后續(xù)優(yōu)化的點

  • 細化事件判斷,會存在session斷掉的情況佳头。多測試場景覆蓋鹰贵。
  • 業(yè)務系統(tǒng)中使用,最好加上任務啟動的日志記錄康嘉。防止zookeeper集群掛掉碉输,定時任務沒啟動,影響整體的業(yè)務亭珍。說白了就是做冗災和監(jiān)控敷钾。

代碼踩坑記

  • TaskServiceTest方法在剛開始寫的時候,在構造函數(shù)中獲取connect成員變量肄梨,每次都是空的阻荒。跟蹤代碼發(fā)現(xiàn),犯了一個粗心的錯誤峭范,特記錄如下:


    1.png

可以看到代碼中是先實例化對象财松,再通過AbstractAutowireCapableBeanFactory對象的populateBean方法給屬性賦值。所以你在構造函數(shù)中獲取屬性纱控,永遠是空的辆毡。

curator實現(xiàn)

采用的組件有framework和recipes

  • 這里要注意framework和Zookeeper版本兼容性問題甜害,要采用RELEASE版本舶掖,否則會出現(xiàn)curator創(chuàng)建節(jié)點報錯的情況。
  • 整體的思想和zookeeper類似尔店。悲觀鎖的方式眨攘。
  • 采用Shared Reentrant Lock:Fully distributed locks that are globally synchronous, meaning at any snapshot in time no two clients think they hold the same lock.
  • acquire會阻塞,這個要注意嚣州。

代碼可以參見示例

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末鲫售,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子该肴,更是在濱河造成了極大的恐慌情竹,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匀哄,死亡現(xiàn)場離奇詭異秦效,居然都是意外死亡雏蛮,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門阱州,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挑秉,“玉大人,你說我怎么就攤上這事苔货∠牛” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵蒲赂,是天一觀的道長阱冶。 經(jīng)常有香客問我,道長滥嘴,這世上最難降的妖魔是什么木蹬? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮若皱,結果婚禮上镊叁,老公的妹妹穿的比我還像新娘。我一直安慰自己走触,他們只是感情好晦譬,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著互广,像睡著了一般敛腌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惫皱,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天像樊,我揣著相機與錄音,去河邊找鬼旅敷。 笑死生棍,一個胖子當著我的面吹牛,可吹牛的內容都是我干的媳谁。 我是一名探鬼主播涂滴,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼晴音!你這毒婦竟也來了密末?” 一聲冷哼從身側響起夺姑,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鳍征,失蹤者是張志新(化名)和其女友劉穎荞驴,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡加缘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了觉啊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拣宏。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖杠人,靈堂內的尸體忽然破棺而出勋乾,到底是詐尸還是另有隱情,我是刑警寧澤嗡善,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布辑莫,位于F島的核電站,受9級特大地震影響罩引,放射性物質發(fā)生泄漏各吨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一袁铐、第九天 我趴在偏房一處隱蔽的房頂上張望揭蜒。 院中可真熱鬧,春花似錦剔桨、人聲如沸屉更。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瑰谜。三九已至,卻和暖如春树绩,著一層夾襖步出監(jiān)牢的瞬間萨脑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工葱峡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留砚哗,地道東北人。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓砰奕,卻偏偏與公主長得像蛛芥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子军援,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內容

  • 工作中需要寫一個定時任務,由于是集群環(huán)境,自然而然想到需要通過分布式鎖來保證單臺執(zhí)行..相信大家都會想到使用zk來...
    mingli_jianshu1閱讀 1,185評論 4 8
  • 前言:這幾天忙合作方的項目仅淑,就在剛剛如期上線了, 才得以得空胸哥,閑下來涯竟,和大家吹吹牛,討論討論技術,吹吹牛逼庐船,打發(fā)著...
    小志碼字閱讀 910評論 7 7
  • 在《分布式利器Zookeeper(一)》中對ZK進行了初步的介紹以及搭建ZK集群環(huán)境银酬,本篇博客將涉及的話題是:基于...
    張豐哲閱讀 4,773評論 9 40
  • 想寫東西可突然發(fā)現(xiàn)自己好久沒動筆了篓冲,已經(jīng)漸漸不知從何入手李破。每次心中都有好多話想說,想寫壹将,可當真真拿起筆記本的時候卻...
    lucky_he閱讀 198評論 0 0
  • 文|北左夏右 你聽說了嗎嗤攻,無戒老師的三百六十五天極限挑戰(zhàn)營火熱報名進行中。熱愛文字的你诽俯,走過路過千萬別錯過喲妇菱! 記...
    北左夏右閱讀 331評論 8 6