zk學(xué)習(xí)(1)-Zookeeper入坑

首先關(guān)注一下 Google分布式系統(tǒng)三大論文
微云pdf引文版自取
中文翻譯版

簡(jiǎn)單了解一下

ZooKeeper是一種為分布式應(yīng)用所設(shè)計(jì)的高可用、高性能且一致的開源協(xié)調(diào)服務(wù),它提供了一項(xiàng)基本服務(wù):分布式鎖服務(wù)。由于ZooKeeper的開源特性,后來我們的開發(fā)者在分布式鎖的基礎(chǔ)上,摸索了出了其他的使用方法:配置維護(hù)、組服務(wù)、分布式消息隊(duì)列、分布式通知/協(xié)調(diào)等。

注意:ZooKeeper性能上的特點(diǎn)決定了它能夠用在大型的、分布式的系統(tǒng)當(dāng)中。從可靠性方面來說,它并不會(huì)因?yàn)橐粋€(gè)節(jié)點(diǎn)的錯(cuò)誤而崩潰。除此之外,它嚴(yán)格的序列訪問控制意味著復(fù)雜的控制原語可以應(yīng)用在客戶端上。ZooKeeper在一致性、可用性、容錯(cuò)性的保證,也是ZooKeeper的成功之處,它獲得的一切成功都與它采用的協(xié)議——Zab協(xié)議是密不可分的。

數(shù)據(jù)結(jié)構(gòu)+原語+watcher機(jī)制

這三點(diǎn)構(gòu)成的zk的基本功能

ZooKeeper在實(shí)現(xiàn)這些服務(wù)時(shí),首先它設(shè)計(jì)一種新的數(shù)據(jù)結(jié)構(gòu)——Znode,然后在該數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上定義了一些原語,也就是一些關(guān)于該數(shù)據(jù)結(jié)構(gòu)的一些操作。有了這些數(shù)據(jù)結(jié)構(gòu)和原語還不夠,因?yàn)槲覀兊腪ooKeeper是工作在一個(gè)分布式的環(huán)境下,我們的服務(wù)是通過消息以網(wǎng)絡(luò)的形式發(fā)送給我們的分布式應(yīng)用程序,所以還需要一個(gè)通知機(jī)制——Watcher機(jī)制。那么總結(jié)一下,ZooKeeper所提供的服務(wù)主要是通過:數(shù)據(jù)結(jié)構(gòu)+原語+watcher機(jī)制,三個(gè)部分來實(shí)現(xiàn)的。

數(shù)據(jù)結(jié)構(gòu)Znode

ZooKeeper擁有一個(gè)層次的命名空間,這個(gè)和標(biāo)準(zhǔn)的文件系統(tǒng)非常相似

對(duì)比圖

(1) 引用方式

Zonde通過路徑引用,如同Unix中的文件路徑。路徑必須是絕對(duì)的,因此他們必須由斜杠字符來開頭。除此以外,他們必須是唯一的,也就是說每一個(gè)路徑只有一個(gè)表示,因此這些路徑不能改變。在ZooKeeper中,路徑由Unicode字符串組成,并且有一些限制。字符串"/zookeeper"用以保存管理信息,比如關(guān)鍵配額信息。

(2) Znode結(jié)構(gòu)

ZooKeeper命名空間中的Znode,兼具文件和目錄兩種特點(diǎn)。既像文件一樣維護(hù)著數(shù)據(jù)、元信息、ACL、時(shí)間戳等數(shù)據(jù)結(jié)構(gòu),又像目錄一樣可以作為路徑標(biāo)識(shí)的一部分。圖中的每個(gè)節(jié)點(diǎn)稱為一個(gè)Znode。 每個(gè)Znode由3部分組成:

① stat:此為狀態(tài)信息, 描述該Znode的版本, 權(quán)限等信息

② data:與該Znode關(guān)聯(lián)的數(shù)據(jù)

③ children:該Znode下的子節(jié)點(diǎn)

ZooKeeper雖然可以關(guān)聯(lián)一些數(shù)據(jù),但并沒有被設(shè)計(jì)為常規(guī)的數(shù)據(jù)庫或者大數(shù)據(jù)存儲(chǔ),相反的是,它用來管理調(diào)度數(shù)據(jù),比如分布式應(yīng)用中的配置文件信息、狀態(tài)信息、匯集位置等等。這些數(shù)據(jù)的共同特性就是它們都是很小的數(shù)據(jù),通常以KB為大小單位。ZooKeeper的服務(wù)器和客戶端都被設(shè)計(jì)為嚴(yán)格檢查并限制每個(gè)Znode的數(shù)據(jù)大小至多1M,但常規(guī)使用中應(yīng)該遠(yuǎn)小于此值。

(3) 數(shù)據(jù)訪問

ZooKeeper中的每個(gè)節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)要被原子性的操作。也就是說讀操作將獲取與節(jié)點(diǎn)相關(guān)的所有數(shù)據(jù),寫操作也將替換掉節(jié)點(diǎn)的所有數(shù)據(jù)。另外,每一個(gè)節(jié)點(diǎn)都擁有自己的ACL(訪問控制列表),這個(gè)列表規(guī)定了用戶的權(quán)限,即限定了特定用戶對(duì)目標(biāo)節(jié)點(diǎn)可以執(zhí)行的操作。

(4) 節(jié)點(diǎn)類型

ZooKeeper中的節(jié)點(diǎn)有兩種,分別為臨時(shí)節(jié)點(diǎn)和永久節(jié)點(diǎn)。節(jié)點(diǎn)的類型在創(chuàng)建時(shí)即被確定,并且不能改變。

① 臨時(shí)節(jié)點(diǎn):該節(jié)點(diǎn)的生命周期依賴于創(chuàng)建它們的會(huì)話。一旦會(huì)話(Session)結(jié)束,臨時(shí)節(jié)點(diǎn)將被自動(dòng)刪除,當(dāng)然可以也可以手動(dòng)刪除。雖然每個(gè)臨時(shí)的Znode都會(huì)綁定到一個(gè)客戶端會(huì)話,但他們對(duì)所有的客戶端還是可見的。另外,ZooKeeper的臨時(shí)節(jié)點(diǎn)不允許擁有子節(jié)點(diǎn)。

② 永久節(jié)點(diǎn):該節(jié)點(diǎn)的生命周期不依賴于會(huì)話,并且只有在客戶端顯示執(zhí)行刪除操作的時(shí)候,他們才能被刪除。

(5) 順序節(jié)點(diǎn)

當(dāng)創(chuàng)建Znode的時(shí)候,用戶可以請(qǐng)求在ZooKeeper的路徑結(jié)尾添加一個(gè)遞增的計(jì)數(shù)。這個(gè)計(jì)數(shù)對(duì)于此節(jié)點(diǎn)的父節(jié)點(diǎn)來說是唯一的,它的格式為"%10d"(10位數(shù)字,沒有數(shù)值的數(shù)位用0補(bǔ)充,例如"0000000001")。當(dāng)計(jì)數(shù)值大于232-1時(shí),計(jì)數(shù)器將溢出。

(6) 觀察

客戶端可以在節(jié)點(diǎn)上設(shè)置watch,我們稱之為監(jiān)視器。當(dāng)節(jié)點(diǎn)狀態(tài)發(fā)生改變時(shí)(Znode的增、刪、改)將會(huì)觸發(fā)watch所對(duì)應(yīng)的操作。當(dāng)watch被觸發(fā)時(shí),ZooKeeper將會(huì)向客戶端發(fā)送且僅發(fā)送一條通知,因?yàn)閣atch只能被觸發(fā)一次,這樣可以減少網(wǎng)絡(luò)流量。

ZooKeeper中節(jié)點(diǎn)的時(shí)間

ZooKeeper有多種記錄時(shí)間的形式,其中包含以下幾個(gè)主要屬性:

(1) Zxid
致使ZooKeeper節(jié)點(diǎn)狀態(tài)改變的每一個(gè)操作都將使節(jié)點(diǎn)接收到一個(gè)Zxid格式的時(shí)間戳,并且這個(gè)時(shí)間戳全局有序。也就是說,也就是說,每個(gè)對(duì) 節(jié)點(diǎn)的改變都將產(chǎn)生一個(gè)唯一的Zxid。如果Zxid1的值小于Zxid2的值,那么Zxid1所對(duì)應(yīng)的事件發(fā)生在Zxid2所對(duì)應(yīng)的事件之前。實(shí)際 上,ZooKeeper的每個(gè)節(jié)點(diǎn)維護(hù)者三個(gè)Zxid值,為別為:cZxid、mZxid、pZxid。
① cZxid: 是節(jié)點(diǎn)的創(chuàng)建時(shí)間所對(duì)應(yīng)的Zxid格式時(shí)間戳。
② mZxid:是節(jié)點(diǎn)的修改時(shí)間所對(duì)應(yīng)的Zxid格式時(shí)間戳。

實(shí)現(xiàn)中Zxid是一個(gè)64為的數(shù)字,它高32位是epoch用來標(biāo)識(shí)leader關(guān)系是否改變,每次一個(gè)leader被選出來,它都會(huì)有一個(gè) 新的epoch。低32位是個(gè)遞增計(jì)數(shù)。

(2) 版本號(hào)
對(duì)節(jié)點(diǎn)的每一個(gè)操作都將致使這個(gè)節(jié)點(diǎn)的版本號(hào)增加。每個(gè)節(jié)點(diǎn)維護(hù)著三個(gè)版本號(hào),他們分別為:

① version:節(jié)點(diǎn)數(shù)據(jù)版本號(hào)
② cversion:子節(jié)點(diǎn)版本號(hào)
③ aversion:節(jié)點(diǎn)所擁有的ACL版本號(hào)

ZooKeeper節(jié)點(diǎn)屬性

節(jié)點(diǎn)屬性

原語

操作

更新ZooKeeper操作是有限制的。delete或setData必須明確要更新的Znode的版本號(hào),我們可以調(diào)用exists找到。如果版本號(hào)不匹配,更新將會(huì)失敗。

更新ZooKeeper操作是非阻塞式的。因此客戶端如果失去了一個(gè)更新(由于另一個(gè)進(jìn)程在同時(shí)更新這個(gè)Znode),他可以在不阻塞其他進(jìn)程執(zhí)行的情況下,選擇重新嘗試或進(jìn)行其他操作。

盡管ZooKeeper可以被看做是一個(gè)文件系統(tǒng),但是處于便利,摒棄了一些文件系統(tǒng)地操作原語。因?yàn)槲募浅5男〔⑶沂拐w讀寫的,所以不需要打開、關(guān)閉或是尋地的操作。

Watch觸發(fā)器

(1) watch概述

ZooKeeper可以為所有的讀操作設(shè)置watch,這些讀操作包括:exists()、getChildren()及getData()。watch事件是一次性的觸發(fā)器,當(dāng)watch的對(duì)象狀態(tài)發(fā)生改變時(shí),將會(huì)觸發(fā)此對(duì)象上watch所對(duì)應(yīng)的事件。watch事件將被異步地發(fā)送給客戶端,并且ZooKeeper為watch機(jī)制提供了有序的一致性保證。理論上,客戶端接收watch事件的時(shí)間要快于其看到watch對(duì)象狀態(tài)變化的時(shí)間。

(2) watch類型

ZooKeeper所管理的watch可以分為兩類:

① 數(shù)據(jù)watch(data watches):getData和exists負(fù)責(zé)設(shè)置數(shù)據(jù)watch
② 孩子watch(child watches):getChildren負(fù)責(zé)設(shè)置孩子watch

我們可以通過操作返回的數(shù)據(jù)來設(shè)置不同的watch:

① getData和exists:返回關(guān)于節(jié)點(diǎn)的數(shù)據(jù)信息
② getChildren:返回孩子列表

因此

① 一個(gè)成功的setData操作將觸發(fā)Znode的數(shù)據(jù)watch

② 一個(gè)成功的create操作將觸發(fā)Znode的數(shù)據(jù)watch以及孩子watch

③ 一個(gè)成功的delete操作將觸發(fā)Znode的數(shù)據(jù)watch以及孩子watch

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,030評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,310評(píng)論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,951評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,796評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,566評(píng)論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,055評(píng)論 1 322
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,142評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,303評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,799評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,683評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,899評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,409評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,135評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,520評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,757評(píng)論 1 282
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,528評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,844評(píng)論 2 372

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

  • 一、ZooKeeper的背景 1.1 認(rèn)識(shí)ZooKeeper ZooKeeper---譯名為“動(dòng)物園管理員”。動(dòng)物...
    algernoon閱讀 9,104評(píng)論 1 106
  • 一個(gè)真正的寫數(shù)據(jù)流程是怎么樣的?一個(gè)真正的讀數(shù)據(jù)流程是怎么樣的?一個(gè)真正的同步數(shù)據(jù)流程是怎么樣的?從哪里到哪里?什...
    時(shí)待吾閱讀 4,029評(píng)論 0 14
  • 轉(zhuǎn)自 Zookeeper 一、分布式協(xié)調(diào)技術(shù) 在給大家介紹ZooKeeper之前先來給大家介紹一種技術(shù)——分布式協(xié)...
    呂品?閱讀 232評(píng)論 0 1
  • -1 我,夏琳在... 那年,他像風(fēng)一樣,突然出現(xiàn)在我的生活中。 他也像風(fēng)一樣,突然在我的...
    c96a5a1b8382閱讀 146評(píng)論 0 0
  • 麗越來越美了。 我知道美麗總需要一個(gè)過程的。就像破繭成蝶之前,毛毛蟲總是需要等待,積蓄力量一樣。 她愛上了一種忙碌...
    水葉子閱讀 283評(píng)論 0 0