版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Zookeeper淘寶-技術(shù)研發(fā)部-市場產(chǎn)品技術(shù)-開發(fā)-社區(qū)SNS-王釗Zookeeper能幫我們做什么
Zookeeper是一個分布式的,開源的分布式應(yīng)用程序協(xié)調(diào)服務(wù),用它可以來現(xiàn)同步服務(wù),配置維護同步服務(wù):利用zookeeper可以使機器之間的同步如同concurrent包下的同步器同步線程一樣,舉兩個互斥同步的例子1.應(yīng)用系統(tǒng)部署在多臺機器上,需要啟動一個時間任務(wù),而這個時間任務(wù)只能在一臺機器上執(zhí)行,否則會出現(xiàn)臟讀臟寫,zookeeper可以實現(xiàn)。2.應(yīng)用系統(tǒng)部署在多臺機器上,需要暴露一個服務(wù),而這個服務(wù)同樣不是全部的機器都有暴露,例如MASTER,而暴露這個服務(wù)的機器宕機后,其它的機器能自動的接替暴露這個服務(wù),zookeeper可以實現(xiàn)。配置維護:服務(wù)集群需要使用一組配置,為了保證配置在集群中的一致性,以及對配置更改后的立即響應(yīng)要求,使用zookeeper可以實現(xiàn)。
Zookeeper應(yīng)用結(jié)構(gòu)Zookeeper應(yīng)用機器結(jié)構(gòu)Zookeeper數(shù)據(jù)組織形式
Zookeeper提供接口建立連接
需要指定Zookeeper集群的IP地址,SessionTimeout,默認的watcher數(shù)據(jù)操作1.create創(chuàng)建一個節(jié)點,并在這個節(jié)點處寫入數(shù)據(jù),創(chuàng)建節(jié)點有四種模式
PERSISTENT創(chuàng)建持久化節(jié)點,對應(yīng)機器關(guān)閉連接后節(jié)點/數(shù)據(jù)不會消失
PERSISTENT_SEQUENTIAL如果PATH是以’/’結(jié)尾則以這個PATH作為父節(jié)點,創(chuàng)
建一個子節(jié)點,其子節(jié)點名字是一個按先后順序排列的數(shù)值;否則創(chuàng)建一個名字是
‘/’后面字符加上先后順序排列的數(shù)值字符串的節(jié)點,同樣創(chuàng)建持久節(jié)點
EPHEMERAL創(chuàng)建瞬時節(jié)點,Zookeeper在感知連接機器宕機后會清除它創(chuàng)建的瞬
節(jié)點EPHEMERAL_SEQUENTIAL穿件瞬時順序節(jié)點,和PERSISTENT_SEQUENTIAL
一樣,區(qū)別在于它是瞬時的
pathPERSISTENTPERSISTENT_SEQUENTIAL/lock/error在/lock/下創(chuàng)建子節(jié)點:/lock/000001/lock創(chuàng)建/lock節(jié)點創(chuàng)建節(jié)點/lock000001Zookeeper提供接口數(shù)據(jù)操作2.delete刪除一個節(jié)點3.exists查看一個節(jié)點的狀況,如果沒有返回null,可注入watcher4.getData獲取一個節(jié)點的數(shù)據(jù),可注入watcher5.setData設(shè)置一個節(jié)點的數(shù)據(jù)6.getChildren獲取一個節(jié)點的子節(jié)點,可注入watcherZookeeper保證1.sequentialconsistencyforsingleclient2.atomicity–updateeithersuccessorfail3.singlesystemimage–aclientwillseethesameviewoftheserviceregardlessoftheserverthatitconnectsto4.reliability–onceanupdatehasbeenapplied,itwillpersistformthattimeforwarduntilaclientoverwritetheupdate
WatcherWatcher種類,Zookeeper全局管理Watcher1.Zookeeper實例化時注入的默認Watcher2.dataWatchers一個Map<stringSet<Watcher>>數(shù)據(jù)結(jié)構(gòu),保存調(diào)用getData時
注入的Watcher或者調(diào)用exist時path指定的節(jié)點存在3.existWatchers一個Map<stringSet<Watcher>>數(shù)據(jù)結(jié)構(gòu),保存調(diào)用exits時
對應(yīng)的path節(jié)點不存在條件下注入的Watcher4.childWatchers一個Map<stringSet<Watcher>>數(shù)據(jù)結(jié)構(gòu),保存調(diào)用getChildren
時注入的WatcherWatcher管理
1.當調(diào)用exists,getData,getChildren函數(shù)時會需要傳入一個Watcher,對應(yīng)的path上的數(shù)據(jù)發(fā)生改變時,zookeeper服務(wù)器會發(fā)送NOTIFY包給客戶端,
客戶端在收到NOTIFY包后根據(jù)包指明的path和事件類別回調(diào)有關(guān)Watcher
的process函數(shù)2.當調(diào)用getData時將注入的Watcher加入到dataWatchers.get(path)的SET里面,
調(diào)用childWatchers時一樣3.當調(diào)用exists時,如果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集合
同時會將path這一MAP映射從dataWatchers&existWatchers里面清除
b.NodeChildrenChanged
回調(diào)childWatchers.get(path得到的Watcher集合
同時會將path這一MAP映射從childWatchers.get里面清除
c.NodeDeleted回調(diào)dataWatchers.get(path)&childWatchers.get(path)得到的Watcher集合
同時會將path這一MAP映射從dataWatchers&childWatchers里面清除
同時會將path這一MAP映射從existWatchers里面清除
Zookeeper事件連接斷開事件-Disconnected主要是發(fā)生網(wǎng)絡(luò)IO錯誤,zookeeper客戶端會自動的重新建立連接,同時會通知WatcherSESSION失效事件-Expired這個事件表示服務(wù)器認為先前建立的連接已經(jīng)失效了,整個zookeeper對象已經(jīng)不會再運轉(zhuǎn)了,其創(chuàng)建的
瞬間節(jié)點也被清空了,先前注入的Watchers也隨著zookeeper對象不運轉(zhuǎn)而失效,此時需要重新創(chuàng)建一個新的zookeeper對象連接建立事件-SyncConnected實例化zookeeper
對象時和服務(wù)器建立連接成功后才會zookeeper客戶端會觸發(fā)這個事件Zookeeper事件實現(xiàn)Watcher時注意點:1.publicclassXXimplementsWatcher{publicvoidprocess(WatchedEventevent){//不要進入死循環(huán),因為調(diào)度事件回調(diào)是一個單線程,阻塞在這里后其//他的Watcher就執(zhí)行不了}}2.注入Watcher后,因為什么事件Watcher被觸發(fā),此Watcher會從zookeeper管理的watcher里移除,當對應(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實例化一個Lock對象,如果path不存在則創(chuàng)建這個路徑,獲取鎖主要是在path下創(chuàng)建一個path/owner的瞬間節(jié)點,在節(jié)點上寫入自己的IP,這樣機器每次獲取鎖時就看path/owner是否存在,如果不存在則創(chuàng)建節(jié)點寫入IP,如果存在在看IP是不是自己的IP,釋放鎖則是如果IP是自己的IP則刪除這個瞬間節(jié)點?一個簡單的應(yīng)用-分布式互斥鎖tryLock()–嘗試獲取鎖資源
首先會判斷path/owner這個節(jié)點存在不,如果不存在則創(chuàng)建這個節(jié)點,并往這個節(jié)點寫入自己的IP,由于機器是并發(fā)執(zhí)行,可能有很多機器執(zhí)行這個創(chuàng)建操作,zookeeper保證更新操作的原子性,只有一個會操作成功,其他會拋出節(jié)點已經(jīng)存在異常。如果節(jié)點存在則看其其上的數(shù)據(jù)是不是自己IP來作為是不是自己拿到鎖資源的依據(jù)。unLock()–釋放鎖資源
如果節(jié)點存在,而且節(jié)點上的數(shù)據(jù)是自己的IP,則刪除這個節(jié)點registerListener(…)--監(jiān)聽鎖資源的使用狀況
1.執(zhí)行exists函數(shù),注入Watcher監(jiān)聽這個path,當這個節(jié)點被創(chuàng)建,被刪除,被更新都會回調(diào)這個Watcher
2.由于這個Watcher在被觸發(fā)后會被zookeeper的Watcher管理者移除,如果需要繼續(xù)監(jiān)聽則要再調(diào)用exists函數(shù)注入Watcher監(jiān)聽一些細節(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年學(xué)校教育教學(xué)工作總結(jié)范例(三篇)
- 2024年員工個人年度工作總結(jié)常用版(三篇)
- 2024年土地房屋買賣合同范文(三篇)
- 2024年后勤下半年工作計劃范例(四篇)
- 2024年幼兒園后勤工作計劃春模版(二篇)
- 2024年小班教學(xué)工作計劃范文(二篇)
- 2024年幼兒園保教計劃(二篇)
- 2024年市場治安安全管理制度范文(二篇)
- 2024年宿管部工作計劃例文(二篇)
- 2024年宅基地買賣合同模板(三篇)
- 劉潤年度演講2024
- 【核心素養(yǎng)目標】14.1熱機 教案 2023-2024學(xué)年人教版物理九年級上學(xué)期
- 2025屆高考語文復(fù)習(xí):文言實詞推斷方法 課件
- 醫(yī)院轉(zhuǎn)讓居間服務(wù)合同范本
- 遼寧省法院系統(tǒng)招聘聘用制書記員真題
- 2024福建網(wǎng)龍網(wǎng)絡(luò)控股限公司校園招聘100人高頻500題難、易錯點模擬試題附帶答案詳解
- 2024全國各地區(qū)語文中考真題匯編《第二期》
- 6.18 美國的獨立 課件 2024-2025學(xué)年統(tǒng)編版九年級歷史上冊
- 3.1平移現(xiàn)象(課件)冀教版數(shù)學(xué)三年級上冊
- 備戰(zhàn)2025年高考語文易錯題(新高考專用)易錯題22 古代詩歌閱讀之形象題-不明詩歌形象內(nèi)涵含答案
- 中國共產(chǎn)主義青年團團員教育管理工作條例(試行)團課學(xué)習(xí)課件
評論
0/150
提交評論