Zookeeper實踐與應用 分布式鎖實現

2021-10-23 07:02:09 字數 740 閱讀 6893

分布式鎖

排他鎖定義鎖

獲取鎖釋放鎖

無論上面兩種哪一種,zookeeper刪除臨時節點後/exclusive_lock/lock上註冊watcher監聽的客戶端都會收到watcher通知,再次重新發起分布式鎖的獲取,重複以上流程,如下圖所示排他鎖流程

共享鎖定義鎖

獲取鎖判斷讀寫順序

釋放鎖羊群效應

192.168.0.1 這條機器首先進行讀,然後刪除節點

餘下四台機器都能收到子節點移除通知,然後從/shared_lock節點上獲取乙份新子節點列表

每個機器判斷自己讀寫順序,其中192。168.0.2這台機器檢測自己是最小序號,開始寫操作,餘下繼續等待

繼續2 步驟

改進後的分布式鎖實現

客戶端create建立"類似/shared_lock/[hostname]-請求型別-序號" 的臨時節點

客戶端呼叫getchildren介面獲取所有已經建立子節點列表(不註冊watcher)

如果無法獲取共享鎖,呼叫exist對比比自己小的節點註冊watcher(id比自己小,可用時間戳)

讀請求:向比自己序號小的最後乙個寫請求節點註冊watcher監聽

寫請求:向比自己序號小的最後乙個節點註冊watcher監聽

等待watcher通知,繼續2 步驟

注意

協調服務 Zookeeper實踐

事務日誌 zoo.cfg檔案中,datadir 快照日誌 執行時日誌 bin zookeeper.out public class connectiondemo countdownlatch.await system.out.println zookeeper.getstate zookeeper....

Zookeeper簡易實踐操作

1.解壓zookeeper tar zvxf zookeeper安裝包所在路徑 c zookeeper解壓後所在路徑 2.修改名字 mv 帶版本號zookeeper的路徑 改名字為zookeeper的路徑 3.建立目錄 建立data和logs目錄 在 zookeeper 的安裝目錄下建立 dxccd...

Zookeeper場景實踐 (8) 分布式佇列

按照zookeeper典型應用場景一覽 裡的說法,分布式佇列有兩種,一種是常規的先進先出佇列,另一種是要等到佇列成員聚齊之後的才統一按序執行。第二種佇列可以先建立乙個 queue,賦值為n,表達佇列的大小。然後每個佇列成員加入時,就判斷是否達到佇列要求的大小,如果是可以進行下一步動作,否則繼續等待佇...