分佈式鎖怎麼實現?

用Zookeeper實現分佈式鎖其實就是創建一個臨時節點:如果臨時節點之前不存在,則臨時節點創建成功,則這把鎖屬於你了。

此時有其他人去創建同名的臨時節點,如果已經存在了,說明別人已經佔有了這把鎖,你就失敗了,這時候就對那個臨時節點註冊一個監聽器。當鎖被釋放的時候會通知你然後嘗試去創建。

其實釋放鎖就是刪除臨時節點,若刪除臨時節點,ZK會通知別人這個節點被刪除了,相當於鎖釋放了。然後就會嘗試再次創建這個臨時節點,若創建成功了,則說明獲得了鎖。

用臨時節點來實現分佈式鎖:加入創建該節點的客戶端掛掉了,則會自動刪除該節點,讓其它客戶端能獲取該鎖。

 

參考文檔:zk分佈式的實現。

 

redis  和 zk 分佈式鎖對比:redis 獲取鎖失敗時會反覆的嘗試,會造成性能的開銷。ZK會註冊監聽器監聽,假如鎖釋放掉了會通知。

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