Zookeeper 與 Kafka (3) : Zookeeper

0. Chubby 協(xié)議

  • 面向松耦合分布式系統(tǒng)的鎖服務(wù), 解決分布式中的一致性問題.
  • 鎖服務(wù):
    • 粗粒度的鎖服務(wù): 客戶端會(huì)長(zhǎng)時(shí)間持有鎖.
    • 鎖在分布式系統(tǒng)中的用途:
      • 允許客戶端進(jìn)程同步彼此的操作, 并對(duì)當(dāng)前所處環(huán)境的基本信息達(dá)成一致.
  • 通過"文件"實(shí)現(xiàn)鎖:
    • 首先, Chubby 是一個(gè)分布式文件系統(tǒng), 對(duì)其而言: 鎖就是文件.
    • 創(chuàng)建文件就是進(jìn)行"加鎖"操作, 而成功創(chuàng)建文件的服務(wù)器就搶占到了"鎖".
    • 用戶通過打開, 關(guān)閉, 讀取文件獲取共享鎖或者獨(dú)占鎖.
    • 文件有更新時(shí), 會(huì)通知相關(guān)的用戶.
  • 系統(tǒng)架構(gòu)圖


    • 分為兩個(gè)部分: 服務(wù)器稱為Chubby cell;?每個(gè)client都有一個(gè)Chubby library寥粹。
      • 兩端使用RPC 進(jìn)行通信.
      • 客戶端通過Chubby library 的接口調(diào)用, 在 Chubby cell 上創(chuàng)建文件來獲取鎖.
  • 優(yōu)勢(shì)
    • 開發(fā)人員對(duì)基于鎖的接口更為熟悉, 遠(yuǎn)比一致性協(xié)議的庫更為友好.
    • 對(duì)上層應(yīng)用程序的侵入性更小, 易于保持系統(tǒng)已有的程序結(jié)構(gòu)和網(wǎng)絡(luò)通信模式.
    • 便于提供數(shù)據(jù)的發(fā)布與訂閱, 以讓客戶端實(shí)時(shí)地感知到Master 的變化.
    • 允許客戶端在?服務(wù)器上進(jìn)行小文件的讀寫操作.
    • 更便捷地構(gòu)建更可靠的服務(wù). 需要Quorum 機(jī)制進(jìn)行數(shù)據(jù)項(xiàng)值的選定.
  • Master 服務(wù)器
    • master lease
      • mater在運(yùn)行過程中,不斷續(xù)租來延長(zhǎng)lease.
    • 客戶端向記錄有服務(wù)器機(jī)器列表的DNS來請(qǐng)求所有的服務(wù)器,然后逐個(gè)詢問是否為Master
      • 非Master會(huì)將當(dāng)前Master表示回饋給客戶端, 達(dá)到了非常快的定位.
    • 若集群中服務(wù)器崩潰且無法恢復(fù), 則需要加入新機(jī)器, 并更新DNS 列表(啟動(dòng)服務(wù)端程序,更新DNS 上的機(jī)器列表).
      • Master會(huì)周期性輪訓(xùn)DNS 列表, 并很快感知到服務(wù)器地址的變更, 然后通知集群.

1. Ensemble

為了達(dá)到高可用性, 會(huì)同時(shí)運(yùn)行多個(gè)Zookeeper 服務(wù)器, 稱為ensemble.

zookeeper_ensemble.png
  • 復(fù)制服務(wù).
    • 需要服務(wù)器集中中大多數(shù)機(jī)器正常工作, 才能提供服務(wù).
    • 崩潰掉的服務(wù)器, 可以使用crash-recovery 協(xié)議來恢復(fù)并重新進(jìn)入到ensemble.
  • primary 服務(wù)器接收并執(zhí)行所有的請(qǐng)求, 然后傳播執(zhí)行結(jié)果.
    • 當(dāng)primary 崩潰掉后, 執(zhí)行恢復(fù)協(xié)議來統(tǒng)一一致性狀態(tài), 并建立新的primary.
    • 所有讀操作都是in-memory 的, 擁有很高的速度.
  • 每個(gè)服務(wù)器會(huì)在內(nèi)存中維持一個(gè)(代表ensemble 節(jié)點(diǎn)組成的)分布式文件系統(tǒng)的副本.
  • 每個(gè)client 一個(gè)到服務(wù)器的session. 并由ensemble 提供以下特性:
    • 自動(dòng)且透明化的故障轉(zhuǎn)移.
    • 自動(dòng)化的keep-alive.
    • 客戶請(qǐng)求超時(shí).

2. 數(shù)據(jù)一致性

  • 最終一致性(Eventual Consistency)
    • followers may lag(遲于) leader.
  • 順序的一致性(Sequential Consistency)
    • 客戶端的更新請(qǐng)求, 會(huì)以請(qǐng)求發(fā)送的順序來被應(yīng)用.

3. ?節(jié)點(diǎn)

  • 臨時(shí)的(Ephemeral)節(jié)點(diǎn)
    • 會(huì)話過期時(shí)消亡.
    • 由其生命周期決定, 并不會(huì)有子節(jié)點(diǎn).
    • 使用場(chǎng)景: 組成員, leader 選舉.
  • 持久化的(Persistent)節(jié)點(diǎn)可以含有子節(jié)點(diǎn), 類似于目錄.
  • 節(jié)點(diǎn)的用途:
    • 節(jié)點(diǎn)可以持有(小于1M的)數(shù)據(jù), 類似于文件.
    • 提供像 創(chuàng)建,刪除, 檢查存在性的基本節(jié)點(diǎn)操作.
  • 由節(jié)點(diǎn)構(gòu)成Group Membership
    • 提供事件驅(qū)動(dòng)模型, 客戶端可以監(jiān)聽特定節(jié)點(diǎn)的變化.
    • 對(duì)外暴露的是文件系統(tǒng)模型, 有層級(jí)的命名空間.

4. Replication

  • 復(fù)制是以軟件手段來增加數(shù)據(jù)的可用性.
  • 常用于數(shù)據(jù)庫和分布式系統(tǒng)中, 提供合理的性能, 并維持?jǐn)?shù)據(jù)一致性.
  • 在數(shù)據(jù)庫中,使用延遲(deferred)更新模型.
    • 事務(wù)由本地的服務(wù)器(replica manager)處理, 并在提交時(shí), 轉(zhuǎn)發(fā)給其它服務(wù)器.
    • 與之相對(duì)的是立即更新模型, 它會(huì)在所有的服務(wù)器間同步事務(wù).
  • 復(fù)制數(shù)據(jù)庫模型


    • 由一系列運(yùn)行在不同處理器上的process 組成.
    • 每個(gè)process 都有數(shù)據(jù)庫的一個(gè)副本, 被稱為replica manager.
    • 每個(gè)process 有兩種狀態(tài): Up && Down.
  • 終止協(xié)議(Termination Protocol).


    • 向其它process 提交事務(wù), 并確認(rèn)該動(dòng)作.
    • 在CS 分布式系統(tǒng)中, 使用原子廣播(atomic broadcast).
    • 可以向多個(gè)process 發(fā)送同一消息, 并且保證消息順序?yàn)榘l(fā)送順序.
    • certifier 向Data Manager 詢問已提交事務(wù)的信息, 如果該事務(wù)已經(jīng)被驗(yàn)證通過, 它的寫操作會(huì)被提交給Lock Manager.

5. Zookeeper 的典型應(yīng)用場(chǎng)景

5.1 配置中心: 數(shù)據(jù)的發(fā)布/訂閱

  • 推拉結(jié)合的方式:
    • 客戶端注冊(cè)的關(guān)注節(jié)點(diǎn)發(fā)送數(shù)據(jù)變更時(shí), 會(huì)向客戶端發(fā)送watch 事件通知.
    • 客戶端在接收到通知后, 需要主動(dòng)向服務(wù)索取最新數(shù)據(jù).
  • 將配置信息放到Zookeeper上進(jìn)行集中管理,
    • 應(yīng)用在啟動(dòng)時(shí)主動(dòng)向Zookeeper 服務(wù)器索取配置, 同時(shí)監(jiān)聽配置的變化.
    • 典型場(chǎng)景: 全局配置信息
      • 包含: 機(jī)器列表, 運(yùn)行時(shí)開關(guān)配置, 數(shù)據(jù)庫配置.
      • 特性: 數(shù)據(jù)量小; 運(yùn)行時(shí)動(dòng)態(tài)變化; 各機(jī)器共享; 配置一致.

5.2 負(fù)載均衡

  • 動(dòng)態(tài)DNS服務(wù). 超大規(guī)模的分布式(域名到IP的)映射表.
    • 使用本地host 綁定可以實(shí)現(xiàn)域名解析.
      • 但是當(dāng)主機(jī)規(guī)模龐大, 或需要更新域名時(shí),有致命缺陷.
    • Dynamic DNS. 創(chuàng)建一個(gè)節(jié)點(diǎn)進(jìn)行域名配置.
      • 域名解析過程?需要每個(gè)應(yīng)用自己負(fù)責(zé).

5.3 命名服務(wù).

  • 資源定位不是真正的實(shí)體資源.
  • 分布式全局唯一ID的分配機(jī)制.
    • UUID的缺陷:長(zhǎng)度過長(zhǎng),含義不明.
  • 通過調(diào)用Zookeeper節(jié)點(diǎn)創(chuàng)建API可以創(chuàng)建順序節(jié)點(diǎn), 并在API返回值中會(huì)返回這個(gè)節(jié)點(diǎn)的完整名字.
    • 創(chuàng)建順序子節(jié)點(diǎn)時(shí), 自動(dòng)以后綴形式在子節(jié)點(diǎn)上添加序號(hào).

5.4 分布式協(xié)調(diào)/通知

  • MySQL數(shù)據(jù)復(fù)制總線. Mysql_Replicator.
    • 在不同MySQL 實(shí)例間進(jìn)行異步數(shù)據(jù)復(fù)制和數(shù)據(jù)變化通知.
    • 讓不同的機(jī)器都在Zookeeper 的?指定節(jié)點(diǎn)下創(chuàng)建臨時(shí)節(jié)點(diǎn), 不同機(jī)器間根據(jù)這個(gè)臨時(shí)節(jié)點(diǎn)判斷對(duì)應(yīng)的客戶端機(jī)器是否存活.
      • 解耦了檢測(cè)和被檢測(cè)系統(tǒng).
      • 同時(shí)可實(shí)時(shí)地將自己任務(wù)執(zhí)行進(jìn)度寫入臨時(shí)節(jié)點(diǎn).

5.5 集群管理

  • 集群監(jiān)控(運(yùn)行時(shí)狀態(tài)的收集)和集群控制(上下線操作).
  • 基于Agent 體系的集群管理:
    • 每臺(tái)機(jī)器上的Agent 主動(dòng)向指定的監(jiān)控中心系統(tǒng)匯報(bào)狀態(tài).
    • 當(dāng)集群規(guī)模變大后會(huì)造成問題:
      • 大規(guī)模升級(jí)困難; 統(tǒng)一的agent無法滿足定制需求; 編程語言多樣性.
  • 特性:
    • 當(dāng)客戶端對(duì)數(shù)據(jù)節(jié)點(diǎn)注冊(cè)watcher 監(jiān)聽后, 當(dāng)數(shù)據(jù)節(jié)點(diǎn)的內(nèi)容或子節(jié)點(diǎn)列表發(fā)生變更時(shí),會(huì)收到通知.
    • 臨時(shí)節(jié)點(diǎn)會(huì)在客戶端與服務(wù)器的會(huì)話失效后,被自動(dòng)清除.
  • 分布式日志收集系統(tǒng).
    • 把所有需要收集的日志機(jī)器分為多個(gè)組, 每個(gè)組對(duì)應(yīng)一個(gè)后臺(tái)機(jī)器作為收集器.
    • ?特性: 變化的日志源機(jī)器, 變化的收集器機(jī)器.?達(dá)到了快速合理動(dòng)態(tài)地為每個(gè)收集器分配對(duì)應(yīng)的日志源機(jī)器..
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市期虾,隨后出現(xiàn)的幾起案子趴腋,更是在濱河造成了極大的恐慌悯森,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鳖链,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)芙委,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門逞敷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人灌侣,你說我怎么就攤上這事推捐。” “怎么了侧啼?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵牛柒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我痊乾,道長(zhǎng)皮壁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任哪审,我火速辦了婚禮蛾魄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘协饲。我一直安慰自己畏腕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布茉稠。 她就那樣靜靜地躺著描馅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪而线。 梳的紋絲不亂的頭發(fā)上铭污,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音膀篮,去河邊找鬼嘹狞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛誓竿,可吹牛的內(nèi)容都是我干的磅网。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼筷屡,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼涧偷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起毙死,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤燎潮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后扼倘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體确封,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了爪喘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颜曾。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖腥放,靈堂內(nèi)的尸體忽然破棺而出泛啸,到底是詐尸還是另有隱情,我是刑警寧澤秃症,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布候址,位于F島的核電站,受9級(jí)特大地震影響种柑,放射性物質(zhì)發(fā)生泄漏岗仑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一聚请、第九天 我趴在偏房一處隱蔽的房頂上張望荠雕。 院中可真熱鬧,春花似錦驶赏、人聲如沸炸卑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盖文。三九已至,卻和暖如春蚯姆,著一層夾襖步出監(jiān)牢的瞬間五续,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工龄恋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疙驾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓郭毕,卻偏偏與公主長(zhǎng)得像它碎,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子显押,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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