分布式鎖機(jī)制

參考鏈接

分布式場(chǎng)景中的數(shù)據(jù)一致性問(wèn)題一直是一個(gè)比較重要的話題。分布式的CAP理論告訴我們“任何一個(gè)分布式系統(tǒng)都無(wú)法同時(shí)滿足一致性(Consistency)嗦篱、可用性(Availability)和分區(qū)容錯(cuò)性(Partition tolerance)贺纲,最多只能同時(shí)滿足兩項(xiàng)竿痰。”所以软棺,很多系統(tǒng)在設(shè)計(jì)之初就要對(duì)這三者做出取舍红竭。在互聯(lián)網(wǎng)領(lǐng)域的絕大多數(shù)的場(chǎng)景中,都需要犧牲強(qiáng)一致性來(lái)?yè)Q取系統(tǒng)的高可用性,系統(tǒng)往往只需要保證“最終一致性”茵宪,只要這個(gè)最終時(shí)間是在用戶可以接受的范圍內(nèi)即可最冰。

在很多場(chǎng)景中,我們?yōu)榱吮WC數(shù)據(jù)的最終一致性眉厨,需要很多的技術(shù)方案來(lái)支持锌奴,比如分布式事務(wù)、分布式鎖等憾股。有的時(shí)候鹿蜀,我們需要保證一個(gè)方法在同一時(shí)間內(nèi)只能被同一個(gè)線程執(zhí)行。

數(shù)據(jù)庫(kù)實(shí)現(xiàn)分布式鎖的優(yōu)點(diǎn)

直接借助數(shù)據(jù)庫(kù)服球,容易理解茴恰。

數(shù)據(jù)庫(kù)實(shí)現(xiàn)分布式鎖的缺點(diǎn)

會(huì)有各種各樣的問(wèn)題,在解決問(wèn)題的過(guò)程中會(huì)使整個(gè)方案變得越來(lái)越復(fù)雜斩熊。

操作數(shù)據(jù)庫(kù)需要一定的開銷往枣,性能問(wèn)題需要考慮。

使用數(shù)據(jù)庫(kù)的行級(jí)鎖并不一定靠譜粉渠,尤其是當(dāng)我們的鎖表并不大的時(shí)候分冈。

使用緩存實(shí)現(xiàn)分布式鎖的優(yōu)點(diǎn)

性能好,實(shí)現(xiàn)起來(lái)較為方便霸株。

使用緩存實(shí)現(xiàn)分布式鎖的缺點(diǎn)

通過(guò)超時(shí)時(shí)間來(lái)控制鎖的失效時(shí)間并不是十分的靠譜雕沉。

基于Zookeeper實(shí)現(xiàn)分布式鎖

基于zookeeper臨時(shí)有序節(jié)點(diǎn)可以實(shí)現(xiàn)的分布式鎖。

大致思想即為:每個(gè)客戶端對(duì)某個(gè)方法加鎖時(shí)去件,在zookeeper上的與該方法對(duì)應(yīng)的指定節(jié)點(diǎn)的目錄下坡椒,生成一個(gè)唯一的瞬時(shí)有序節(jié)點(diǎn)。 判斷是否獲取鎖的方式很簡(jiǎn)單尤溜,只需要判斷有序節(jié)點(diǎn)中序號(hào)最小的一個(gè)倔叼。 當(dāng)釋放鎖的時(shí)候,只需將這個(gè)瞬時(shí)節(jié)點(diǎn)刪除即可宫莱。同時(shí)丈攒,其可以避免服務(wù)宕機(jī)導(dǎo)致的鎖無(wú)法釋放,而產(chǎn)生的死鎖問(wèn)題梢睛。

來(lái)看下Zookeeper能不能解決前面提到的問(wèn)題肥印。

鎖無(wú)法釋放?使用Zookeeper可以有效的解決鎖無(wú)法釋放的問(wèn)題绝葡,因?yàn)樵趧?chuàng)建鎖的時(shí)候,客戶端會(huì)在ZK中創(chuàng)建一個(gè)臨時(shí)節(jié)點(diǎn)腹鹉,一旦客戶端獲取到鎖之后突然掛掉(Session連接斷開)藏畅,那么這個(gè)臨時(shí)節(jié)點(diǎn)就會(huì)自動(dòng)刪除掉。其他客戶端就可以再次獲得鎖。

非阻塞鎖愉阎?使用Zookeeper可以實(shí)現(xiàn)阻塞的鎖绞蹦,客戶端可以通過(guò)在ZK中創(chuàng)建順序節(jié)點(diǎn),并且在節(jié)點(diǎn)上綁定監(jiān)聽器榜旦,一旦節(jié)點(diǎn)有變化幽七,Zookeeper會(huì)通知客戶端,客戶端可以檢查自己創(chuàng)建的節(jié)點(diǎn)是不是當(dāng)前所有節(jié)點(diǎn)中序號(hào)最小的溅呢,如果是澡屡,那么自己就獲取到鎖,便可以執(zhí)行業(yè)務(wù)邏輯了咐旧。

不可重入驶鹉?使用Zookeeper也可以有效的解決不可重入的問(wèn)題,客戶端在創(chuàng)建節(jié)點(diǎn)的時(shí)候铣墨,把當(dāng)前客戶端的主機(jī)信息和線程信息直接寫入到節(jié)點(diǎn)中室埋,下次想要獲取鎖的時(shí)候和當(dāng)前最小的節(jié)點(diǎn)中的數(shù)據(jù)比對(duì)一下就可以了。如果和自己的信息一樣伊约,那么自己直接獲取到鎖姚淆,如果不一樣就再創(chuàng)建一個(gè)臨時(shí)的順序節(jié)點(diǎn),參與排隊(duì)屡律。

單點(diǎn)問(wèn)題腌逢?使用Zookeeper可以有效的解決單點(diǎn)問(wèn)題,ZK是集群部署的疹尾,只要集群中有半數(shù)以上的機(jī)器存活上忍,就可以對(duì)外提供服務(wù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末纳本,一起剝皮案震驚了整個(gè)濱河市窍蓝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌繁成,老刑警劉巖吓笙,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異巾腕,居然都是意外死亡面睛,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門尊搬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)叁鉴,“玉大人,你說(shuō)我怎么就攤上這事佛寿』夏梗” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)常侣。 經(jīng)常有香客問(wèn)我蜡饵,道長(zhǎng),這世上最難降的妖魔是什么胳施? 我笑而不...
    開封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任溯祸,我火速辦了婚禮,結(jié)果婚禮上舞肆,老公的妹妹穿的比我還像新娘焦辅。我一直安慰自己,他們只是感情好胆绊,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開白布氨鹏。 她就那樣靜靜地躺著,像睡著了一般压状。 火紅的嫁衣襯著肌膚如雪仆抵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天种冬,我揣著相機(jī)與錄音镣丑,去河邊找鬼。 笑死娱两,一個(gè)胖子當(dāng)著我的面吹牛莺匠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播十兢,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼趣竣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了旱物?” 一聲冷哼從身側(cè)響起遥缕,我...
    開封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宵呛,沒想到半個(gè)月后单匣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宝穗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年户秤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逮矛。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鸡号,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出须鼎,到底是詐尸還是另有隱情膜蠢,我是刑警寧澤堪藐,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布莉兰,位于F島的核電站挑围,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏糖荒。R本人自食惡果不足惜杉辙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捶朵。 院中可真熱鬧蜘矢,春花似錦、人聲如沸综看。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)红碑。三九已至舞吭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間析珊,已是汗流浹背羡鸥。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留忠寻,地道東北人惧浴。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像奕剃,于是被迫代替她去往敵國(guó)和親衷旅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

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

  • 分布式系統(tǒng)面臨的第一個(gè)問(wèn)題就是數(shù)據(jù)分布纵朋,即將數(shù)據(jù)均勻地分布到多個(gè)存儲(chǔ)節(jié)點(diǎn)柿顶。另外,為了保證可靠性和可用性倡蝙,需要將數(shù)據(jù)...
    olostin閱讀 4,561評(píng)論 2 26
  • 1 背景 一致性是一個(gè)抽象的九串、具有多重含義的計(jì)算機(jī)術(shù)語(yǔ),在不同應(yīng)用場(chǎng)景下寺鸥,有不同的定義和含義猪钮。在傳統(tǒng)的IT時(shí)代,一...
    新強(qiáng)吖閱讀 453評(píng)論 0 2
  • 本文歡迎轉(zhuǎn)載胆建,轉(zhuǎn)載請(qǐng)注明原文鏈接烤低,并附作者個(gè)人信息李艷鵬。 1 背景 一致性是一個(gè)抽象的笆载、具有多重含義的計(jì)算機(jī)術(shù)語(yǔ)...
    581f548ef0ec閱讀 43,478評(píng)論 28 294
  • 前言 什么是分布式系統(tǒng)?關(guān)于這點(diǎn)其實(shí)并沒有明確且統(tǒng)一的定義扑馁。在我看來(lái),只要一個(gè)系統(tǒng)滿足以下幾點(diǎn)就可以稱之為分布式系...
    程序員日常填坑閱讀 957評(píng)論 0 5
  • 傍晚出門去圖書館的時(shí)候涯呻,發(fā)現(xiàn)了好幾個(gè)超級(jí)美的景色,甚至還很有意思 還發(fā)現(xiàn)了一棵已經(jīng)“長(zhǎng)歪”的大樹——居然戴著學(xué)士帽...
    陽(yáng)陽(yáng)的書閱讀 158評(píng)論 0 0