在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    Zookeeper分布式鎖安全嗎

    Zookeeper分布式鎖安全嗎

    Martin和Antirez爭論點

    在之前的文章討論基于Redis的RedLock分布式鎖中,有提到劍橋分布式專家Martin指出,RedLock安全性并不高,并且其中有一個假設(shè)場景如下

    假設(shè)存在多個實例A、B、C、D、E,同時存在客戶端1和2有如下場景

    • 客戶端1請求實例A、B、C、D、E獲取鎖成功。
    • 客戶端1開始操作共享資源,這時發(fā)生GC網(wǎng)絡(luò)暫停,stop-the-world。
    • 在GC期間客戶端1持有的所有實例上的鎖過期。
    • 客戶端2向?qū)嵗鼳、B、C、D、E請求獲取鎖,成功。
    • 客戶端2操作共享資源,這時客戶端1從GC中恢復(fù),客戶端1無法感知鎖已經(jīng)過期,也操作共享資源導(dǎo)致沖突。

    這個假設(shè)Redis之父Antirez指出在獲取鎖后發(fā)生的NPC(N:網(wǎng)絡(luò)延遲、P:進程暫停、C:時鐘跳躍)問題RedLock無法處理,但這不僅僅是RedLock的問題,其余分布式鎖也有這個問題,如Zookeeper。

    Zookeeper是否安全呢

    上面的場景與我們理解的如果需要構(gòu)建更加安全的分布式鎖,首要參考的就是Zookeeper思想有沖突,那么我們應(yīng)該如何抉擇呢,下面參考Zookeeper的作者之一Flavio Junqueira寫的一篇博客Note on fencing and distributed locks

    原文鏈接:https://fpj.systems/2016/02/10/note-on-fencing-and-distributed-locks/

    Zookeeper構(gòu)建分布式鎖的步驟

    Flavio Junqueira指出構(gòu)建的一種方式,步驟如下

    • 客戶端嘗試創(chuàng)建一個znode節(jié)點如/lock,第一個客戶端創(chuàng)建成功后相當(dāng)于拿到了鎖,后續(xù)的客戶端再去創(chuàng)建/lock因為已經(jīng)存在那么創(chuàng)建會失敗。
    • 持有鎖的客戶端在訪問共享資源后,將znode節(jié)點刪除,那么其它客戶端可以繼續(xù)創(chuàng)建znode節(jié)點。
    • znode的節(jié)點應(yīng)該是臨時的,這樣才能保證如果客戶端突然崩潰,這個客戶端持有的znode節(jié)點才會被刪除,保證鎖的釋放。

    這樣看起來非常完美,因為沒有Redis那種設(shè)置自動過期時間,可能因為時鐘跳躍導(dǎo)致鎖提前過期的情況,但真是這樣嗎,我們先來思考一個問題,客戶端突然崩潰zookeeper如何能快速感知到呢?

    Zookeeper心跳檢測

    每個客戶端都會和Zookeeper之間維護一個Session,這個Session依賴心跳維護,如果Zookeeper在規(guī)定時間內(nèi)未收到客戶端心跳回復(fù),那么將認(rèn)為客戶端失去鏈接,這時就會將這個Session創(chuàng)建的所有臨時節(jié)點刪除。

    Zookeeper的安全問題

    正是因為Zookeeper存在心跳檢測這個問題,那么可能出現(xiàn)以下場景。

    • 客戶端1連接Zookeeper后創(chuàng)建一個znode臨時節(jié)點/lock成功。
    • 客戶端1進入長時間的GC,進程暫停。
    • 客戶端1連接到Zookeeper的session長時間未收到心跳回復(fù),并且超過過期時間,自動刪除創(chuàng)建的臨時節(jié)點/lock。
    • 客戶端2連接Zookeeper后同樣創(chuàng)建znode臨時節(jié)點/lock成功。
    • 客戶端2開始操作共享資源,這時客戶端1恢復(fù)同樣操作共享資源,沖突產(chǎn)生。

    這個場景就和上面分布式專家Martin提出的場景類似,在獲取鎖后發(fā)生NPC問題,這是單純依靠分布式鎖無法處理。

    ZooKeeper的watch機制

    ZooKeeper雖然單純依賴自己無法解決獲取鎖后的NPC安全性問題,但是其watch特性,將分布式鎖變地像一個單機鎖實現(xiàn)。

    當(dāng)客戶端試圖創(chuàng)建一個臨時節(jié)點/lock時,如果發(fā)現(xiàn)節(jié)點已經(jīng)創(chuàng)建,這時客戶端可以不立即失敗,客戶端可以進入一個阻塞等待狀態(tài),等待當(dāng)/lock節(jié)點被刪除后,Zookeeper通過watch機制通知給客戶端,這樣的方式就好像JAVA中獲取單機鎖一樣方便。

    Zookeeper和Redis對比

    Zookeeper和Redis都能實現(xiàn)分布式鎖,優(yōu)勢如下

    • 在客戶端和Zookeeper連接正常的情況下,客戶端可以持有鎖任意時長,這可以確??蛻舳嗽诔钟墟i后操作共享資源并不會因為業(yè)務(wù)操作過長而導(dǎo)致鎖過期,可以解決Redis過期時間到底設(shè)置多久的難題。
    • Zookeeper支持的Watch機制,可以讓Zookeeper實現(xiàn)的分布式鎖,使用起來更加靈活,像使用本地鎖一樣。

    劣勢

    • Zookeeper與客戶端如果長期沒有心跳那么鎖將自動釋放。
    • 性能不如Redis。

    總結(jié)

    分布式鎖可以由多種方式實現(xiàn),但是看完分布式專家Martin和Redis作者的討論后,在極端情況分布式鎖并不是完全安全的,Zookeeper也不能例外,所以這也就是分布式鎖都面臨著NPC三座大山的考驗,如果我們放在關(guān)鍵業(yè)務(wù)處理時并不能完全依靠分布式鎖,還需要有類似Martin提出的fecing token防護令牌兜底。

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
    用戶投稿
    上一篇 2022年6月13日 06:09
    下一篇 2022年6月13日 06:10

    相關(guān)推薦

    • 分享4條發(fā)微商朋友圈的方法(微商朋友圈應(yīng)該怎么發(fā))

      對于微商朋友來說,朋友圈的重要性不言而喻了。 那么微商的朋友圈到底該怎么發(fā)呢? 為什么同樣是經(jīng)營一個朋友圈,有的微商看起來逼格滿滿,實際效果也不錯;而有的卻動都不動就被屏蔽甚至拉黑…

      2022年11月27日
    • 部落沖突5本陣型(部落沖突5本陣型鏈接復(fù)制2023)

      本文主要講的是部落沖突5本陣型,以及和部落沖突5本陣型鏈接復(fù)制2021相關(guān)的知識,如果覺得本文對您有所幫助,不要忘了將本文分享給朋友。 《部落沖突》五本陣型是什么? 《部落沖突》五…

      2022年11月27日
    • 淘寶直播開通后帶貨鏈接怎么做(淘寶直播需要開通淘寶店鋪嗎)

      直播帶貨無論是對于商家來說還是主播收益都是非常可觀的,所以不少平臺都有直播帶貨功能,一些小伙伴也想加入淘寶直播,那么淘寶直播開通后帶貨鏈接怎么做?下面小編為大家?guī)硖詫氈辈ラ_通后帶…

      2022年11月24日
    • 新版找不到切換農(nóng)村淘寶(現(xiàn)在怎么找不到農(nóng)村淘寶了)

      2017年農(nóng)村淘寶APP升級為手機淘寶家鄉(xiāng)版,于是手機淘寶就分為兩個版本,一個家鄉(xiāng)版和標(biāo)準(zhǔn)版。今年五一假期一過淘寶又發(fā)出新公告將陸續(xù)升級! 左邊為標(biāo)準(zhǔn)版,右邊為家鄉(xiāng)版 據(jù)公告,升級…

      2022年11月24日
    • magicos7.0有什么功能? magicos7.0更新內(nèi)容功能介紹

      Magicos7.0有什么功能?Magicos7.0系統(tǒng)正式發(fā)布后很多用戶比較關(guān)心新系統(tǒng)帶來的新功能有哪些。這次的系統(tǒng)升級給用戶帶來了更好的人機交互體驗,加入了很多便捷的操作功能,…

      2022年11月23日
    • 國家衛(wèi)健委:各地進一步加大層層加碼整治力度

      據(jù)央視新聞,國家疾控局傳防司二級巡視員胡翔22日在國務(wù)院聯(lián)防聯(lián)控機制新聞發(fā)布會上介紹,近期,國務(wù)院聯(lián)防聯(lián)控機制綜合組通過視頻會商、調(diào)度和培訓(xùn)等多種方式,部署調(diào)度各地盡快推進二十條優(yōu)…

      2022年11月23日
    • 快手限流多久能解除(快手限流什么意思)

      我相信很多人都看中了快手平臺的商機,都爭先恐后地想要搶占機會,可一些人剛剛作出一點成績,就被降權(quán)了,自己也不知道什么原因。所以今天就來聊聊快手賬號降權(quán)操作分享,趕快來看看避免違規(guī)!…

      2022年11月23日
    • 太原一化工廠發(fā)生爆炸!附近居民:房屋玻璃被震碎

      11月21日下午5時25分許,位于山西太原尖草坪區(qū)的江陽化工廠疑似發(fā)生爆炸事故,劇烈震動使周邊居民樓和商鋪都發(fā)生玻璃碎裂。火已被撲滅,傷亡情況暫未得到消息。 據(jù)網(wǎng)傳多段視頻顯示,一…

      2022年11月23日
    • Win11 22H2再出新問題Bug:無法彈出USB設(shè)備

      作為Windows 11的首次大更新,在Win11 22H2發(fā)布后并沒有帶來預(yù)想的場景,各種問題頻現(xiàn)成為了一種常態(tài)。 近日有消息稱,Win11 22H2存在一個占用沖突Bug,當(dāng)用…

      2022年11月22日
    • 濟南疫情源頭在哪里怎么發(fā)生的(濟南疫情的源頭)

      近日許多小伙伴都在關(guān)注濟南疫情,本輪濟南疫情發(fā)生也有段時間了 ,目前疫情新增陽性感染者還在持續(xù)攀升。11月20日12時至24時,濟南新增本土確診病例(輕型)19例、、無癥狀感染者2…

      2022年11月21日

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時間:周一至周五,10:30-18:30,節(jié)假日休息