云計(jì)算系列教程 (2)ppt課件_第1頁
云計(jì)算系列教程 (2)ppt課件_第2頁
云計(jì)算系列教程 (2)ppt課件_第3頁
云計(jì)算系列教程 (2)ppt課件_第4頁
云計(jì)算系列教程 (2)ppt課件_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、ZooKeeper分布式應(yīng)用的協(xié)調(diào)器,1,主要內(nèi)容,ZooKeeper的數(shù)據(jù)模型 ZooKeeper的數(shù)據(jù)讀寫機(jī)制 ZooKeeper的使用方法,2,為什么需要ZooKeeper?,大部分分布式應(yīng)用需要一個主控、協(xié)調(diào)器或控制器來管理物理分布的子進(jìn)程(如資源、任務(wù)分配等) 目前,大部分應(yīng)用需要開發(fā)私有的協(xié)調(diào)程序,缺乏一個通用的機(jī)制 協(xié)調(diào)程序的反復(fù)編寫浪費(fèi),且難以形成通用、伸縮性好的協(xié)調(diào)器 ZooKeeper:提供通用的分布式鎖服務(wù),用以協(xié)調(diào)分布式應(yīng)用(如,為HBase提供服務(wù)),3,ZooKeeper的數(shù)據(jù)模型,層次化目錄結(jié)構(gòu) 命名符合常規(guī)文件系統(tǒng)規(guī)范, 不能包含/ 節(jié)點(diǎn)Znode可以包含數(shù)據(jù)與

2、子 節(jié)點(diǎn) 客戶端應(yīng)用可在節(jié)點(diǎn)上設(shè)置 監(jiān)視器 節(jié)點(diǎn)數(shù)據(jù)不支持部分讀寫, 而是一次性完整讀寫 Ephemeral節(jié)點(diǎn),4,節(jié)點(diǎn)創(chuàng)建屬性,Ephemeral 創(chuàng)建的節(jié)點(diǎn)不是持久節(jié)點(diǎn) 一旦與客戶端的會話結(jié)束,節(jié)點(diǎn)自動刪除 Sequence 創(chuàng)建節(jié)點(diǎn)時,編號自動加1 例如x-1,x-2,s-3,x-4等,5,ZooKeeper的讀寫機(jī)制,ZooKeeper是一個由多個Server組成的集群 一個Leader,多個Follower 每個Server都保存了一份數(shù)據(jù)副本 全局?jǐn)?shù)據(jù)一致 分布式讀寫 更新請求轉(zhuǎn)發(fā),由Leader實(shí)施,6,使用ZooKeeper的約定,更新請求順序執(zhí)行 來自同一個Client的更

3、新請求按其發(fā)送順序依次執(zhí)行 數(shù)據(jù)更新原子性 一次數(shù)據(jù)更新要么成功,要么失敗。不存在部分?jǐn)?shù)據(jù)寫入成功或失敗的情況 全局唯一數(shù)據(jù)視圖 Client無論連接哪個Server,數(shù)據(jù)視圖都是一致的 實(shí)時性 在一定時間范圍內(nèi),Client能讀到最新數(shù)據(jù),7,ZooKeeper的API,String create(path, data, acl, flags) void delete(path, expectedVersion) Stat setData(path, data, expectedVersion) (data, Stat) getData(path, watch) Stat exists(pa

4、th, watch) String getChildren(path, watch) void sync(path) Stat setACL(path, acl, expectedVersion) (acl, Stat) getACL(path),包含監(jiān)視器,調(diào)用參數(shù)均包含節(jié)點(diǎn)路徑,8,對比:Chubby的API,handle Open(path,) Close(handle,) GetContentsAndStat(handle,), GetStat(handle), ReadDir(handle,) SetContents(handle), SetACL(handle,) Delete(p

5、ath) Acquire(), TryAcquire(), Release() GetSequencer(), SetSequencer(), CheckSequencer(),僅Open包含節(jié)點(diǎn)路徑,生成handle供其他API使用,9,如何使用ZooKeeper?,關(guān)于ZooKeeper的鎖服務(wù) 這里的“鎖”并非對ZooKeeper的資源加鎖,用于對第三方資源加鎖 用例 多個第三方分布式Server需要使用某第三方資源,誰獲取了ZooKeeper中的獨(dú)占鎖,誰就可以使用第三方資源,否則等待,10,如何使用ZooKeeper?,Leader選舉 用于在多個節(jié)點(diǎn)中選取主控,如GFS中對外服務(wù)M

6、aster節(jié)點(diǎn)的選取,1)getData(“/servers/leader”, true) 2)如果讀取成功則從數(shù)據(jù)中獲取leader信息,退出 3)讀取失敗,執(zhí)行create(“./servers/leader”, hostname, EPHEMERAL)(注意節(jié)點(diǎn)類型) 如果創(chuàng)建成功則自己成為leader,寫入信息,退出 5)如果寫入失敗,則返回步驟1,getData設(shè)置了監(jiān)視器,如果數(shù)據(jù)發(fā)生變化, 會重啟上述流程,11,如何使用ZooKeeper?,獨(dú)占鎖 如果分布式應(yīng)用需要對某資源獨(dú)占使用,可以申請獨(dú)占鎖,1)id = create(“./locks/x-”, SEQUENCE|EPH

7、EMERAL) 2)getChildren(“./locks/”, false) 3)如果id是第一個節(jié)點(diǎn),則獲取獨(dú)占鎖,退出 4)exists(name of last child before id, true)(注意,設(shè)置了監(jiān)視器) 5)如果id之前不存在節(jié)點(diǎn),返回步驟2 6)等待通知 7)返回步驟2,有且僅有一個Client可以獲取到獨(dú)占鎖,12,如何使用ZooKeeper?,共享鎖,1)id = create(“./locks/s-”, SEQUENCE|EPHEMERAL) 2)getChildren(“./locks/”, false) 3)如果id之前沒有x-類型的節(jié)點(diǎn),獲取共

8、享鎖,退出 4)exists(name of the last x- before id, true) 5)如果id之前不存在x-類型節(jié)點(diǎn),返回步驟2 6)等待事件通知 7)返回步驟2,如果之前沒有獨(dú)占鎖,就可以獲取共享鎖,13,如何使用ZooKeeper?,其他應(yīng)用(小數(shù)據(jù)存儲) 例如,GFS中master如何獲知ChunkServer信息?,基于ZooKeeper的實(shí)現(xiàn)方法 ChunkServer執(zhí)行如下操作: 1)id = create(“./chunkservers/cs-”, SEQUENCE|EPHEMERAL) 2)向節(jié)點(diǎn)id中寫入ChunkServer元信息 Master執(zhí)行如下操作: 1) getChildren(“./chunkservers/”, true) 2)讀取子節(jié)點(diǎn)數(shù)據(jù),獲知ChunkServer元信息,14,其他,ZooKeeper的

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論