超級白話說Zookeeper(一)

我的文章寫給自己看的,幾乎沒有噁心的專業詞彙,要看嚴謹的充滿專業術語和哲學味道的文章,請繞道。因爲懶,所以文章幾乎沒圖。

Zookeeper提供了諸如統一命名空間服務,配置服務和分佈式鎖等分佈式基礎服務。

嗯,說上面這個話的人,良心不會痛嗎?
Zookeeper功能如狗雜種說到的:統一命名空間服務
其他就tm跟我們平時本地磁盤那種文件系統沒多大區別
文件系統大家都知道吧,例如windows的:

我的電腦://
············C://
·················Windows
·················program files
············D://
·················相片
·················電影

如果要把window的“我的電腦”理解爲根目錄的話,
在Zookeeper中則是用/作爲根目錄。
/:
········用戶自己創建的文件夾1
·························文件夾1下的某文件1
·························文件夾1下的某文件2
········用戶自己創建的文件2
·························文件夾2下的某文件1
·························文件夾2下的某文件1

注意了,在我的理解中,Zookeeper這個看上去沒什麼特別的文件結構其實非常有用,讓我來舉例子吧。

例如可以用Zookeeper的這種文件結構做分佈式鎖
我先說一下分佈式鎖是什麼東西:
有兩臺電腦都想去修改存在第三臺電腦的一個文件,但是這個文件同一時刻只能由一臺電腦訪問,所以需要加一把鎖來滿足同一時刻只有同一個電腦訪問這個文件的需求。

我們來看看Zookeeper是如何利用文件結構來完成這個分佈式鎖這個功能的:
還是上面的例子:
電腦1訪問美國某電腦文件之前,先去Zookeeper中某目錄(例如/readfile)下創建一個順序文件(所謂順序文件,就是Zookeeper會爲你創建的文件加一個順序號,這個序號由時間先後順序遞增),名字叫“我要訪問A文件+順序號”
電腦2訪問美國某電腦文件之前,先去Zookeeper中與電腦1同一目錄(/readfile)創建一個順序文件,名字叫“我要訪問A文件+順序號”
電腦3訪問美國某電腦文件之前,先去Zookeeper中與電腦1同一目錄(/readfile)創建一個順序文件,名字叫“我要訪問A文件+順序號”

假設現在三臺電腦創建了三個文件,分別是:
電腦1創建的:我要訪問A文件00000000001
電腦2創建的:我要訪問A文件00000000003
電腦3創建的:我要訪問A文件00000000002

其實這個過程就有點像排隊拿鎖的過程,電腦1創建的序列號最小,那麼電腦1就拿到了鎖,電腦2和電腦3就等着電腦1訪問文件結束,才能訪問。
這裏我又需要說一下Zookeeper裏面的文件類型:
1、就是我們剛剛說的順序文件
例如電腦1創建的:我要訪問A文件00000000001。
2、無順序文件
就是創建文件後,不會在文件名後面加上數字編號。
3、臨時節點
臨時節點是什麼意思呢?電腦1剛剛在Zookeeper中創建了一個文件,如果電腦1斷開與Zookeeper的連接,這個時候電腦1創建的文件就會被Zookeeper自動刪除。
4、永久節點
如果某電腦在Zookeeper上創建的是永久節點,那當某電腦與Zookeeper斷開之後,創建的節點仍在存在
注:這裏所說節點和文件等效,說文件是問了方便大家理解。
上面的4種類型的組合方式是:順序臨時節點,無順序臨時節點,順序永久節點,無順序永久節點4種。

現在再來說剛剛三臺電腦訪問美國某電腦上的文件,電腦1創建的其實是臨時順序節點,那當電腦1訪問完美國某電腦上的文件之後,電腦1將斷開與Zookeeper的連接,這個時候電腦1創建的文件被Zookeeper自動刪除,電腦3創建的文件此時序號最小,所以電腦3拿到鎖,然後訪問美國某服務器上的文件。(這裏還有一些細節沒有講到,因爲這些細節涉及到Zookeeper另一個監聽的特性,之後再講)

這裏再說清楚幾個事情:
Zookeeper是一個集羣,多臺服務器對外提供服務,但是對於客戶端來說是不可見的,啥意思呢?我來講一個故事,這裏也比較重要
最開始有個喜歡拽專業詞彙的程序員,我們叫他小逼吧,小逼的媽媽死了,他哭瞎了眼睛。在他媽媽的葬禮上,他餓了,於是點了一份外賣。
這個時候有很多外賣小哥在等着接單,然後有一個外賣小哥先搶到單子,告訴大家:他的外賣我去送,你們等其他單子吧。於是乎這個搶到單子的外賣小哥把外賣送到小逼手上,小逼由於眼瞎,並不知道送外賣的人是誰。

Zookeeper其實是部署在很多臺電腦上,但是每個電腦上部署的Zookeeper幾乎一樣,每個Zookeeper都可以看做外賣小哥,一個外賣小哥接到單子,也會告訴其他外賣小哥這個消息,Zookeeper文件系統也是一樣,例如電腦1在某一臺Zookeeper電腦上創建了一個文件,那麼Zookeeper也會將這個文件同步到其他Zookeeper電腦上。
好,所以Zookeeper分佈式,就是這麼分佈來的,Zookeeper分佈在不同節點上,某臺節點上有文件刪除修改就跟其他節點上的Zookeeper兄弟說,然後一起同步。理解了這個再來看一開始裝逼的傻逼說的充滿專業術語的話:

Zookeeper提供了諸如統一命名空間服務,配置服務和分佈式鎖等分佈式基礎服務。
統一命名空間服務:我們上文說了,文件系統而已。
分佈式鎖:我們上文也說了,就是利用文件系統創建節點來完成鎖的效果。

我自認爲上面說的非常通俗了,下一篇文章我用自己的話聊聊監聽(Watcher)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章