Zookeeper 工作流

2020-09-04 13:59 更新

一旦ZooKeeper集合啟動,它將等待客戶端連接。客戶端將連接到ZooKeeper集合中的一個(gè)節(jié)點(diǎn)。它可以是領(lǐng)導(dǎo)或跟隨者節(jié)點(diǎn)。一旦客戶端被連接,節(jié)點(diǎn)將向特定客戶端分配會話ID并向該客戶端發(fā)送確認(rèn)。如果客戶端沒有收到確認(rèn),它將嘗試連接ZooKeeper集合中的另一個(gè)節(jié)點(diǎn)。 一旦連接到節(jié)點(diǎn),客戶端將以有規(guī)律的間隔向節(jié)點(diǎn)發(fā)送心跳,以確保連接不會丟失。

  • 如果客戶端想要讀取特定的znode,它將會向具有znode路徑的節(jié)點(diǎn)發(fā)送讀取請求,并且節(jié)點(diǎn)通過從其自己的數(shù)據(jù)庫獲取來返回所請求的znode。為此,在ZooKeeper集合中讀取速度快。

  • 如果客戶端想要將數(shù)據(jù)存儲在ZooKeeper集合中,則會將znode路徑和數(shù)據(jù)發(fā)送到服務(wù)器。連接的服務(wù)器將該請求轉(zhuǎn)發(fā)給領(lǐng)導(dǎo)者,然后領(lǐng)導(dǎo)者將向所有的跟隨著重新發(fā)出寫入請求。如果只有大部分節(jié)點(diǎn)成功響應(yīng),而寫入請求成功,則成功返回代碼將被發(fā)送到客戶端。 否則,寫入請求失敗。絕大多數(shù)節(jié)點(diǎn)被稱為 Quorum 。

ZooKeeper集群中的節(jié)點(diǎn)

ZooKeeper集合中可以有不同數(shù)量的節(jié)點(diǎn)。那么,讓我們分析一下在ZooKeeper工作流中更改節(jié)點(diǎn)的效果:

  • 如果我們有單個(gè)節(jié)點(diǎn)那么當(dāng)該節(jié)點(diǎn)失敗時(shí),ZooKeeper集群就會失效。這就是為什么不建議在生產(chǎn)環(huán)境中使用它,因?yàn)樗鼤?dǎo)致"單點(diǎn)故障"。

  • 如果我們有兩個(gè)節(jié)點(diǎn)和一個(gè)節(jié)點(diǎn)故障,我們就沒有多數(shù),因?yàn)閮蓚€(gè)節(jié)點(diǎn)中有一個(gè)不是多數(shù)節(jié)點(diǎn)。

  • 如果我們有三個(gè)節(jié)點(diǎn)而一個(gè)節(jié)點(diǎn)故障,那么我們有大多數(shù),因此,這是最低要求。ZooKeeper集群在實(shí)際生產(chǎn)環(huán)境中必須至少有三個(gè)節(jié)點(diǎn)。

  • 如果我們有四個(gè)節(jié)點(diǎn)而兩個(gè)節(jié)點(diǎn)故障,它將再次故障。類似于有三個(gè)節(jié)點(diǎn),額外節(jié)點(diǎn)不用于任何目的,因此,最好添加奇數(shù)的節(jié)點(diǎn),例如3,5,7。

我們知道寫入過程比ZooKeeper集合中的讀取過程昂貴,因?yàn)樗泄?jié)點(diǎn)都需要在數(shù)據(jù)庫中寫入相同的數(shù)據(jù)。因此,對于平衡的環(huán)境擁有較少數(shù)量(例如3,5,7)的節(jié)點(diǎn)比擁有大量的節(jié)點(diǎn)要好。

下圖描述了ZooKeeper工作流,后面的表說明了它的不同組件。

Zookeeper - 工作流

組件描述
寫入(write)寫入過程由leader節(jié)點(diǎn)處理。leader將寫入請求轉(zhuǎn)發(fā)到所有znode,并等待znode的回復(fù)。如果一半的znode回復(fù),則寫入過程完成。
讀?。╮ead)讀取由特定連接的znode在內(nèi)部執(zhí)行,因此不需要與集群進(jìn)行交互。
復(fù)制數(shù)據(jù)庫(replicated database)它用于在zookeeper中存儲數(shù)據(jù)。每個(gè)znode都有自己的數(shù)據(jù)庫,每個(gè)znode在一致性的幫助下每次都有相同的數(shù)據(jù)。
領(lǐng)導(dǎo)者(Leader)Leader是負(fù)責(zé)處理寫入請求的Znode。
跟隨者(Follower)follower從客戶端接收寫入請求,并將它們轉(zhuǎn)發(fā)到leader znode。
請求處理器(request processor)只存在于leader節(jié)點(diǎn)。它管理來自follower節(jié)點(diǎn)的寫入請求。
原子廣播(atomic broadcasts)負(fù)責(zé)廣播從leader節(jié)點(diǎn)到follower節(jié)點(diǎn)的變化。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號