基于ZooKeeper的分布式鎖
源碼分享:http://pan.baidu.com/s/1miQCDKk
ZooKeeper 里實現(xiàn)分布式鎖的基本邏輯:
1.zookeeper中創(chuàng)建一個根節(jié)點(Locks),用于后續(xù)各個客戶端的鎖操作。
2.想要獲取鎖的client都在Locks中創(chuàng)建一個自增序的子節(jié)點,每個client得到一個序號,如果自己的序號是最小的則獲得鎖。
3.如果沒有得到鎖,就監(jiān)控排在自己前面的序號節(jié)點,并且設(shè)置默認時間,等待它的釋放。
4.業(yè)務操作后釋放鎖,然后監(jiān)控自己的節(jié)點的client就被喚醒得到鎖。(例如client A需要釋放鎖,只需要把對應的節(jié)點1刪除掉,因為client B已經(jīng)關(guān)注了節(jié)點1,那么當節(jié)點1被刪除后,zookeeper就會通知client B:你是序號最小的了,可以獲取鎖了)
釋放鎖的過程相對比較簡單,就是刪除自己創(chuàng)建的那個子節(jié)點即可。
解決方案目錄:
Demo1 Demo2為測試場景
ZooKeepr_Lock為鎖操作代碼
網(wǎng)友評論