zookeeper的設(shè)計(jì)原理及使用場(chǎng)景

zookeeper 作為一個(gè)分布式的服務(wù)框架,主要用來解決分布式集群中應(yīng)用系統(tǒng)的一致性問題,解決分布式環(huán)境下多個(gè)進(jìn)程或者多個(gè)中間件之間的同步控制,使有序訪問某類資源抽活。它能提供基于類似于文件系統(tǒng)的目錄節(jié)點(diǎn)樹方式的數(shù)據(jù)存儲(chǔ)。zookeeper創(chuàng)建znode節(jié)點(diǎn)時(shí)锰什,根據(jù)指定的類型mode不同下硕,可以創(chuàng)建三種不同節(jié)點(diǎn):臨時(shí)節(jié)點(diǎn)、持久化節(jié)點(diǎn)和有序節(jié)點(diǎn)汁胆。

持久節(jié)點(diǎn)是一種非常有用的節(jié)點(diǎn)梭姓,持久節(jié)點(diǎn)的刪除只能通過調(diào)用delete來進(jìn)行刪除,一般用來保存系統(tǒng)級(jí)的配置信息嫩码,一般項(xiàng)目中會(huì)有單獨(dú)的系統(tǒng)來維護(hù)配置信息糊昙。

臨時(shí)節(jié)點(diǎn)傳達(dá)了應(yīng)用某些方面的信息,當(dāng)前會(huì)話session有效時(shí)znode節(jié)點(diǎn)信息存在谢谦,如果會(huì)話session過期或者主動(dòng)關(guān)閉會(huì)話臨時(shí)節(jié)點(diǎn)將會(huì)被刪除释牺。也就是一個(gè)臨時(shí)的節(jié)點(diǎn)在以下兩種情況下將被刪除:當(dāng)創(chuàng)建者的客戶端的會(huì)話因?yàn)槌瑫r(shí)或者主動(dòng)關(guān)閉而終止;當(dāng)某個(gè)客戶端主動(dòng)刪除該節(jié)點(diǎn)回挽。

一個(gè)znode還可以設(shè)置為有序節(jié)點(diǎn)没咙,一個(gè)有序的znode節(jié)點(diǎn)被分配唯一一個(gè)單調(diào)遞增的整數(shù)。當(dāng)創(chuàng)建有序節(jié)點(diǎn)時(shí)千劈,一個(gè)序號(hào)會(huì)被追加到路徑之后祭刚。例如,如果一個(gè)客戶端創(chuàng)建了一個(gè)有序znode節(jié)點(diǎn),其路徑為/tasks/task-涡驮,那么zookeeper將會(huì)分配一個(gè)序號(hào)暗甥,如1,并將這個(gè)數(shù)字追加到路徑之后捉捅,最后該節(jié)點(diǎn)的名稱/tasks/task-1撤防。

基于不同的znode節(jié)點(diǎn)特性,zookeeper可以解決多種場(chǎng)景問題棒口,dubbo+zookeeper(服務(wù)注冊(cè)和發(fā)現(xiàn))寄月、配置中心和分布式鎖。

一无牵、注冊(cè)中心

可以借助zookeeper實(shí)現(xiàn)服務(wù)注冊(cè)和發(fā)現(xiàn)功能漾肮,最常見的組合是dubbo+zookeeper。在一個(gè)分布式系統(tǒng)中茎毁,服務(wù)提供者向zookeeper注冊(cè)中心注冊(cè)服務(wù)克懊,而服務(wù)消費(fèi)者從注冊(cè)中心訂閱服務(wù)。zookeeper作為服務(wù)注冊(cè)中心七蜘,對(duì)服務(wù)進(jìn)行統(tǒng)一管理保檐,提供地址服務(wù)。

二崔梗、配置中心

應(yīng)用程序中配置信息包括application.properties、數(shù)據(jù)庫(kù)配置垒在、應(yīng)用邏輯相關(guān)的常量配置蒜魄、開關(guān)配置等,常用的配置方式是把這些配置信息放到各個(gè)應(yīng)用程序中场躯,這樣當(dāng)應(yīng)用程序的配置信息發(fā)生變化時(shí)每次都需要重啟應(yīng)用程序谈为。為了解決這類問題,可以把配置信息統(tǒng)一放至動(dòng)態(tài)配置中心踢关,由專門應(yīng)用進(jìn)行管理伞鲫,zookeeper可以充當(dāng)動(dòng)態(tài)配置中心角色,專門存放項(xiàng)目中配置信息签舞。應(yīng)用啟動(dòng)時(shí)從配置中心讀取配置信息并存放至應(yīng)用程序緩存中秕脓,應(yīng)用程序使用配置信息時(shí)直接從本地緩存獲取,有效避免了多次遠(yuǎn)程配置信息獲取儒搭。為使各應(yīng)用程序中配置信息與配置中心保持一致吠架,可以采用啟動(dòng)時(shí)全量同步、定時(shí)增量同步搂鲫、設(shè)置監(jiān)聽傍药、應(yīng)急同步等多種手段。同時(shí)當(dāng)配置中心配置發(fā)生變化時(shí)會(huì)push推送到各個(gè)應(yīng)用。

三拐辽、分布式鎖

利用zookeeper節(jié)點(diǎn)的唯一性特點(diǎn)可以實(shí)現(xiàn)分布式鎖拣挪,znode節(jié)點(diǎn)在同一級(jí)別或路徑下具有唯一性,如果節(jié)點(diǎn)已經(jīng)存在俱诸,再次創(chuàng)建相同節(jié)點(diǎn)(set /lock 1)時(shí)就會(huì)報(bào)異常菠劝。假如都往zookeeper上注冊(cè)lock節(jié)點(diǎn)(set /lock 1),根據(jù)節(jié)點(diǎn)唯一性,只有一個(gè)應(yīng)用創(chuàng)建節(jié)點(diǎn)成功乙埃,如果該節(jié)點(diǎn)已經(jīng)存在闸英,說明其它應(yīng)用已經(jīng)成功注冊(cè)一個(gè)節(jié)點(diǎn)(已經(jīng)獲取了鎖)。所以分布式應(yīng)用程序可以根據(jù)zookeeper的znode節(jié)點(diǎn)的唯一性特性實(shí)現(xiàn)分布式鎖功能介袜。

四甫何、集群管理

常見組合是zookeeper+kafka,由zookeeper實(shí)現(xiàn)kafka集群管理遇伞。zookeeper實(shí)現(xiàn)高可用集群方式是中心式集群辙喂,一個(gè)中心節(jié)點(diǎn)leader,多個(gè)從節(jié)點(diǎn)follower鸠珠。當(dāng)leader節(jié)點(diǎn)出現(xiàn)異常時(shí)巍耗,可以從follower節(jié)點(diǎn)選舉出一個(gè)新的leader節(jié)點(diǎn)。zookeeper集群為保障高可用的特性渐排,所有事務(wù)請(qǐng)求(add/set/delete)統(tǒng)一由leader節(jié)點(diǎn)處理炬太,如果事務(wù)請(qǐng)求到達(dá)follower節(jié)點(diǎn),則follower節(jié)點(diǎn)會(huì)將事務(wù)請(qǐng)求轉(zhuǎn)發(fā)給leader節(jié)點(diǎn)進(jìn)行處理驯耻,leader處理完事務(wù)請(qǐng)求后再進(jìn)行分發(fā)亲族,以確保數(shù)據(jù)同步和一致性。非事務(wù)請(qǐng)求(查詢請(qǐng)求)任何節(jié)點(diǎn)都可以處理可缚。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末霎迫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子帘靡,更是在濱河造成了極大的恐慌知给,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件描姚,死亡現(xiàn)場(chǎng)離奇詭異涩赢,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)轩勘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門谒主,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赃阀,你說我怎么就攤上這事霎肯∏嬗保” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵观游,是天一觀的道長(zhǎng)搂捧。 經(jīng)常有香客問我,道長(zhǎng)懂缕,這世上最難降的妖魔是什么允跑? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮搪柑,結(jié)果婚禮上聋丝,老公的妹妹穿的比我還像新娘。我一直安慰自己工碾,他們只是感情好弱睦,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渊额,像睡著了一般况木。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上旬迹,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天火惊,我揣著相機(jī)與錄音,去河邊找鬼奔垦。 笑死屹耐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的椿猎。 我是一名探鬼主播惶岭,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼鸵贬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起脖捻,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤阔逼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后地沮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗜浮,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年摩疑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了危融。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡雷袋,死狀恐怖吉殃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤蛋勺,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布瓦灶,位于F島的核電站,受9級(jí)特大地震影響抱完,放射性物質(zhì)發(fā)生泄漏贼陶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一巧娱、第九天 我趴在偏房一處隱蔽的房頂上張望碉怔。 院中可真熱鬧,春花似錦禁添、人聲如沸撮胧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)趴樱。三九已至,卻和暖如春酪捡,著一層夾襖步出監(jiān)牢的瞬間叁征,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工逛薇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捺疼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓永罚,卻偏偏與公主長(zhǎng)得像啤呼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子呢袱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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