為什么分布式系統(tǒng)需要zookeeper?

很多中間件灿椅,比如Kafka、Hadoop九孩、HBase先馆,都用到了 Zookeeper,于是很多人就會(huì)去了解這個(gè) Zookeeper 到底是什么躺彬,為什么它在分布式系統(tǒng)里有著如此無可替代的地位煤墙。

其實(shí)學(xué)任何一項(xiàng)技術(shù),首先都要弄明白宪拥,為什么需要這項(xiàng)技術(shù)仿野。

so,我們?yōu)槭裁葱枰?Zookeeper?

直白點(diǎn)兒說,我們之所以需要zookeeper她君,就是我們需要一個(gè)用起來像單機(jī)但是又比單機(jī)更可靠的東西脚作。

下面我們舉一個(gè)可能不太恰當(dāng),但是相對(duì)形象的例子來具體說明:

一個(gè)團(tuán)隊(duì)里面缔刹,需要一個(gè)leader球涛,leader是干嘛用的?管理什么的咱不說校镐,就說如果外面的人亿扁,想問關(guān)于這個(gè)團(tuán)隊(duì)的一切事情,首先就會(huì)去找這個(gè)leader鸟廓,因?yàn)樗赖淖疃啻幼#宜幕卮鹱羁孔V。

比如產(chǎn)品經(jīng)理小P過來要人引谜,作為leader牍陌,老L發(fā)現(xiàn)小A最近沒有項(xiàng)目安排,于是把小A安排給了小P的項(xiàng)目员咽;

過了一會(huì)毒涧,另一個(gè)產(chǎn)品小Q也過來要人,老L發(fā)現(xiàn)剛剛把小A安排走了贝室,已經(jīng)沒人契讲,于是就跟小Q說,人都被你們產(chǎn)品要走了档玻,你們產(chǎn)品自己去協(xié)調(diào)去怀泊。

為什么分布式系統(tǒng)需要zookeeper?

如果老L這時(shí)候忘了小耀已經(jīng)被安排走了茫藏,把小耀也分配給小西误趴,那到時(shí)兩個(gè)產(chǎn)品就要打架了。

這就是leader在團(tuán)隊(duì)里的協(xié)調(diào)作用务傲。

同樣的凉当,在分布式系統(tǒng)中枣申,也需要這樣的協(xié)調(diào)者,來應(yīng)答系統(tǒng)下各個(gè)節(jié)點(diǎn)的請(qǐng)求看杭。

比如我們搭建了一個(gè)數(shù)據(jù)庫(kù)集群忠藤,里面有一個(gè)Master,多個(gè)Slave楼雹,Master負(fù)責(zé)寫模孩,Slave只讀,我們需要一個(gè)系統(tǒng)贮缅,來告訴客戶端榨咐,哪個(gè)是Master。

有人說谴供,很簡(jiǎn)單块茁,我們把這個(gè)信息寫到一個(gè)Java服務(wù)器的內(nèi)存就好了,用一個(gè)map桂肌,

key:master数焊,

value:master機(jī)器對(duì)應(yīng)的ip

為什么分布式系統(tǒng)需要zookeeper?

但是別忘了,這是個(gè)單機(jī)崎场,一旦這個(gè)機(jī)器掛了佩耳,就完蛋了,客戶端將無法知道到底哪個(gè)是Master照雁。

于是開始進(jìn)行拓展蚕愤,拓展成三臺(tái)服務(wù)器的集群。

為什么分布式系統(tǒng)需要zookeeper?

這下問題來了饺蚊,如果我在其中一臺(tái)機(jī)器修改了Master的ip萍诱,數(shù)據(jù)還沒同步到其他兩臺(tái),這時(shí)候客戶端過來查詢污呼,如果查詢走的是另外兩臺(tái)還沒有同步到的機(jī)器裕坊,就會(huì)拿到舊的數(shù)據(jù),往已經(jīng)不是master的機(jī)器寫數(shù)據(jù)燕酷。

所以我們需要這個(gè)存儲(chǔ)master信息的服務(wù)器集群籍凝,做到當(dāng)信息還沒同步完成時(shí),不對(duì)外提供服務(wù)苗缩,阻塞住查詢請(qǐng)求饵蒂,等待信息同步完成,再給查詢請(qǐng)求返回信息酱讶。

這樣一來退盯,請(qǐng)求就會(huì)變慢,變慢的時(shí)間取決于什么時(shí)候這個(gè)集群認(rèn)為數(shù)據(jù)同步完成了。

假設(shè)這個(gè)數(shù)據(jù)同步時(shí)間無限短渊迁,比如是1微妙慰照,可以忽略不計(jì),那么其實(shí)這個(gè)分布式系統(tǒng)琉朽,就和我們之前單機(jī)的系統(tǒng)一樣毒租,既可以保證數(shù)據(jù)的一致,又讓外界感知不到請(qǐng)求阻塞箱叁,同時(shí)墅垮,又不會(huì)有SPOF(Single Point of Failure)的風(fēng)險(xiǎn),即不會(huì)因?yàn)橐慌_(tái)機(jī)器的宕機(jī)耕漱,導(dǎo)致整個(gè)系統(tǒng)不可用噩斟。

這樣的系統(tǒng),就叫分布式協(xié)調(diào)系統(tǒng)孤个。誰能把這個(gè)數(shù)據(jù)同步的時(shí)間壓縮的更短剃允,誰的請(qǐng)求響應(yīng)就更快,誰就更出色齐鲤,Zookeeper就是其中的佼佼者斥废。

它用起來像單機(jī)一樣,能夠提供數(shù)據(jù)強(qiáng)一致性给郊,但是其實(shí)背后是多臺(tái)機(jī)器構(gòu)成的集群牡肉,不會(huì)有SPOF。

其實(shí)就是CAP理論中淆九,滿足CP统锤,不滿足A的那類分布式系統(tǒng)。

如果把各個(gè)節(jié)點(diǎn)比作各種小動(dòng)物炭庙,那協(xié)調(diào)者饲窿,就是動(dòng)物園管理員,這也就是Zookeeper名稱的由來了焕蹄,從名字就可以看出來它的雄心勃勃逾雄。

講完了上面這些,現(xiàn)在再來看官網(wǎng)這句話腻脏,就很能理解了:

ZooKeeper: A Distributed Coordination Service for Distributed Applications

當(dāng)然還有這句:

為什么分布式系統(tǒng)需要zookeeper?

而以往的很多ZK教程鸦泳,上來就是“Zookeeper是開源的分布式應(yīng)用協(xié)調(diào)系統(tǒng)”blabla,很多像我這樣的小年輕看到就會(huì)很費(fèi)解永品,到底什么是分布式協(xié)調(diào)做鹰,為什么分布式就需要協(xié)調(diào) …

上面只是回答了我自己提出的問題,為什么需要Zookeeper鼎姐,或者說钾麸,為什么需要分布式協(xié)調(diào)系統(tǒng)掉弛,如果想進(jìn)一步學(xué)習(xí) ZK,你還需要了解下 Zookeeper 的內(nèi)部實(shí)現(xiàn)原理喂走。

比如 ZK 的宏觀結(jié)構(gòu):

為什么分布式系統(tǒng)需要zookeeper?

到 ZK 的微觀:

為什么分布式系統(tǒng)需要zookeeper?

再到 ZK 是如何實(shí)現(xiàn)高性能的強(qiáng)一致的,即ZAB協(xié)議的原理谋作,很多教程上來就開始介紹ZAB協(xié)議芋肠,很容易讓人一頭霧水,不知道為什么需要這樣一個(gè)分布式一致性協(xié)議遵蚜,有了上述介紹的背景帖池,就好懂許多。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吭净,一起剝皮案震驚了整個(gè)濱河市睡汹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌寂殉,老刑警劉巖囚巴,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異友扰,居然都是意外死亡彤叉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門村怪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秽浇,“玉大人,你說我怎么就攤上這事甚负〖砘溃” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵梭域,是天一觀的道長(zhǎng)斑举。 經(jīng)常有香客問我,道長(zhǎng)病涨,這世上最難降的妖魔是什么懂昂? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮没宾,結(jié)果婚禮上凌彬,老公的妹妹穿的比我還像新娘。我一直安慰自己循衰,他們只是感情好铲敛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著会钝,像睡著了一般伐蒋。 火紅的嫁衣襯著肌膚如雪工三。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天先鱼,我揣著相機(jī)與錄音俭正,去河邊找鬼。 笑死焙畔,一個(gè)胖子當(dāng)著我的面吹牛掸读,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宏多,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼儿惫,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了伸但?” 一聲冷哼從身側(cè)響起肾请,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎更胖,沒想到半個(gè)月后铛铁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡却妨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年避归,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片管呵。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡梳毙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捐下,到底是詐尸還是另有隱情账锹,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布坷襟,位于F島的核電站奸柬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏婴程。R本人自食惡果不足惜廓奕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望档叔。 院中可真熱鬧桌粉,春花似錦、人聲如沸衙四。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽传蹈。三九已至押逼,卻和暖如春步藕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挑格。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工碌燕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锦担,地道東北人遏餐。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓剃斧,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親显歧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354