1. 程式人生 > >zookeeper典型應用之分散式鎖

zookeeper典型應用之分散式鎖

1.概念描述

1.分散式鎖:這個主要得益於zookeeper保證了資料的強一致性;
2.鎖服務分為兩:一個是保持獨佔,另外一個是控制時序;

2.保持獨佔

1.保持獨佔,就是所有檢視來獲取這個鎖的客戶端,最終只有一個可以成功獲得這把鎖;
2.通常的做法是把zk上的一個znode看做事一把鎖,通過create znode的方式來實現,所有客戶端都去建立
   /distribute_lock節點,最終成功建立的那個客戶端也即擁有了這把鎖;

2.1.樣例

A.B.C 三臺伺服器爭先去操作下面的檔案(有可能是修改有可能是刪除,有可能是查詢等操作)

在這裡插入圖片描述

1.要求所有的應用首先先去zk上指定的目錄建立節點/
aaaa 節點要求:臨時節點,非序列化 2.誰建立成功誰就獲得訪問資料檔案的許可權 3.操作完成,斷開跟zk的連線 備註:其他的應用如果需要操作這個檔案的話,就去監聽這個目錄是否存在;

3.控制時序

1.控制時序:就是所有試圖來獲取這個鎖的客戶端,最終都是會被安排執行,只是有個全域性時序了,做法和上面基本類似,
  只是這裡的/distribute_lock已經預先存在,客戶端在它下面建立臨時有序節點(這個通過節點的
屬性控制:CreateMode.EPHEMERAL_SEQUENTIAL來指定).
2.Zk的父節點(/distribute_lock)維持一份sequence,
保證子節點建立的時序性,從而也形成了每個客戶端的全域性時序;

在這裡插入圖片描述

ABC 三個伺服器應用都去zk中建立有時序的節點,然後根據建立的大小,順序的去訪問上面的檔案
如上面從aa0000000 aa000001 aa000002順序去訪問檔案