大數(shù)據(jù)|zookeeper簡(jiǎn)介及3個(gè)簡(jiǎn)單易懂的案例分析(一)

一、zookeeper簡(jiǎn)介

zookeeper是一個(gè)分布式應(yīng)用程序協(xié)調(diào)服務(wù),分布式應(yīng)用程序可以基于它實(shí)現(xiàn)同步服務(wù)。具體來講zookeeper可以實(shí)現(xiàn)的分布式協(xié)調(diào)服務(wù)包括:

1)統(tǒng)一名稱服務(wù)

2)配置管理

3)分布式鎖

4)集群節(jié)點(diǎn)狀態(tài)協(xié)調(diào)(負(fù)載均衡/主從協(xié)調(diào))

二、三個(gè)案例

1)統(tǒng)一名稱服務(wù)

我們?cè)O(shè)想這么一個(gè)場(chǎng)景,有3個(gè)客戶端需要調(diào)用有同樣服務(wù)的一個(gè)分布式應(yīng)用系統(tǒng),在這個(gè)系統(tǒng)中現(xiàn)有3臺(tái)提供服務(wù)的服務(wù)器,server01、server02、server03。如下圖一:

圖一

在這種情況下,要想讓每個(gè)客戶端知道分布式應(yīng)用系統(tǒng)上有多少可以使用的服務(wù)時(shí),需要在每個(gè)客戶端設(shè)置一個(gè)配置文件用來記錄有哪些可用的服務(wù)器。但是當(dāng)分布式應(yīng)用系統(tǒng)中有一臺(tái)服務(wù)器掛掉或新加了一臺(tái)可以提供相同服務(wù)的新服務(wù)器server04時(shí),需要一個(gè)個(gè)去更新每個(gè)客戶端的配置文件,這顯然是一個(gè)很復(fù)雜的事,實(shí)際上服務(wù)也很難找到這些客戶端。基于此,我們考慮增加一個(gè)第三方媒介來看看情況是否有改觀。如圖二:

圖二

分布式應(yīng)用系統(tǒng)里面如果有增加新的服務(wù)或者有老的服務(wù)掛掉都會(huì)即時(shí)注冊(cè)到這個(gè)第三方媒介里面。當(dāng)客戶端需要訪問某個(gè)服務(wù)時(shí),也會(huì)先想第三方媒介發(fā)送請(qǐng)求,如圖二中的1,第三方收到客戶端請(qǐng)求后就會(huì)返回一臺(tái)最合適的滿足條件的服務(wù)器地址給客戶端,比如當(dāng)前負(fù)載最少的服務(wù)地址,客戶端得到服務(wù)地址之后再去直接訪問對(duì)應(yīng)的服務(wù)。

這里的第三方主要做的是協(xié)調(diào)名稱服務(wù)。

2)配置管理

我以前在做RPC時(shí)使用的是Hessian實(shí)現(xiàn),把不同的功能的應(yīng)用都做成一個(gè)服務(wù),每個(gè)應(yīng)用提供不同的服務(wù),相互之間都有調(diào)用。如下圖三:

圖三

我當(dāng)時(shí)遇到的問題主要有:

(1)當(dāng)服務(wù)越來越多時(shí),服務(wù)URL配置管理變得非常困難。此時(shí)需要一個(gè)服務(wù)注冊(cè)中心,動(dòng)態(tài)的注冊(cè)和發(fā)現(xiàn)服務(wù),使服務(wù)的位置透明。

(2)當(dāng)進(jìn)一步發(fā)展,服務(wù)間依賴關(guān)系變得錯(cuò)蹤復(fù)雜,甚至分不清哪個(gè)應(yīng)用要在哪個(gè)應(yīng)用之前啟動(dòng)。

(3)甚至后面當(dāng)服務(wù)的調(diào)用量越來越大,服務(wù)的容量問題就暴露出來,這個(gè)服務(wù)需要多少機(jī)器支撐?什么時(shí)候該加機(jī)器?

為了解決這些問題,是否也可以通過一個(gè)第三方媒介呢?見圖四:

圖四

這個(gè)第三方主要工作是接收各個(gè)應(yīng)用的服務(wù)注冊(cè)和維護(hù)各服務(wù)之間的關(guān)系,當(dāng)然也包括檢測(cè)各服務(wù)的狀態(tài)情況。集群節(jié)點(diǎn)狀態(tài)協(xié)調(diào)(負(fù)載均衡/主從協(xié)調(diào))這個(gè)協(xié)調(diào)服務(wù)也可以基于這種方式去實(shí)現(xiàn)。

3)分布式鎖

最近我在學(xué)習(xí)Hadoop做數(shù)據(jù)分析這塊,涉及到存在多個(gè)服務(wù)器中的程序都要訪問一個(gè)共享資源文件時(shí)的文件同步問題,如下圖五:

圖五

這樣出現(xiàn)的問題就是A服務(wù)里呈現(xiàn)在查看或更新這個(gè)共享資源時(shí)得到的數(shù)據(jù)很可能會(huì)是臟讀、幻讀的錯(cuò)誤數(shù)據(jù)。解決方法也是可以利用第三方。如圖六:

圖六

這里的關(guān)鍵在A在訪問之后或者獲取訪問權(quán)限時(shí)要把自己當(dāng)前的最小id刪除,同時(shí)重新生成一個(gè)新的大id。

四、總結(jié)

通過上面三個(gè)案例,我們知道這個(gè)第三方做的事主要是分布式應(yīng)用程序的協(xié)調(diào)服務(wù),如果把我們的每個(gè)應(yīng)用比如成動(dòng)物園里面的動(dòng)物,為了更好地維護(hù)管理這些動(dòng)物,那么就需要一個(gè)動(dòng)物園的管理員。而zookeeper就是這么一個(gè)角色。

動(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)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容