zookeeper實現分佈式鎖

在分佈式環境中,爲了保證系統中數據的一致性,需要對共享資源的操作進行排他性的同步控制。就類似於在單機多線程環境中,控制程序的併發性一樣,分佈式鎖是來處理多機之間資源的併發問題,提供一些互斥的手段來防止彼此之間的相互干擾。可以認爲是分佈式環境中的一種互斥鎖或者稱爲排他鎖。
zk實現分佈式排他鎖的可行性
定義鎖
在zk中可以通過數據節點來定義一個鎖,例如,定義節點/mutex_lock/lock表示一個分佈式鎖。下面來說一下對該鎖的請求和釋放過程。
獲取鎖
在獲取鎖的時候,所有的zk客戶端可以通過創建節點的方法,在節點/mutex_lock下創建臨時節點/mutex_lock/lock,創建成功的客戶端表示成功的獲取到了鎖,因爲zk保證在所有的客戶端中只有一個客戶端能夠創建成功。沒有創建成功的客戶端,可以註冊一個監聽節點/mutex_lock/lock變更的watcher,掌握改節點的變更情況。
釋放鎖
客戶端釋放鎖可能是對共享資源的操作完成,刪除lock臨時節點,或者客戶端所在的服務器中斷等不正常行爲,這種異常行爲也會刪除mutex_lock下的節點lock。該節點被刪除,註冊了該節點watcher的客戶端可以監聽到該節點的變更,這些客戶端就可以再一次發起獲取鎖的過程。

如何實現
zk的其中的一個客戶端Curator幫助我們實現了一些分佈式鎖功能。
什麼是Curator,官網這麼說:

這裏寫圖片描述
官網對分佈式鎖的使用方法如下圖,並附有示例,下面的圖來源於官方文檔:http://curator.apache.org/curator-recipes/index.html
這裏寫圖片描述


更多內容訪問微信號:qunzi-eros
這裏寫圖片描述

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