apachezookeeper_第1頁
apachezookeeper_第2頁
apachezookeeper_第3頁
apachezookeeper_第4頁
apachezookeeper_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、目錄zk 介紹zk 邏輯部署圖zk 數(shù)據(jù)結(jié)構(gòu)zk 數(shù)據(jù)操作保證API 介紹安裝和使用zk應(yīng)用:統(tǒng)一命名服務(wù)zk應(yīng)用:配置管理zk應(yīng)用:Job調(diào)度zk應(yīng)用:分布式鎖zk應(yīng)用:監(jiān)控服務(wù)器zk應(yīng)用: 分布式 Barrierszk應(yīng)用:隊(duì)列zk應(yīng)用:倆階段提交zk應(yīng)用:選舉zk 性能zk 總結(jié)zk 介紹官方定義:A Distributed Coordination Service for Distributed Applications 應(yīng)用范圍命名服務(wù)配置管理協(xié)調(diào)服務(wù),如同步,集群,領(lǐng)導(dǎo)節(jié)點(diǎn)選取設(shè)計(jì)目標(biāo)簡單的API和數(shù)據(jù)結(jié)構(gòu)完成協(xié)調(diào)服務(wù)分布式的,不會出現(xiàn)單點(diǎn)故障保證操作時序性性能測試結(jié)果表明非??旆?/p>

2、布式概念定義:一組硬件或者軟件分布在網(wǎng)絡(luò)計(jì)算機(jī)上,通過消息傳遞進(jìn)行通信和動作協(xié)調(diào)的系統(tǒng)有如下特征:并發(fā)性,并發(fā)執(zhí)行。并在增加網(wǎng)絡(luò)資源的時候提高性能處理能。在需要處理共享資源的時候需要協(xié)調(diào)缺乏全局時鐘:通過交換消息協(xié)調(diào)各個程序,這依賴于程序發(fā)生時間共識。故障獨(dú)立性:所有計(jì)算機(jī)系統(tǒng)都會出現(xiàn)故障。每個組件應(yīng)當(dāng)設(shè)計(jì)能適當(dāng)處理所依賴組件出現(xiàn)的故障zk 邏輯部署圖zk 數(shù)據(jù)結(jié)構(gòu)類似文件系統(tǒng)每個節(jié)點(diǎn)可以有自己的子節(jié)點(diǎn)每個節(jié)點(diǎn)可以存放二進(jìn)制數(shù)據(jù),不超過1M不同于文件系統(tǒng)的是,沒有相對目錄概念zk 數(shù)據(jù)節(jié)點(diǎn)znode 分永久節(jié)點(diǎn)和臨時節(jié)點(diǎn),臨時節(jié)點(diǎn)在回話結(jié)束的時候自動刪除znode節(jié)點(diǎn)最好存儲小于1K的數(shù)據(jù),這

3、些信息是配置信息,狀態(tài)信息等znode包含的其他數(shù)據(jù)數(shù)據(jù)版本號ACL版本號時間戳子節(jié)點(diǎn)數(shù)目與znode關(guān)聯(lián)的ACL可以控制誰能訪問此節(jié)點(diǎn)znode也可以定義為自增長節(jié)點(diǎn)客戶端可以設(shè)置watch在節(jié)點(diǎn)上,節(jié)點(diǎn)變化該watch被觸發(fā),并被隨后刪除zk 一致性保證順序一致性:客戶端的更新順序與它們被發(fā)送的順序相一致。原子性:更新操作要么成功要么失敗,沒有第三種結(jié)果。 單系統(tǒng)鏡像:無論客戶端連接到哪一個服務(wù)器,客戶端將看到相同的 ZooKeeper 視圖。可靠性:一旦一個更新操作被應(yīng)用,那么在客戶端再次更新它之前,它的值將不會改變。實(shí)時性:Timeliness - The clients view o

4、f the system is guaranteed to be up-to-date within a certain time bound。 注意:由于網(wǎng)絡(luò)延遲,不同客戶端看到的zk視圖有可能不一樣,需要調(diào)用synczk watch節(jié)點(diǎn)讀操作getData,getChildren,exists,可以設(shè)置一個watch,當(dāng)數(shù)據(jù)更新的時候,將會觸發(fā)一個事件。有如下三個特點(diǎn)只觸發(fā)一次:除非客戶端再次設(shè)置watch,否則客戶端只接接收到一次事件如果注冊了watch,則收到到事件,然后才能看到數(shù)據(jù)變化。 由于網(wǎng)絡(luò)延遲等因素,異步修改數(shù)據(jù)成功與收到節(jié)點(diǎn)更新事件先后順序不能保證。watch 包括 dat

5、a watch,和 child watch 倆種 。watch 注意事項(xiàng)watch被觸發(fā)后必須再次設(shè)置watch,在這段事件內(nèi),會錯過一些事件watch僅被觸發(fā)一次。如果getWatch以及exits 都注冊了同一個watch,則節(jié)點(diǎn)刪除的時候,watch僅被觸發(fā)一次zk APIcreate creates a node at a location in the treedelete deletes a nodeexists tests if a node exists at a locationget data reads the data from a nodeset data write

6、s data to a nodeget children retrieves a list of children of a nodesync waits for data to be propagated安裝和使用系統(tǒng)要求: JDK1.6 最好用專用機(jī)器,yahoo目前使用的雙核,2G內(nèi)存,80GB硬盤單機(jī)環(huán)境(開發(fā))安裝 從 /zookeeper/releases.html 下載 解壓,并進(jìn)入其根目錄,創(chuàng)建conf/zoo.cfg,并有如下內(nèi)容 調(diào)用bin/zkServer.sh star,啟動server 客戶端連接zk:bin/zkCli.

7、sh -server :2181分布式環(huán)(生產(chǎn))境安裝:/doc/trunk/zookeeperStarted.htmltickTime=2000dataDir=data/zookeeperclientPort=2181zk應(yīng)用:統(tǒng)一命名服務(wù)場景描述:類似目錄數(shù)那樣存取數(shù)據(jù)傳統(tǒng)方法ldap,jndi,文件共享zk:1. 創(chuàng)建一節(jié)點(diǎn) create(/app/config/server,bytes);2. getData(/app/config/server);zk應(yīng)用:配置管理場景描述:統(tǒng)一的配置文件傳統(tǒng)方法數(shù)據(jù)庫,文件共享,

8、或者數(shù)據(jù)庫快照zk:1. 創(chuàng)建一節(jié)點(diǎn) create(/app/config/server,bytes);2. 客戶端調(diào)用getData(/app/config/server,true);3. 如果配置變化,客戶端將得到通知,并重新調(diào)用getData獲取新的配置zk應(yīng)用:Job調(diào)度場景描述:在集群中,只能有一個客戶端能運(yùn)行任務(wù)傳統(tǒng)方法配置固定的客戶端運(yùn)行Job?;蛘邤?shù)據(jù)庫共享一條記錄,每次啟動的時候,讀一個序列號,在運(yùn)行時候判斷手里的序列號是否與數(shù)據(jù)庫序列號一致。一致則允許執(zhí)行。執(zhí)行完成后更新序列號。不一致則記錄新的序列號zk:1. 客戶端創(chuàng)建一節(jié)點(diǎn) create(/app/job1,EPHEM

9、ERAL );2. 如果創(chuàng)建失敗,則表示其他節(jié)點(diǎn)已經(jīng)執(zhí)行該任務(wù)3. 創(chuàng)建成功,執(zhí)行任務(wù),并刪除此節(jié)點(diǎn)zk應(yīng)用:監(jiān)控服務(wù)器場景描述:監(jiān)控各個服務(wù)器運(yùn)行情況傳統(tǒng)方法監(jiān)控程序ping各個服務(wù)器zk:1. 創(chuàng)建一節(jié)點(diǎn) create(/group)2. 被監(jiān)控服務(wù)器在此節(jié)點(diǎn)下創(chuàng)建一個臨時節(jié)點(diǎn):create(/group/server1, EPHEMERAL)3. 監(jiān)控程序監(jiān)控此節(jié)點(diǎn)下得各個臨時節(jié)點(diǎn)。getChildren(group,true);4. 節(jié)點(diǎn)增減將通知監(jiān)控程序zk應(yīng)用: 分布式 Barriers 場景描述所有進(jìn)程在一個Barriers處等待,直到滿足某個條件后繼續(xù)執(zhí)行傳統(tǒng)方法JMS Top

10、ic,定期檢測數(shù)據(jù)庫某記錄變化zk:1. 進(jìn)程調(diào)用API exits 在 barriers節(jié)點(diǎn),并設(shè)置watch為true2. 如果exits 返回false,barriers不存在,可以繼續(xù)執(zhí)行3. 如果存在此barriers節(jié)點(diǎn),等待該節(jié)點(diǎn)事件。4. 如果等待事件,重新調(diào)用exits 方法,同步驟1zk 應(yīng)用:Queue場景描述:客戶端從queue里取待處理的數(shù)據(jù)傳統(tǒng)方法通過JMS,消息入隊(duì)列,客戶端監(jiān)聽該隊(duì)列zk:1. 創(chuàng)建一節(jié)點(diǎn)create(/queue)2. 在該節(jié)點(diǎn)下每條消息創(chuàng)建一個子節(jié)點(diǎn),名字是msg-使用EPHEMERAL_SEQUENTIAL 參數(shù)3. 客戶端調(diào)用getChi

11、ldren(/queue,watcher)。4. 客戶端刪除最小得節(jié)點(diǎn),并處理此節(jié)點(diǎn)數(shù)據(jù),如果刪除失敗,則已經(jīng)被其他節(jié)點(diǎn)處理。處理下一個節(jié)點(diǎn)5. 優(yōu)先級隊(duì)列,消息節(jié)點(diǎn)使用msg-yy- ,其中yy是優(yōu)先級,重復(fù)步驟4zk應(yīng)用:分布式鎖場景描述:一個時刻只有其中一個客戶端獲取分布式鎖傳統(tǒng)方法數(shù)據(jù)庫悲觀鎖實(shí)現(xiàn) select for updatezk:1. 創(chuàng)建一節(jié)點(diǎn)create(/lock/somelock-,EPHEMERAL_SEQUENTIAL ),并記住返回的節(jié)點(diǎn)名稱,如/lock/somelock-00000032. 調(diào)用getChildren(/lock),找到返回列表最小的一個節(jié)點(diǎn)名

12、,如果最小節(jié)點(diǎn)名就是自己創(chuàng)建的節(jié)點(diǎn)名,則表示獲取該鎖3. 如果不是,則調(diào)用exists(最小節(jié)點(diǎn),watch),如果返回false,則繼續(xù)步驟2,否則等待事件通知,繼續(xù)步驟24. 讀寫鎖實(shí)現(xiàn):參考官方文檔提供的指南 zk應(yīng)用:倆階段提交場景描述:告訴所有客戶端要么都提交,要么全部回滾傳統(tǒng)方法XA 實(shí)現(xiàn)zk:1. 協(xié)調(diào)者創(chuàng)建節(jié)點(diǎn)/app/tx,并為每一個參與者創(chuàng)建一個子節(jié)點(diǎn)/app/tx/client_i;2. 協(xié)調(diào)者監(jiān)聽各個子節(jié)點(diǎn)數(shù)據(jù)變化getData(app/tx/client_1,watcher) getData(app/tx/client_2,watcher)1. 各個客戶端將自己執(zhí)行結(jié)

13、果(commit,abort)寫到到自己的節(jié)點(diǎn)里2. 協(xié)調(diào)者根據(jù)各節(jié)點(diǎn)的值判斷是否需要commit還是abort,并將最終結(jié)果寫入到/app/tx 節(jié)點(diǎn)里3. 客戶端調(diào)用getData(app/tx,watcher),判斷里的值是commit還是abort zk應(yīng)用:選舉場景描述:分布式應(yīng)用中,必須有一個節(jié)點(diǎn)作為領(lǐng)導(dǎo)節(jié)點(diǎn)協(xié)調(diào)其他節(jié)點(diǎn)傳統(tǒng)方法各種算法,如基于環(huán)的算法,霸道算法zk:創(chuàng)建節(jié)點(diǎn)create(/election);每個客戶端其目錄下創(chuàng)建一臨時,自增長節(jié)點(diǎn)n-序列號最小的為選舉出來的領(lǐng)導(dǎo)各客戶端監(jiān)聽領(lǐng)導(dǎo)節(jié)點(diǎn),如果一旦次節(jié)點(diǎn)被刪除,自動認(rèn)為下一個最小節(jié)點(diǎn)為領(lǐng)導(dǎo)節(jié)點(diǎn) zk 性能zk 總結(jié)zk 是一個為分布式應(yīng)用提供的分布式協(xié)調(diào)服務(wù)器zk 部分應(yīng)用場景實(shí)現(xiàn)可以用數(shù)據(jù)庫實(shí)現(xiàn),消息中間件

溫馨提示

  • 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

提交評論