【Zookeeper系列】基本介紹

在學(xué)習(xí)一樣技術(shù)之前,咱們需要先想一下,為什么需要學(xué)這一門技術(shù)雹顺?

許多分布式系統(tǒng)都是基于ZK作為底層核心組件對外提供服務(wù),比如Kafka中廊遍,將Broker注冊到ZK中嬉愧,此時ZK充當(dāng)著多重角色,比如注冊中心喉前、選舉等英染;再比如說,我公司目前很多項目都是Dubbo被饿,都是需要基于ZK實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)和注冊四康。

另外,ZK內(nèi)其實(shí)也有很多優(yōu)秀的算法和設(shè)計思想狭握,熟悉ZK源碼闪金,也可以提升自己的“內(nèi)功”。

如何快速入門Zookeeper呢论颅?最簡單的方式就是直接看 Zookeeper官網(wǎng) 啦哎垦!建議讀者多參考官方文檔和博客內(nèi)容一起食用,效果更佳噢~

Zookeeper是什么恃疯?

字面上意思可以認(rèn)為是“動物園管理員”漏设!為什么會有這一個名字呢?先來看下 Hadoop 的生態(tài)系統(tǒng)圖
HADOOP-ECOSYSTEM-Edureka.png

Zookeeper的 Logo 看起來就像個“鏟屎官”今妄,服務(wù)動物園內(nèi)的動物們郑口。

“A Distributed Coordination Service for Distributed Applications”鸳碧,這是摘取官方的解釋,我們可以得知Zookeeper 是一個為分布式框架提供協(xié)調(diào)服務(wù)的東東犬性。

舉些例子瞻离,有哪些分布式框架使用Zookeeper:

  • Kafka(最新版本中其實(shí)去掉ZK作為注冊中心)

  • Hbase

  • Dubbo

  • HDFS

  • 等等

Zookeeper的常用使用場景有哪些?

  • 分布式鎖

  • 注冊中心

  • Leader選舉

ZK的作用不止上面幾個乒裆,其實(shí)還可以做到負(fù)載均衡套利、統(tǒng)一配置、分布式隊列等鹤耍,但使用場景相對少肉迫,企業(yè)級系統(tǒng)中,會使用其他更加專業(yè)的框架組件稿黄。

分布式鎖昂拂、注冊中心、Leader選舉將會是ZK系列中抛猖,重點(diǎn)分享的內(nèi)容格侯,敬請期待哈~

重點(diǎn)概念

在ZK中,需要先了解一些專業(yè)名詞的概念财著,但不會一下子都列出來联四,當(dāng)之后遇到的時候,再重點(diǎn)分析...

1. ZK角色

在ZK集群中撑教,會分為Leader朝墩、FollowerObserver角色。

Leader作為集群的大佬伟姐,承擔(dān)寫請求和部分讀請求收苏;Follower作為Leader的小弟,將會承擔(dān)部分讀請求愤兵,當(dāng)接收到寫請求的時候會轉(zhuǎn)發(fā)給Leader鹿霸,由Leader處理寫請求;Observer就有點(diǎn)特殊秆乳,Observer節(jié)點(diǎn)不參與選舉和消息過半機(jī)制懦鼠,這個不清楚的讀者可以暫時有個記憶就行,之后遇到會重點(diǎn)說明屹堰。

ZK集群處理讀寫請求概覽.png

2. 節(jié)點(diǎn)類型

  • 持久節(jié)點(diǎn)(PERSISTENT)

  • 持久順序節(jié)點(diǎn)(PERSISTENT_SEQUENTIAL)

  • 臨時節(jié)點(diǎn)(EPHEMERAL)

  • 順序臨時節(jié)點(diǎn)(EPHEMERAL_SEQUENTIAL)

實(shí)際上肛冶,節(jié)點(diǎn)只分為持久節(jié)點(diǎn)和臨時節(jié)點(diǎn),但有些場景需要保證順序扯键,所以就會在持久或臨時節(jié)點(diǎn)的基礎(chǔ)上睦袖,添加序號(遞增的方式),形成持久順序節(jié)點(diǎn)和臨時順序節(jié)點(diǎn)荣刑。</br> 那么什么是持久節(jié)點(diǎn)馅笙,什么是臨時節(jié)點(diǎn)呢伦乔?最直觀的一個現(xiàn)象就是,每個ZK客戶端連接ZK集群后延蟹,都會產(chǎn)生一個節(jié)點(diǎn),如果ZK客戶端下線后叶堆,節(jié)點(diǎn)還存在的就是持久節(jié)點(diǎn)阱飘,若ZK客戶端下線后節(jié)點(diǎn)也隨著消失,那么該節(jié)點(diǎn)就是臨時節(jié)點(diǎn)虱颗。

3. 監(jiān)聽回調(diào)

在ZK客戶端啟動前沥匈,可以自定義監(jiān)聽回調(diào)函數(shù),這個有什么作用呢忘渔?客戶端啟動后會將監(jiān)聽事件發(fā)送給Zookeeper集群高帖,Zookeeper集群中有一個用于記錄監(jiān)聽事件的列表,當(dāng)客戶端監(jiān)聽的目錄節(jié)點(diǎn)發(fā)生變化畦粮,如節(jié)點(diǎn)數(shù)據(jù)變更散址、節(jié)點(diǎn)增刪等,就會通過ZK集群的監(jiān)聽列表宣赔,找到對應(yīng)的客戶端回調(diào)監(jiān)聽函數(shù)预麸,那么客戶端這邊就可以根據(jù)業(yè)務(wù)場景,做出相應(yīng)的動作儒将。

4. ZAB協(xié)議

ZAB協(xié)議的全稱是:ZooKeeper Atomic Broadcast吏祸。ZAB是Zookeeper保證數(shù)據(jù)一致性的核心算法。借鑒了Paxos算法的思想钩蚊,特地為Zookeeper設(shè)計的支持崩潰恢復(fù)的原子廣播協(xié)議贡翘。其包括兩種基本模式:消息廣播崩潰恢復(fù)

消息廣播指的是,集群中只有一個Leader處理寫請求砰逻,并將寫請求的事件廣播給所有Follower鸣驱,且能夠保證數(shù)據(jù)不丟失。(也就是說蝠咆,消息的寫入是原子性的丐巫,因?yàn)橹荒苡衛(wèi)eader寫入)

崩潰恢復(fù)指的是,當(dāng)ZK集群剛啟動還沒選舉出Leader或Leader因故障勺美、重啟递胧、網(wǎng)絡(luò)等原因的時候,ZAB協(xié)議會進(jìn)入崩潰恢復(fù)模式赡茸,其目的就是為了選舉新的Leader缎脾,且保證新Leader的數(shù)據(jù)是最新的,這樣就能夠避免因?yàn)長eader故障而導(dǎo)致單點(diǎn)丟失消息的情況占卧,至于ZAB具體的原理遗菠,各位可以先看下以下參考文章联喘,后續(xù)有機(jī)會我再專門寫一篇關(guān)于 ZAB 協(xié)議的文章~

ZAB 協(xié)議參考文章

Zookeeper架構(gòu)特點(diǎn)

數(shù)據(jù)模型

ZK內(nèi)的數(shù)據(jù)模型結(jié)構(gòu)和Unix文件系統(tǒng)非常相似,是一個有層級關(guān)系的樹形數(shù)據(jù)結(jié)構(gòu)辙纬。在ZK內(nèi)豁遭,樹形的數(shù)據(jù)結(jié)構(gòu)使用稱為ZNode節(jié)點(diǎn)保存數(shù)據(jù),ZNode是ZK中數(shù)據(jù)結(jié)構(gòu)最小單元贺拣,不僅能夠保存數(shù)據(jù)蓖谢,還能掛載子節(jié)點(diǎn),形成一個有層次關(guān)系的樹譬涡。

值得注意的是闪幽,ZNode的創(chuàng)建是純內(nèi)存操作的,所以速度很快涡匀,然后在ZK內(nèi)部會定期將ZNode的數(shù)據(jù)持久化到磁盤上盯腌。

數(shù)據(jù)模型.png

集群部署

眾所周知,在實(shí)際的企業(yè)應(yīng)用陨瘩,面對高并發(fā)的場景下腕够,肯定是不能單節(jié)點(diǎn)部署,而是通過集群部署保證高并發(fā)舌劳、高性能燕少、高可用(簡稱三高)。

高性能:由于ZNode節(jié)點(diǎn)是純內(nèi)存操作蒿囤,只要ZK部署在高配置的服務(wù)器中客们,三臺ZK服務(wù)器抗住每秒幾萬的請求都是沒問題的。 高可用:只要部署奇數(shù)的服務(wù)器集群(比如3臺材诽、5臺底挫、11臺機(jī)器),只要不超過一半的服務(wù)器宕機(jī)脸侥,都能保證ZK集群可用建邓。 高并發(fā):因?yàn)閆Node是純內(nèi)存操作,所以在寫數(shù)據(jù)的時候睁枕,速度是很快官边;而ZK集群中Leader和Follower節(jié)點(diǎn)都能處理讀請求,所以ZK集群高并發(fā)能力是很強(qiáng)的外遇。

順序一致性

基于ZAB協(xié)議注簿,寫請求統(tǒng)一由Leader服務(wù)器處理,然后由Leader將寫數(shù)據(jù)的請求廣播給其他Follower跳仿。

但會不會由于種種原因诡渴,如網(wǎng)絡(luò)波動、Leader腦裂菲语、Follower宕機(jī)等妄辩,導(dǎo)致消息不一致惑灵?

實(shí)際上,在ZK中采用2PC兩階段提交的思想眼耀,結(jié)合ZAB消息廣播保證數(shù)據(jù)一致性英支。值得注意的是,Zookeeper只能保證最終一致性哮伟,并不能保證強(qiáng)一致性

那么具體是怎么保證數(shù)據(jù)最終一致性的呢干花?感興趣的讀者可以看下我另外一篇拙作【TODO...】

參考資料:

《從Paxos到Zookeeper分布式一致性原理與實(shí)踐》

如果覺得文章不錯的話,麻煩點(diǎn)個贊哈澈吨,你的鼓勵就是我的動力把敢!對于文章有哪里不清楚或者有誤的地方寄摆,歡迎在評論區(qū)留言~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谅辣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子婶恼,更是在濱河造成了極大的恐慌桑阶,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勾邦,死亡現(xiàn)場離奇詭異蚣录,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)眷篇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進(jìn)店門萎河,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蕉饼,你說我怎么就攤上這事虐杯。” “怎么了昧港?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵擎椰,是天一觀的道長。 經(jīng)常有香客問我创肥,道長达舒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任叹侄,我火速辦了婚禮巩搏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘趾代。我一直安慰自己塔猾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布稽坤。 她就那樣靜靜地躺著丈甸,像睡著了一般糯俗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上睦擂,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天得湘,我揣著相機(jī)與錄音,去河邊找鬼顿仇。 笑死淘正,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的臼闻。 我是一名探鬼主播鸿吆,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼述呐!你這毒婦竟也來了惩淳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤乓搬,失蹤者是張志新(化名)和其女友劉穎思犁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體进肯,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡激蹲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了江掩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片学辱。...
    茶點(diǎn)故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖环形,靈堂內(nèi)的尸體忽然破棺而出策泣,到底是詐尸還是另有隱情芹助,我是刑警寧澤超棺,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站泳炉,受9級特大地震影響拗军,放射性物質(zhì)發(fā)生泄漏任洞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一发侵、第九天 我趴在偏房一處隱蔽的房頂上張望交掏。 院中可真熱鬧,春花似錦刃鳄、人聲如沸盅弛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挪鹏。三九已至见秽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間讨盒,已是汗流浹背解取。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留返顺,地道東北人禀苦。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像遂鹊,于是被迫代替她去往敵國和親振乏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評論 2 349

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