Zookeeper分佈式協調即分佈式鎖機制

主要用到的Zookeeper機制:

臨時+有序節點,節點watch機制session

過程:

  1. 發生分佈式鎖競爭時,參與競爭的各個客戶端服務都到Zookeeper的同一父節點(表明着同一把鎖)下創建本身的臨時+有序子節點,建立成功後子節點名被zk返回給客戶端,各客戶端保存在本地。
  2. 全部客戶端服務都拉取父節點下的子節點列表,經過對列表排序,將本身本地存儲的節點名與列表中的節點名比較:
    • 若本地節點與列表中最小的節點相同則表示拿到了鎖,此服務獲得執行後續邏輯的機會。
    • 若本地節點不是列表中最小的,則代表拿鎖失敗,轉而監聽比本身小1位的節點在zookeeper中的實際節點,其他節點亦然,從而完成了總體的監聽與排隊等待。
    • 成功得鎖的服務執行完畢後就斷開與zookeeper的session,zookeeper中與之對應的節點自動刪除,此時觸發監聽。
    • 刪除節點的事件被下一個服務監聽到,又觸發它拉取一次列表,作一樣的比較,發現本身是最小的節點,此時它拿到了鎖,得到執行權限,以此類推各服務互斥的逐個獲得執行。
相關文章
相關標籤/搜索