快速理解Zookeeper分佈式鎖原理

ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務。它是一個為分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。在Zookeeper中,znode是一個跟Unix文件系統路徑相似的節點

快速理解Zookeeper分佈式鎖原理

關於分佈式鎖,在互聯網行業的使用場景還是比較多的,比如電商的庫存扣減,秒殺活動,集群定時任務執行等需要進程互斥的場景。而實現分佈式鎖的手段也很多,大家比較常見的就是redis跟zookeeper,今天我們主要介紹的是基於zookeeper實現的分佈式鎖。

在學習分佈式鎖之前,需要首先了解一下Zookeeper的[臨時順序節點]。

什麼是臨時順序節點?

顧名思義,臨時順序節點結合和臨時節點和順序節點的特點:在創建節點時,Zookeeper根據創建的時間順序給該節點名稱進行編號;當創建節點的客戶端與Zookeeper斷開連接後,臨時節點會被刪除。

那臨時順序節點和Zookeeper的分佈式鎖有什麼關係呢?

Zookeeper分佈式鎖的原理

快速理解Zookeeper分佈式鎖原理

實現原理其實很簡單,就是利用了zookeeper的臨時有序節點實現,其實ID最小的節點獲得鎖權限,執行完之後,刪除節點,其餘各點依次獲取鎖權限,類似於隊列FIFO的操作

快速理解Zookeeper分佈式鎖原理

總結

大家都是上來直接創建一個鎖節點下的一個接一個的臨時順序節點

如果自己不是第一個節點,就對自己上一個節點加監聽器

只要上一個節點釋放鎖,自己就排到前面去了,相當於是一個排隊機制。

而且用臨時順序節點的另外一個用意就是,如果某個客戶端創建臨時順序節點之後,不小心自己宕機了也沒關係,zk感知到那個客戶端宕機,會自動刪除對應的臨時順序節點,相當於自動釋放鎖,或者是自動取消自己的排隊


分享到:


相關文章: