主要用到的Zookeeper機制: 臨時+有序節點,節點watch機制 過程: 1. 發生分散式鎖競爭時,參與競爭的各個客戶端服務都到Zookeeper的同一父節點(代表著同一把鎖)下建立自己的臨時+有序子節點,創建成功後子節點名被zk返回給客戶端,各客戶端保存在本地。 2. 所有客戶端服務都拉取父 ...
主要用到的Zookeeper機制:
臨時+有序節點,節點watch機制
過程:
- 發生分散式鎖競爭時,參與競爭的各個客戶端服務都到Zookeeper的同一父節點(代表著同一把鎖)下建立自己的臨時+有序子節點,創建成功後子節點名被zk返回給客戶端,各客戶端保存在本地。
- 所有客戶端服務都拉取父節點下的子節點列表,通過對列表排序,將自己本地存儲的節點名與列表中的節點名比較:
- 若本地節點與列表中最小的節點相同則表示拿到了鎖,此服務得到執行後續邏輯的機會。
- 若本地節點不是列表中最小的,則表明拿鎖失敗,轉而監聽比自己小1位的節點在zookeeper中的實際節點,其餘節點亦然,從而完成了整體的監聽與排隊等待。
- 成功得鎖的服務執行完畢後就斷開與zookeeper的session,zookeeper中與之對應的節點自動刪除,此時觸發監聽。
- 刪除節點的事件被下一個服務監聽到,又觸發它拉取一次列表,做同樣的比較,發現自己是最小的節點,此時它拿到了鎖,獲得執行許可權,以此類推各服務互斥的逐個得到執行。