Zookeeper學(xué)習(xí)第一天

ZooKeeper官方文檔

博客地址:http://blog.csdn.net/java_yes/article/details/78668460

ZooKeeper:分布式應(yīng)用程序的分布式協(xié)調(diào)服務(wù)

ZooKeeper是面向分布式應(yīng)用程序的分布式開源協(xié)調(diào)服務(wù)慎恒。它公開了一組簡單的原語死嗦,分布式應(yīng)用程序可以利用這些原語來實(shí)現(xiàn)更高級(jí)別的服務(wù),以實(shí)現(xiàn)同步廊敌,配置維護(hù)以及組合命名骡澈。它被設(shè)計(jì)為易于編程肋殴,并且使用在文件系統(tǒng)熟悉的目錄樹結(jié)構(gòu)之后的樣式的數(shù)據(jù)模型护锤。它運(yùn)行在Java中,并具有Java和C的綁定酿傍。
協(xié)調(diào)服務(wù)是非常難以正確的。他們特別容易出現(xiàn)諸如(由于兩個(gè)或者多個(gè)進(jìn)程競爭使用不能被同時(shí)訪問的資源氯析,使得這些進(jìn)程有可能因?yàn)闀r(shí)間上推進(jìn)的先后原因而出現(xiàn)問題亏较,這叫做競爭條件)Race Condition和(死鎖)deadlock等錯(cuò)誤掩缓。ZooKeeper背后的動(dòng)機(jī)是為分散的應(yīng)用程序減輕從零開始實(shí)施協(xié)調(diào)服務(wù)的責(zé)任巡通。

設(shè)計(jì)目標(biāo)

ZooKeeper是簡單的。ZooKeeper允許分布式進(jìn)程通過與標(biāo)準(zhǔn)文件系統(tǒng)類似組織的共享分層名稱空間相互協(xié)調(diào)签孔。名稱空間由數(shù)據(jù)寄存器(稱為znode)組成罐盔,以ZooKeeper的說法 - 它們類似于文件和目錄纬黎。與典型的用于存儲(chǔ)的文件系統(tǒng)不同,ZooKeeper數(shù)據(jù)保存在內(nèi)存中,這意味著ZooKeeper可以實(shí)現(xiàn)高吞吐量和低延遲數(shù)量肄渗。
ZooKeeper實(shí)現(xiàn)對(duì)高性能,高可用性,嚴(yán)格有序的訪問非常重要。ZooKeeper的性能方面意味著它可以用于大型分布式系統(tǒng)。可靠性方面使它不能成為單一故障點(diǎn)。嚴(yán)格的排序意味著可以在客戶端實(shí)現(xiàn)復(fù)雜的同步原語。
ZooKeeper是可復(fù)制的。就像它所協(xié)調(diào)的分布式進(jìn)程一樣,ZooKeeper本身也被復(fù)制到一組稱為集合的主機(jī)上。

image

構(gòu)成ZooKeeper服務(wù)的服務(wù)器必須全部相互了解。他們維護(hù)一個(gè)內(nèi)存狀態(tài)的圖像,以及一個(gè)持久存儲(chǔ)中的事務(wù)日志和快照集嵌。只要大部分服務(wù)器都可用,ZooKeeper服務(wù)將可用。
客戶端連接到一臺(tái)ZooKeeper服務(wù)器。客戶端維護(hù)一個(gè)TCP連接箩祥,通過它發(fā)送請(qǐng)求谢揪,獲取響應(yīng)患民,獲取監(jiān)視事件并發(fā)送心跳。如果到服務(wù)器的TCP連接中斷仅孩,客戶端將連接到不同的服務(wù)器托猩。
ZooKeeper是有序的。ZooKeeper使用反映所有ZooKeeper事務(wù)順序的數(shù)字來標(biāo)記每個(gè)更新辽慕。后續(xù)操作可以使用該命令來實(shí)現(xiàn)更高級(jí)別的抽象京腥,例如同步原語。
ZooKeeper是很快的溅蛉。在“讀取主導(dǎo)”的工作負(fù)載中公浪,這個(gè)速度特別快。ZooKeeper應(yīng)用程序在數(shù)千臺(tái)機(jī)器上運(yùn)行温艇,并且在讀取比寫入更為普遍的情況下因悲,性能表現(xiàn)最佳,比例約為10:1勺爱。

數(shù)據(jù)模型和分層名稱空間

ZooKeeper的分層命名空間

ZooKeeper提供的名稱空間與標(biāo)準(zhǔn)文件系統(tǒng)非常相似晃琳。名稱是由斜杠(/)分隔的一系列路徑元素。ZooKeeper名稱空間中的每個(gè)節(jié)點(diǎn)都由一個(gè)路徑標(biāo)識(shí)琐鲁。

節(jié)點(diǎn)和短暫節(jié)點(diǎn)

與標(biāo)準(zhǔn)文件系統(tǒng)不同卫旱,ZooKeeper名稱空間中的每個(gè)節(jié)點(diǎn)都可以有與其相關(guān)的數(shù)據(jù)以及子節(jié)點(diǎn)。這就像有一個(gè)文件系統(tǒng)围段,允許一個(gè)文件也是一個(gè)目錄顾翼。(ZooKeeper被設(shè)計(jì)用于存儲(chǔ)協(xié)調(diào)數(shù)據(jù):狀態(tài)信息,配置奈泪,位置信息等适贸,因此存儲(chǔ)在每個(gè)節(jié)點(diǎn)的數(shù)據(jù)通常很小,在字節(jié)到千字節(jié)范圍內(nèi))涝桅。我們使用znode這個(gè)詞 來表示我們正在談?wù)揨ooKeeper數(shù)據(jù)節(jié)點(diǎn)拜姿。
Znodes維護(hù)一個(gè)統(tǒng)計(jì)結(jié)構(gòu),其中包括數(shù)據(jù)更改的版本號(hào)冯遂,ACL更改和時(shí)間戳蕊肥,以允許緩存驗(yàn)證和協(xié)調(diào)更新。每當(dāng)znode的數(shù)據(jù)發(fā)生變化時(shí)蛤肌,版本號(hào)就會(huì)增加壁却。例如,每當(dāng)客戶端檢索數(shù)據(jù)時(shí)裸准,它也會(huì)收到數(shù)據(jù)的版本展东。
存儲(chǔ)在名稱空間中每個(gè)節(jié)點(diǎn)上的數(shù)據(jù)是以原子方式讀取和寫入的。讀取獲得與znode關(guān)聯(lián)的所有數(shù)據(jù)字節(jié)炒俱,寫入將替換所有數(shù)據(jù)琅锻。每個(gè)節(jié)點(diǎn)都有一個(gè)訪問控制列表(ACL)卦停,限制誰可以做什么。
ZooKeeper也有短暫節(jié)點(diǎn)的概念恼蓬。只要?jiǎng)?chuàng)建znode的會(huì)話處于活動(dòng)狀態(tài)惊完,就會(huì)存在這些znode。當(dāng)會(huì)話結(jié)束時(shí)处硬,znode被刪除小槐。當(dāng)您想實(shí)現(xiàn)[tbd]時(shí),短暫節(jié)點(diǎn)很有用荷辕。

條件更新和監(jiān)視

ZooKeeper支持監(jiān)控概念凿跳。客戶可以在znode上設(shè)置一個(gè)監(jiān)控疮方。當(dāng)znode改變時(shí)控嗜,監(jiān)控將被觸發(fā)并移除。當(dāng)監(jiān)控被觸發(fā)時(shí)骡显,客戶端收到一個(gè)數(shù)據(jù)包說znode已經(jīng)改變疆栏。如果客戶端與其中一個(gè)Zoo Keeper服務(wù)器之間的連接中斷,客戶端將收到本地通知惫谤。這些可以用來[待定]壁顶。

保證

ZooKeeper非常快速溜歪,非常簡單若专。既然它的目標(biāo)是構(gòu)建比較復(fù)雜的服務(wù),比如同步蝴猪,就提供了一套保證调衰。這些是:

  • 順序一致性 : 來自客戶端的更新將按照它們發(fā)送的順序進(jìn)行應(yīng)用。
  • 原子性 : 更新成功或失敗自阱。沒有部分結(jié)果嚎莉。
  • 單系統(tǒng)映像: 無論服務(wù)器連接到哪個(gè)服務(wù)器,客戶端都會(huì)看到相同的服務(wù)視圖动壤。
  • 可靠性: 一旦更新被應(yīng)用萝喘,它將一直持續(xù)到客戶覆蓋更新淮逻。
  • 及時(shí)性 : 系統(tǒng)的客戶觀點(diǎn)在一定的時(shí)間范圍內(nèi)保證是最新的琼懊。

簡單的API

ZooKeeper的一個(gè)設(shè)計(jì)目標(biāo)是提供一個(gè)非常簡單的編程接口。因此爬早,它只支持這些操作:

  1. 創(chuàng)建:
    在樹中的一個(gè)位置創(chuàng)建一個(gè)節(jié)點(diǎn)
  2. 刪除:
    刪除一個(gè)節(jié)點(diǎn)
  3. 判斷是否存在:
    測試節(jié)點(diǎn)是否存在于某個(gè)位置
  4. 獲取數(shù)據(jù):
    從節(jié)點(diǎn)讀取數(shù)據(jù)
  5. 設(shè)置數(shù)據(jù):
    將數(shù)據(jù)寫入節(jié)點(diǎn)
  6. 獲得子集:
    檢索一個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)列表
  7. 同步:
    等待數(shù)據(jù)同步到每個(gè)節(jié)點(diǎn)上

實(shí)現(xiàn)

ZooKeeper組件顯示了ZooKeeper服務(wù)的高級(jí)組件哼丈。除請(qǐng)求處理器外,組成ZooKeeper服務(wù)的每個(gè)服務(wù)器都復(fù)制其每個(gè)組件的副本筛严。


ZooKeeper組件

復(fù)制的數(shù)據(jù)庫是包含整個(gè)數(shù)據(jù)樹的內(nèi)存數(shù)據(jù)庫醉旦。將更新記錄到磁盤以實(shí)現(xiàn)可恢復(fù)性,并在寫入磁盤之前將其寫入磁盤,然后再將其寫入內(nèi)存數(shù)據(jù)庫车胡。
每個(gè)ZooKeeper服務(wù)器都為客戶端服務(wù)檬输。客戶端連接到一個(gè)服務(wù)器提交irequests匈棘。讀取請(qǐng)求是從每個(gè)服務(wù)器數(shù)據(jù)庫的本地副本服務(wù)的丧慈。請(qǐng)求改變服務(wù)的狀態(tài),寫請(qǐng)求主卫,由協(xié)議協(xié)議處理逃默。
作為協(xié)議協(xié)議的一部分,來自客戶端的所有寫入請(qǐng)求都被轉(zhuǎn)發(fā)給一個(gè)稱為leader的服務(wù)器 簇搅。ZooKeeper服務(wù)器的其余部分(稱為 followers)接收leader的消息建議并同意消息傳遞完域。消息傳遞層負(fù)責(zé)替換失效的leader,并與leader同步followers瘩将。
ZooKeeper使用一個(gè)自定義的原子消息傳遞協(xié)議吟税。由于消息傳遞層是原子的,因此ZooKeeper可以保證本地副本不會(huì)發(fā)生分離鸟蟹。當(dāng)leader接收到一個(gè)寫請(qǐng)求時(shí)乌妙,它會(huì)計(jì)算什么時(shí)候系統(tǒng)的狀態(tài)是什么時(shí)候?qū)懀⑵滢D(zhuǎn)換成一個(gè)捕獲這個(gè)新狀態(tài)的事務(wù)建钥。

使用

ZooKeeper的編程接口是特意設(shè)計(jì)的簡單藤韵。但是,有了它熊经,您可以實(shí)現(xiàn)更高階的操作泽艘,例如同步原語,組成員資格镐依,所有權(quán)等匹涮。一些分布式應(yīng)用程序已經(jīng)使用它來:[tbd:從白皮書和視頻演示中添加使用。]

性能

ZooKeeper被設(shè)計(jì)為高性能的槐壳。但是呢然低?Yahoo! ZooKeeper開發(fā)團(tuán)隊(duì)的成果 研究表明它是。(請(qǐng)參閱ZooKeeper吞吐量作為讀寫速率的變化务唐。)在讀取數(shù)量大于寫入的應(yīng)用程序中雳攘,性能特別高,因?yàn)閷懭氩僮魃婕暗酵剿蟹?wù)器的狀態(tài)枫笛。(讀出次數(shù)寫入通常是協(xié)調(diào)服務(wù)的情況吨灭。)

Zoopkeeper吞吐量變化

圖中的ZooKeeper吞吐量讀寫比率發(fā)生變化是動(dòng)ZooKeeper的吞吐量圖3.2版與雙2GHz的至強(qiáng)和兩個(gè)SATA 15K RPM驅(qū)動(dòng)器的服務(wù)器上運(yùn)行。一個(gè)驅(qū)動(dòng)器被用作專用的ZooKeeper日志設(shè)備刑巧⌒郑快照被寫入到OS驅(qū)動(dòng)器无畔。寫請(qǐng)求是1K寫,讀取是1K讀吠冤』胝茫“服務(wù)器”表示ZooKeeper集成的大小,即構(gòu)成服務(wù)的服務(wù)器的數(shù)量拯辙。大約還有30臺(tái)服務(wù)器用于模擬客戶端闸昨。ZooKeeper集成配置使領(lǐng)導(dǎo)不允許來自客戶端的連接。

注意:與之前的3.1版本相比薄风,3.2版本的r / w性能提高了約2倍饵较。
基準(zhǔn)也表明它也是可靠的。顯示了部署如何響應(yīng)各種故障遭赂。圖中標(biāo)注的事件如下:

  • follower的失效和恢復(fù)
  • 失效和恢復(fù)不同的follower
  • leader失效
  • 兩名follower失效和恢復(fù)
  • 另一位leader失效

可靠性

為了顯示隨著時(shí)間的推移系統(tǒng)的行為循诉,我們運(yùn)行了一個(gè)由7臺(tái)機(jī)器組成的ZooKeeper服務(wù)。我們和以前一樣運(yùn)行了相同的飽和度基準(zhǔn)撇他,但是這次我們把寫入百分比保持在30%茄猫,這是我們預(yù)期的工作量的一個(gè)保守的比例。


存在錯(cuò)誤的可靠性

這個(gè)圖是幾個(gè)重要的觀察結(jié)果困肩。首先划纽,如果follower失效并迅速恢復(fù),那么ZooKeeper即使失效也能保持高吞吐量锌畸。但更重要的是勇劣,leader選舉算法允許系統(tǒng)恢復(fù)得足夠快嫁艇,以防止吞吐量大幅下降拥诡。在我們的觀察中,ZooKeeper花了不到200ms選出一個(gè)新的leader驼修。第三盆犁,隨著follower的恢復(fù)命咐,ZooKeeper能夠在開始處理請(qǐng)求后再次提高吞吐量。

ZooKeeper項(xiàng)目

ZooKeeper已被 成功應(yīng)用于 許多工業(yè)應(yīng)用谐岁。它用在Yahoo! 作為Yahoo!的協(xié)調(diào)和故障恢復(fù)服務(wù)醋奠。Message Broker,這是一個(gè)高度可擴(kuò)展的發(fā)布 - 訂閱系統(tǒng)伊佃,管理數(shù)千個(gè)復(fù)制和數(shù)據(jù)傳輸主題窜司。它被Yahoo!的抓取服務(wù)使用。爬蟲锭魔,它也管理故障恢復(fù)例证。一些雅虎路呜!廣告系統(tǒng)也使用ZooKeeper來實(shí)現(xiàn)可靠的服務(wù)迷捧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末织咧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子漠秋,更是在濱河造成了極大的恐慌笙蒙,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庆锦,死亡現(xiàn)場離奇詭異捅位,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)搂抒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門艇搀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人求晶,你說我怎么就攤上這事焰雕。” “怎么了芳杏?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵矩屁,是天一觀的道長。 經(jīng)常有香客問我爵赵,道長吝秕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任空幻,我火速辦了婚禮烁峭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘秕铛。我一直安慰自己则剃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布如捅。 她就那樣靜靜地躺著棍现,像睡著了一般。 火紅的嫁衣襯著肌膚如雪镜遣。 梳的紋絲不亂的頭發(fā)上己肮,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音悲关,去河邊找鬼谎僻。 笑死,一個(gè)胖子當(dāng)著我的面吹牛寓辱,可吹牛的內(nèi)容都是我干的艘绍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼秫筏,長吁一口氣:“原來是場噩夢啊……” “哼诱鞠!你這毒婦竟也來了挎挖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤航夺,失蹤者是張志新(化名)和其女友劉穎蕉朵,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阳掐,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡始衅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缭保。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汛闸。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖艺骂,靈堂內(nèi)的尸體忽然破棺而出蛉拙,到底是詐尸還是另有隱情,我是刑警寧澤彻亲,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布孕锄,位于F島的核電站,受9級(jí)特大地震影響苞尝,放射性物質(zhì)發(fā)生泄漏畸肆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一宙址、第九天 我趴在偏房一處隱蔽的房頂上張望轴脐。 院中可真熱鬧,春花似錦抡砂、人聲如沸大咱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碴巾。三九已至,卻和暖如春丑搔,著一層夾襖步出監(jiān)牢的瞬間厦瓢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國打工啤月, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留煮仇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓谎仲,卻偏偏與公主長得像浙垫,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容