zookeeper基礎(chǔ)介紹課件_第1頁
zookeeper基礎(chǔ)介紹課件_第2頁
zookeeper基礎(chǔ)介紹課件_第3頁
zookeeper基礎(chǔ)介紹課件_第4頁
zookeeper基礎(chǔ)介紹課件_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Zookeeper淘寶-技術(shù)研發(fā)部-市場產(chǎn)品技術(shù)-開發(fā)-社區(qū)SNS-王釗Zookeeper能幫我們做什么

Zookeeper是一個分布式的,開源的分布式應(yīng)用程序協(xié)調(diào)服務(wù),用它可以來現(xiàn)同步服務(wù),配置維護(hù)同步服務(wù):利用zookeeper可以使機(jī)器之間的同步如同concurrent包下的同步器同步線程一樣,舉兩個互斥同步的例子1.應(yīng)用系統(tǒng)部署在多臺機(jī)器上,需要啟動一個時(shí)間任務(wù),而這個時(shí)間任務(wù)只能在一臺機(jī)器上執(zhí)行,否則會出現(xiàn)臟讀臟寫,zookeeper可以實(shí)現(xiàn)。2.應(yīng)用系統(tǒng)部署在多臺機(jī)器上,需要暴露一個服務(wù),而這個服務(wù)同樣不是全部的機(jī)器都有暴露,例如MASTER,而暴露這個服務(wù)的機(jī)器宕機(jī)后,其它的機(jī)器能自動的接替暴露這個服務(wù),zookeeper可以實(shí)現(xiàn)。配置維護(hù):服務(wù)集群需要使用一組配置,為了保證配置在集群中的一致性,以及對配置更改后的立即響應(yīng)要求,使用zookeeper可以實(shí)現(xiàn)。

Zookeeper應(yīng)用結(jié)構(gòu)Zookeeper應(yīng)用機(jī)器結(jié)構(gòu)Zookeeper數(shù)據(jù)組織形式

Zookeeper提供接口建立連接

需要指定Zookeeper集群的IP地址,SessionTimeout,默認(rèn)的watcher數(shù)據(jù)操作1.create創(chuàng)建一個節(jié)點(diǎn),并在這個節(jié)點(diǎn)處寫入數(shù)據(jù),創(chuàng)建節(jié)點(diǎn)有四種模式

PERSISTENT創(chuàng)建持久化節(jié)點(diǎn),對應(yīng)機(jī)器關(guān)閉連接后節(jié)點(diǎn)/數(shù)據(jù)不會消失

PERSISTENT_SEQUENTIAL如果PATH是以’/’結(jié)尾則以這個PATH作為父節(jié)點(diǎn),創(chuàng)

建一個子節(jié)點(diǎn),其子節(jié)點(diǎn)名字是一個按先后順序排列的數(shù)值;否則創(chuàng)建一個名字是

‘/’后面字符加上先后順序排列的數(shù)值字符串的節(jié)點(diǎn),同樣創(chuàng)建持久節(jié)點(diǎn)

EPHEMERAL創(chuàng)建瞬時(shí)節(jié)點(diǎn),Zookeeper在感知連接機(jī)器宕機(jī)后會清除它創(chuàng)建的瞬

節(jié)點(diǎn)EPHEMERAL_SEQUENTIAL穿件瞬時(shí)順序節(jié)點(diǎn),和PERSISTENT_SEQUENTIAL

一樣,區(qū)別在于它是瞬時(shí)的

pathPERSISTENTPERSISTENT_SEQUENTIAL/lock/error在/lock/下創(chuàng)建子節(jié)點(diǎn):/lock/000001/lock創(chuàng)建/lock節(jié)點(diǎn)創(chuàng)建節(jié)點(diǎn)/lock000001Zookeeper提供接口數(shù)據(jù)操作2.delete刪除一個節(jié)點(diǎn)3.exists查看一個節(jié)點(diǎn)的狀況,如果沒有返回null,可注入watcher4.getData獲取一個節(jié)點(diǎn)的數(shù)據(jù),可注入watcher5.setData設(shè)置一個節(jié)點(diǎn)的數(shù)據(jù)6.getChildren獲取一個節(jié)點(diǎn)的子節(jié)點(diǎn),可注入watcherZookeeper保證1.sequentialconsistencyforsingleclient2.atomicity–updateeithersuccessorfail3.singlesystemimage–aclientwillseethesameviewoftheserviceregardlessoftheserverthatitconnectsto4.reliability–onceanupdatehasbeenapplied,itwillpersistformthattimeforwarduntilaclientoverwritetheupdate

WatcherWatcher種類,Zookeeper全局管理Watcher1.Zookeeper實(shí)例化時(shí)注入的默認(rèn)Watcher2.dataWatchers一個Map<stringSet<Watcher>>數(shù)據(jù)結(jié)構(gòu),保存調(diào)用getData時(shí)

注入的Watcher或者調(diào)用exist時(shí)path指定的節(jié)點(diǎn)存在3.existWatchers一個Map<stringSet<Watcher>>數(shù)據(jù)結(jié)構(gòu),保存調(diào)用exits時(shí)

對應(yīng)的path節(jié)點(diǎn)不存在條件下注入的Watcher4.childWatchers一個Map<stringSet<Watcher>>數(shù)據(jù)結(jié)構(gòu),保存調(diào)用getChildren

時(shí)注入的WatcherWatcher管理

1.當(dāng)調(diào)用exists,getData,getChildren函數(shù)時(shí)會需要傳入一個Watcher,對應(yīng)的path上的數(shù)據(jù)發(fā)生改變時(shí),zookeeper服務(wù)器會發(fā)送NOTIFY包給客戶端,

客戶端在收到NOTIFY包后根據(jù)包指明的path和事件類別回調(diào)有關(guān)Watcher

的process函數(shù)2.當(dāng)調(diào)用getData時(shí)將注入的Watcher加入到dataWatchers.get(path)的SET里面,

調(diào)用childWatchers時(shí)一樣3.當(dāng)調(diào)用exists時(shí),如果path不存在則加入到existWatchers.get(path)的SET里面,

否則加入到dataWatchers.get(path)的SET里面

Zookeeper事件Zookeeper事件由服務(wù)器發(fā)過來的NOTIFY包和客戶端自己感知的連接斷開,連接建立,SESSION失效事件Zookeeper服務(wù)器NOTIFY事件(path+事件類型)

a.NodeDataChanged&NodeCreated

回調(diào)dataWatchers.get(path)&existWatchers.get(path)得到的Watcher集合

同時(shí)會將path這一MAP映射從dataWatchers&existWatchers里面清除

b.NodeChildrenChanged

回調(diào)childWatchers.get(path得到的Watcher集合

同時(shí)會將path這一MAP映射從childWatchers.get里面清除

c.NodeDeleted回調(diào)dataWatchers.get(path)&childWatchers.get(path)得到的Watcher集合

同時(shí)會將path這一MAP映射從dataWatchers&childWatchers里面清除

同時(shí)會將path這一MAP映射從existWatchers里面清除

Zookeeper事件連接斷開事件-Disconnected主要是發(fā)生網(wǎng)絡(luò)IO錯誤,zookeeper客戶端會自動的重新建立連接,同時(shí)會通知WatcherSESSION失效事件-Expired這個事件表示服務(wù)器認(rèn)為先前建立的連接已經(jīng)失效了,整個zookeeper對象已經(jīng)不會再運(yùn)轉(zhuǎn)了,其創(chuàng)建的

瞬間節(jié)點(diǎn)也被清空了,先前注入的Watchers也隨著zookeeper對象不運(yùn)轉(zhuǎn)而失效,此時(shí)需要重新創(chuàng)建一個新的zookeeper對象連接建立事件-SyncConnected實(shí)例化zookeeper

對象時(shí)和服務(wù)器建立連接成功后才會zookeeper客戶端會觸發(fā)這個事件Zookeeper事件實(shí)現(xiàn)Watcher時(shí)注意點(diǎn):1.publicclassXXimplementsWatcher{publicvoidprocess(WatchedEventevent){//不要進(jìn)入死循環(huán),因?yàn)檎{(diào)度事件回調(diào)是一個單線程,阻塞在這里后其//他的Watcher就執(zhí)行不了}}2.注入Watcher后,因?yàn)槭裁词录atcher被觸發(fā),此Watcher會從zookeeper管理的watcher里移除,當(dāng)對應(yīng)的path再發(fā)生什么事件就不會再觸發(fā)這個Watcher了,如果需要繼續(xù)監(jiān)聽則再注入Watcher一個簡單的應(yīng)用-分布式互斥鎖首先抽象出鎖的接口

publicabstractclassLockFactory{publicabstractLockgetLock(Stringname);}

publicinterfaceLock{

publicbooleantryLock();

?publicvoidunLock();

publicvoidregisterListener(CallBackcall,Objectcontext);}getLock(Stringpath)--根據(jù)path實(shí)例化一個Lock對象,如果path不存在則創(chuàng)建這個路徑,獲取鎖主要是在path下創(chuàng)建一個path/owner的瞬間節(jié)點(diǎn),在節(jié)點(diǎn)上寫入自己的IP,這樣機(jī)器每次獲取鎖時(shí)就看path/owner是否存在,如果不存在則創(chuàng)建節(jié)點(diǎn)寫入IP,如果存在在看IP是不是自己的IP,釋放鎖則是如果IP是自己的IP則刪除這個瞬間節(jié)點(diǎn)?一個簡單的應(yīng)用-分布式互斥鎖tryLock()–嘗試獲取鎖資源

首先會判斷path/owner這個節(jié)點(diǎn)存在不,如果不存在則創(chuàng)建這個節(jié)點(diǎn),并往這個節(jié)點(diǎn)寫入自己的IP,由于機(jī)器是并發(fā)執(zhí)行,可能有很多機(jī)器執(zhí)行這個創(chuàng)建操作,zookeeper保證更新操作的原子性,只有一個會操作成功,其他會拋出節(jié)點(diǎn)已經(jīng)存在異常。如果節(jié)點(diǎn)存在則看其其上的數(shù)據(jù)是不是自己IP來作為是不是自己拿到鎖資源的依據(jù)。unLock()–釋放鎖資源

如果節(jié)點(diǎn)存在,而且節(jié)點(diǎn)上的數(shù)據(jù)是自己的IP,則刪除這個節(jié)點(diǎn)registerListener(…)--監(jiān)聽鎖資源的使用狀況

1.執(zhí)行exists函數(shù),注入Watcher監(jiān)聽這個path,當(dāng)這個節(jié)點(diǎn)被創(chuàng)建,被刪除,被更新都會回調(diào)這個Watcher

2.由于這個Watcher在被觸發(fā)后會被zookeeper的Watcher管理者移除,如果需要繼續(xù)監(jiān)聽則要再調(diào)用exists函數(shù)注入Watcher監(jiān)聽一些細(xì)節(jié)sequentialconsistencyforsingleclient對于一個客戶端來說zookeeper保證執(zhí)行順應(yīng)跟調(diào)用順序一致

在網(wǎng)絡(luò)IO層,會有一個鏈表保持所有需要處理的數(shù)據(jù)包,F(xiàn)IFO這樣客戶端的順序一致性就保證了同步調(diào)用和異步調(diào)用

exists(finalStringpath,Watcherwatcher)exists(finalStringpath,Watcherwatcher,StatCallbackcb,Objectctx)

前者是同步調(diào)用,后再是異步調(diào)用。同步調(diào)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論