Zookeeper分布式鎖?
客戶端A要獲取分布式鎖的時候首先到locker下創建一個臨時順序節點(node_n),然后立即獲取locker下的所有(一級)子節點,此時因為會有多個客戶端同一時間爭取鎖,因此locker下的子節點數量就會大于1,對于順序節點,特點是節點名稱后面自動有一個數字編號,先創建的節點數字編號小于后創建的,因此可以將子節點按照節點名稱后綴的數字順序從小到大排序,這樣排在第一位的就是最先創建的順序節點,此時它就代表了最先爭取到鎖的客戶端!此時判斷最小的這個節點是否為客戶端A之前創建出來的node_n,如果是則表示客戶端A獲取到了鎖,如果不是則表示鎖已經被其它客戶端獲取,因此客戶端A要等待它釋放鎖,也就是等待獲取到鎖的那個客戶端B把自己創建的那個節點洗掉,此時就通過監聽比node_n次小的那個順序節點的洗掉事件來知道客戶端B是否已經釋放了鎖,如果是,此時客戶端A再次獲取locker下的所有子節點,再次與自己創建的node_n節點對比,直到自己創建的node_n是locker的所有子節點中順序號最小的,此時表示客戶端A獲取到了鎖!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/273621.html
標籤:其他
下一篇:Linux常用命令精講(全)
