復(fù)習(xí)
zookeeper的節(jié)點(diǎn)類(lèi)型:
1. 持久節(jié)點(diǎn)
2. 臨時(shí)節(jié)點(diǎn)
3. 持久順序節(jié)點(diǎn)
4. 臨時(shí)順序節(jié)點(diǎn)
基于zookeeper的分布式鎖使用了【臨時(shí)順序節(jié)點(diǎn)】
臨時(shí)順序節(jié)點(diǎn)
在創(chuàng)建節(jié)點(diǎn)的時(shí)候,zookeeper根據(jù)創(chuàng)建的時(shí)間順序給該節(jié)點(diǎn)進(jìn)行編號(hào),
當(dāng)創(chuàng)建節(jié)點(diǎn)的客戶(hù)端與zk斷開(kāi)連接后,臨時(shí)節(jié)點(diǎn)會(huì)被刪除
zk實(shí)現(xiàn)分布式鎖原理 - 加鎖
1. 首先創(chuàng)建一個(gè)跟節(jié)點(diǎn):parent-lock
2. 如果有3個(gè)client對(duì)同一個(gè)資源-resource進(jìn)行鎖定。分別是client1, client2, client3
3. client1嘗試對(duì)resource進(jìn)行鎖定,在/parent-lock下創(chuàng)建了一個(gè)臨時(shí)順序節(jié)點(diǎn)lock-1,
然后client1查找/parent-lock下所有的臨時(shí)節(jié)點(diǎn)并進(jìn)行排序,判斷自己創(chuàng)建的節(jié)點(diǎn)lock-1是不是順序最靠前的一個(gè),如果是第一個(gè),就成功獲取了鎖。
4. 之后client2在/parent-lock創(chuàng)建臨時(shí)順序節(jié)點(diǎn)lock-2, 之后查找這個(gè)節(jié)點(diǎn)是不是最靠前的一個(gè),
發(fā)現(xiàn)不是,那么client2會(huì)向lock-1注冊(cè)watcher,用于監(jiān)聽(tīng)lock-1是否存在,同時(shí)client2搶鎖失敗,進(jìn)入等待狀態(tài)。
5. 之后client3也會(huì)嘗試獲取鎖,由于不是最靠前的一個(gè),會(huì)采取client2一樣的操作。
zk實(shí)現(xiàn)分布式鎖原理 - 解鎖
1. 客戶(hù)端顯式的刪除自己創(chuàng)建的節(jié)點(diǎn),釋放鎖,如果刪除成功,那么其他client對(duì)其注冊(cè)的watcher會(huì)通知其他節(jié)點(diǎn),
告訴其他節(jié)點(diǎn)該節(jié)點(diǎn)已經(jīng)刪除,可以重試獲取鎖。
2. 如果client崩潰了,那么就對(duì)斷開(kāi)zk,其自己創(chuàng)建的節(jié)點(diǎn)就會(huì)自動(dòng)刪除。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。