ZooKeeper典型應(yīng)用場景

數(shù)據(jù)發(fā)布/訂閱
  • 有兩種設(shè)計模式送淆,分別是push和pull器罐,push是客戶端主動推送給訂閱的客戶端护盈,pull是由客戶端主動發(fā)起請求來獲取最新數(shù)據(jù)
  • 如果把配置信息配置到ZooKeeper,同時添加一個watcher監(jiān)聽雕凹,這樣但凡配置發(fā)生變化辜荠,服務(wù)端都會實時通知到所有客戶端
  • 配置信息可以分為配置文件或者內(nèi)存變量
    • 配置文件可以通過定時輪詢讀取
    • 內(nèi)存比那里可以通過JMX實現(xiàn)對系統(tǒng)運行內(nèi)存變量的更新
DDNS:動態(tài)DNS方案
命名服務(wù)
  • 通過使用命名服務(wù)汽抚,客戶端應(yīng)用能夠根據(jù)指定名字來獲取資源的實體、服務(wù)地址和提供者的信息
分布式協(xié)調(diào)/通知
  • ZooKeeper通過Watcher注冊與異步通知機制伯病,實現(xiàn)分布式協(xié)調(diào)/通知
  • ZooKeeper用來搭建MySQL數(shù)據(jù)復(fù)制總線
  • 任務(wù)注冊時造烁,core進行首先會向/mysql_replicator/tasks節(jié)點注冊任務(wù),比如/mysql_replicator/tasks/copy_hot_item任務(wù)節(jié)點
  • 任務(wù)熱備份:每臺任務(wù)機器(復(fù)制任務(wù)部署的主機)都需要在/mysql_replicator/tasks/copy_hot_item/instances/[Hostname]-1
    • 每臺任務(wù)機器取任務(wù)時午笛,都會判斷節(jié)點的序列號是否是序號最小的子節(jié)點惭蟋,按照“小序號優(yōu)先”策略進行調(diào)度,最小子節(jié)點機器會將自己機器狀態(tài)設(shè)置為RUNNING药磺,其余任務(wù)機器設(shè)置為STANDBY
  • 熱備切換:如果RUNNING機器出現(xiàn)故障告组,所有標(biāo)記為STANDBY的機器按照“小序號優(yōu)先”原則選舉出來執(zhí)行
  • 冷備份掃描:序列號小的core進程會把自己標(biāo)記為RUNNING,其他core進程會把自己創(chuàng)建的子節(jié)點刪除癌佩,然后繼續(xù)掃描下一個task節(jié)點
  • 冷熱備份區(qū)別:熱備份可以實時進行互相協(xié)調(diào)木缝,缺點是資源消耗較大便锨。冷備份使用掃描機制,降低實時性我碟,但是節(jié)省了機器資源
集群管理
  • 了解機器中有多少臺機器鸿秆,對每臺機器運行時狀態(tài)進行數(shù)據(jù)采集,對集群中機器進行上下線操作
    • 但是存在大規(guī)模升級困難怎囚、無法監(jiān)控到具體中間件中消費者和生產(chǎn)者狀態(tài),編程語言多樣性問題
分布式日志采集系統(tǒng)
  • 在每臺手機日志的機器啟動時桥胞,ZooKeeper在收集器節(jié)點下創(chuàng)建對應(yīng)節(jié)點
master選舉
  • 利用關(guān)系型數(shù)據(jù)庫的主鍵特性來保證在集群中選舉出唯一的master恳守。利用ZooKeeper的強一致性,保證客戶端無法重復(fù)創(chuàng)建一個已經(jīng)存在的數(shù)據(jù)節(jié)點
分布式鎖
  • 排它鎖:保證當(dāng)前有且僅有一個事務(wù)獲得鎖贩虾。
    • 獲取排它鎖:在調(diào)用create()接口時催烘,在/exclusive_lock節(jié)點下創(chuàng)建臨時子節(jié)點/exclusive_lock/lock。同時所有沒有獲取到鎖的客戶端需要到/exclusive_lock節(jié)點上注冊一個子節(jié)點變更的Watcher監(jiān)聽缎罢,以便實時監(jiān)聽到lock節(jié)點的變更情況伊群。
    • 釋放排它鎖:當(dāng)前獲取鎖的客戶端機器發(fā)生宕機,或者正常完成業(yè)務(wù)邏輯后策精,客戶端會將自己創(chuàng)建的臨時節(jié)點刪除舰始。
  • 共享鎖:加上排它鎖之后,數(shù)據(jù)對象只對一個事務(wù)可見咽袜,而加上共享鎖之后丸卷,數(shù)據(jù)對所有事務(wù)可見。其他事務(wù)都可以對這個數(shù)據(jù)對象加共享鎖询刹,直到數(shù)據(jù)對象上所有共享鎖被釋放谜嫉。
    • 共享鎖數(shù)據(jù)結(jié)構(gòu):在ZooKeeper上使用數(shù)據(jù)節(jié)點表示一個鎖,類似于“/shared_lock/[Hostname]-請求類型-序號”的臨時順序節(jié)點凹联,例如/shared_lock/192.168.0.1-R-0000000001
    • 獲取共享鎖:如果是讀請求沐兰,創(chuàng)建/shared_lock/192.168.0.1-R-0000000001節(jié)點,如果是寫請求蔽挠,那么創(chuàng)建例如/shared_lock/192.168.0.1-W-0000000001節(jié)點
  • 讀寫順序:創(chuàng)建完共享鎖之后住闯,會獲取/shared_lock下所有子節(jié)點,并對該節(jié)點注冊子節(jié)點變更的Watcher監(jiān)聽象泵。
    • 如果沒有比自己序號小的子節(jié)點寞秃,或者比自己序號小的節(jié)點都是讀請求(可以并發(fā)讀),那么表明自己已經(jīng)成功獲取到了共享鎖偶惠,開始執(zhí)行讀取邏輯春寿。
    • 對于讀請求,如果有比自己序號小的子節(jié)點中有寫請求忽孽,那么就需要進入等待绑改。
    • 對于寫請求谢床,如果自己不是序號最小的請求,那么也需要進入等待厘线。
  • 羊群效應(yīng):在整個分布式鎖競爭過程中识腿,大量的“Watcher通知”和“子節(jié)點列表獲取”兩個操作重復(fù)運行,并且大多數(shù)的運行結(jié)果都是判斷出自己并非序號最小的節(jié)點造壮,從而開始等待下一次通知渡讼。客戶端無端地接收到過多和自己并不相關(guān)的事件通知,同一時間有多個節(jié)點對應(yīng)的客戶端完成事務(wù)或是事務(wù)中斷引起的節(jié)點消失耳璧,ZooKeeper服務(wù)器會在短時間內(nèi)向其他客戶端發(fā)送大量的事件通知——這個就是所謂的羊群效應(yīng)
  • 避免羊群效應(yīng)成箫,降低監(jiān)聽鎖的顆粒度,從監(jiān)聽子節(jié)點列表旨枯,改變成
    • 讀請求:對于比自己序號小的最近一個寫請求節(jié)點注冊Watcher監(jiān)聽
    • 寫請求:向比自己序號小的最近一個節(jié)點注冊Watcher監(jiān)聽
分布式隊列
  • FIFO先入先出隊列:共享鎖的實現(xiàn)
  • Barrier分布式屏障:對子節(jié)點列表變更添加Watcher監(jiān)聽蹬昌,個數(shù)到達N值后,開始業(yè)務(wù)處理攀隔,否則需要進入等待
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末皂贩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子昆汹,更是在濱河造成了極大的恐慌明刷,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筹煮,死亡現(xiàn)場離奇詭異遮精,居然都是意外死亡,警方通過查閱死者的電腦和手機败潦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門本冲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人劫扒,你說我怎么就攤上這事檬洞。” “怎么了沟饥?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵添怔,是天一觀的道長。 經(jīng)常有香客問我贤旷,道長广料,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任幼驶,我火速辦了婚禮艾杏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盅藻。我一直安慰自己购桑,他們只是感情好畅铭,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著勃蜘,像睡著了一般硕噩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缭贡,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天炉擅,我揣著相機與錄音,去河邊找鬼阳惹。 笑死坑资,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的穆端。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼仿便,長吁一口氣:“原來是場噩夢啊……” “哼体啰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嗽仪,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤荒勇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后闻坚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沽翔,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年窿凤,在試婚紗的時候發(fā)現(xiàn)自己被綠了仅偎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡雳殊,死狀恐怖橘沥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情夯秃,我是刑警寧澤座咆,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站仓洼,受9級特大地震影響介陶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜色建,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一哺呜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧镀岛,春花似錦弦牡、人聲如沸友驮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卸留。三九已至,卻和暖如春椭豫,著一層夾襖步出監(jiān)牢的瞬間耻瑟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工赏酥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留喳整,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓裸扶,卻偏偏與公主長得像框都,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子呵晨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

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