分佈式鎖的基本實現方式

轉載:https://blog.csdn.net/zhangsanfeng2009/article/details/80970059
轉載:mysql唯一約束:https://www.cnblogs.com/firstForEver/p/5105760.html,https://blog.csdn.net/fly910905/article/details/79693070
zk實現也是基於鎖住方法。
zk實現:https://blog.csdn.net/naruto_Mr/article/details/81479132,
1.client調用create()方法創建“/root/lock_”節點,注意節點類型是EPHEMERAL_SEQUENTIAL

2.client調用getChildren("/root/lock_",watch)來獲取所有已經創建的子節點,並同時在這個節點上註冊子節點變更通知的Watcher

3.客戶端獲取到所有子節點Path後,如果發現自己在步驟1中創建的節點是所有節點中最小的,那麼就認爲這個客戶端獲得了鎖

4.如果在步驟3中,發現不是最小的,那麼等待,直到下次子節點變更通知的時候,在進行子節點的獲取,判斷是否獲取到鎖

5.釋放鎖也比較容易,就是刪除自己創建的那個節點即可

還有個羊羣效應,是說zk會監聽目標節點下的所有子節點改動,是不必要的。可以只監聽比自己小的那個(幾個??),調用exist()方法來判斷。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章