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