版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年及未來5年市場數(shù)據(jù)中國肉制品加工行業(yè)發(fā)展監(jiān)測及投資策略研究報(bào)告
- 四川農(nóng)業(yè)大學(xué)合同制聘用人員招聘備考題庫附答案
- 宜賓市市屬事業(yè)單位2025年第二次公開選調(diào)工作人員(24人)考試備考題庫附答案
- 廣安安農(nóng)發(fā)展集團(tuán)有限公司2026年度第一批次公開招聘勞務(wù)派遣制工作人員參考題庫附答案
- 招38人!興??h公安局2025年招聘警務(wù)輔助人員參考題庫附答案
- 浙江國企招聘-2025年湖州吳興區(qū)國有企業(yè)工作人員公開選聘12人考試備考題庫附答案
- 貴德縣2025年公開選聘大學(xué)生到村任職參考題庫附答案
- 商業(yè)航天行業(yè)研究:商業(yè)火箭產(chǎn)業(yè)鏈?zhǔn)崂?基于一二級產(chǎn)業(yè)的視角
- 浙江銀行招聘2025中國工商銀行寧波市分行暑期實(shí)習(xí)筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 國家公務(wù)員官網(wǎng)2025國考國考將于周四結(jié)束筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 舞臺機(jī)械的維護(hù)與保養(yǎng)
- 運(yùn)輸工具服務(wù)企業(yè)備案表
- 醫(yī)院藥房醫(yī)療廢物處置方案
- 高血壓達(dá)標(biāo)中心標(biāo)準(zhǔn)要點(diǎn)解讀及中心工作進(jìn)展-課件
- 金屬眼鏡架拋光等工藝【省一等獎】
- 混凝土質(zhì)量缺陷成因及預(yù)防措施1
- 《藥品經(jīng)營質(zhì)量管理規(guī)范》的五個附錄
- 試論如何提高小學(xué)音樂課堂合唱教學(xué)的有效性(論文)
- 機(jī)房設(shè)備操作規(guī)程
- ASMEBPE介紹專題知識
- GB/T 15087-1994汽車牽引車與全掛車機(jī)械連接裝置強(qiáng)度試驗(yàn)
評論
0/150
提交評論