新鄉(xiāng)網(wǎng)站建設(shè)哪家正規(guī)不需要驗(yàn)證碼的廣告平臺(tái)
以一張具有代表性的架構(gòu)風(fēng)格展開本篇論述
一般在這種架構(gòu)中,主節(jié)點(diǎn)所負(fù)責(zé)的工作主要有
- 跟蹤從節(jié)點(diǎn)狀態(tài)
- 分配任務(wù)到從節(jié)點(diǎn),并跟蹤任務(wù)的有效性(任務(wù)是否正常執(zhí)行完成)
此時(shí),我們需要關(guān)注三個(gè)問題
- 主節(jié)點(diǎn)崩潰
如果主節(jié)點(diǎn)發(fā)生了錯(cuò)誤,那么整個(gè)系統(tǒng)將無法分配新的任務(wù);對(duì)于已經(jīng)失敗的任務(wù)也無法進(jìn)行重新分配。 - 從節(jié)點(diǎn)崩潰
如果從節(jié)點(diǎn)發(fā)生錯(cuò)誤,已經(jīng)分配的任務(wù)將無法執(zhí)行完成。 - 主從之間的通信發(fā)生故障
如果主從之間通信故障,主節(jié)點(diǎn)將無法感知從節(jié)點(diǎn)的任務(wù)執(zhí)行狀態(tài),并且從節(jié)點(diǎn)也無法接收新的任務(wù)。
主節(jié)點(diǎn)崩潰
對(duì)于這個(gè)問題,我們需要有一個(gè)備份主節(jié)點(diǎn)(backup master)。當(dāng)主要主節(jié)點(diǎn)(primary master)崩潰時(shí),backup master能夠接管primary master的任務(wù),進(jìn)行故障轉(zhuǎn)移。接管意味著,新的master能夠切入到舊的master崩潰時(shí)的狀態(tài)。此時(shí),就需要舊的master失效時(shí)的一些信息,而這個(gè)信息已經(jīng)無法從舊的master進(jìn)行獲取,需要從其他地方獲取,即通過Zookeeper進(jìn)行獲取。
還有另外一種情況。當(dāng)主節(jié)點(diǎn)負(fù)載很高,導(dǎo)致消息傳遞發(fā)生了延遲,導(dǎo)致backup master誤認(rèn)為primary master已經(jīng)失效,此時(shí)backup master會(huì)成為第二個(gè)primary master。同時(shí)由于網(wǎng)絡(luò)等原因,一些從節(jié)點(diǎn)無法與第一個(gè)primary mastter通信,而與第二個(gè)primary master建立了主從關(guān)系。這種情況被稱之為腦裂(split-brain)。簡(jiǎn)單來講,腦裂就是系統(tǒng)中兩個(gè)或多個(gè)部分開始獨(dú)立工作,導(dǎo)致整體行為不一。
所以需要一種方法來處理主節(jié)點(diǎn)失效的情況,并且避免腦裂。
從節(jié)點(diǎn)崩潰
主節(jié)點(diǎn)分配任務(wù)到有效的從節(jié)點(diǎn),從節(jié)點(diǎn)執(zhí)行任務(wù)并報(bào)告任務(wù)的執(zhí)行狀態(tài)。如果從節(jié)點(diǎn)崩潰了,主節(jié)點(diǎn)需要將尚未完成的任務(wù)重新派發(fā)到其他從節(jié)點(diǎn)。所以,主節(jié)點(diǎn)需要具備檢測(cè)從節(jié)點(diǎn)失效的能力,并確定那些從節(jié)點(diǎn)有效以便于派發(fā)任務(wù)。
主從之間的通信發(fā)生故障
如果一個(gè)從節(jié)點(diǎn)與主節(jié)點(diǎn)的網(wǎng)絡(luò)連接斷開,重新分配一個(gè)任務(wù)可能會(huì)導(dǎo)致兩個(gè)從節(jié)點(diǎn)執(zhí)行相同的任務(wù)。如果一個(gè)任務(wù)允許多次執(zhí)行,我們?cè)谶M(jìn)行任務(wù)再分配時(shí)可以不用關(guān)心從節(jié)點(diǎn)是否完成了該任務(wù)。如果一個(gè)任務(wù)不允許,那么我們的應(yīng)用需要適應(yīng)多個(gè)從節(jié)點(diǎn)執(zhí)行相同任務(wù)的可能性。
通過以上描述,總結(jié)出主從架構(gòu)有以下幾點(diǎn)需求
- 主節(jié)點(diǎn)選舉
- 崩潰檢測(cè)
- 組成員關(guān)系管理:主節(jié)點(diǎn)需要知道哪一個(gè)從節(jié)點(diǎn)具備執(zhí)行任務(wù)的能力。
- 元數(shù)據(jù)管理。用于保存任務(wù)的分配狀態(tài)和執(zhí)行狀態(tài)。
ZooKeeper提供了實(shí)現(xiàn)這些原語的關(guān)鍵機(jī)制,使得開發(fā)者可以更加關(guān)注應(yīng)用本身的業(yè)務(wù)邏輯。
什么是原語?
比如說我寫到這里的時(shí)候,饑腸轆轆,想吃宮保雞丁,于是我開始自己動(dòng)手做這道菜。
- 切(原語):首先,需要將雞肉切成丁,將辣椒切成段。
- 炒(原語):其次,需要在鍋中加熱油,然后炒雞肉。
- 調(diào)味(原語):最后,在炒的過程中,需要加入調(diào)料,如醬油、糖、醋等。
通過這些基本的“原語”(準(zhǔn)備食材和烹飪操作),可以組合它們來完成一道美味的菜肴。在計(jì)算機(jī)中,原語就是構(gòu)建更復(fù)雜系統(tǒng)和程序的基本構(gòu)件。