相對於開發在一台計算機上運行的單個程序,如何讓一個應用中的多個獨立的程序協同工作是一件非常困難的事情。開發這樣的應用,很容易讓很多開發人員陷入如何使多個程序協同工作的邏輯中,最後導致沒有時間更好地思考和實現他們自己的應用程序邏輯;又或者開發人員對系統邏輯關注不夠,只是用很少的時間開發了一個簡單脆弱的主協調器,導致不可靠的單一失效點。
在分布式系統中協作多個任務。一個協作任務指一個包含多個進程的任務。這個任務可以是為了協作或者是為了管理競爭。協作意味著多個進程需要一同處理某些事情,一些進程采取某些行動是的其他進程可以繼續工作。比如,在典型的主-從工作模式中,從節點處於空閒狀態時會通知主節點可以接受工作,於是主節點就會分配任務給從節點。競爭則不同,它指的是兩個進程不能同時處理工作的情況,一個進程必須等待另一個進程。
提供某種有序共享存儲的組件
一般在這種架構中,主節點進程負責跟蹤從節點狀態和任務的有效性,並分配任務到從節點。
1、主節點崩潰
如果主節點發送錯誤並失效,系統將無法分配新的任務或重新分配已失敗的任務。
主節點崩潰,我們需要有一個備份主節點。備份主節點接管主要主節點的角色,進行故障轉移,新的主要主節點需要能夠恢復到舊的主要主節點崩潰時的狀態。對於主節點狀態的可恢復性,可以通過ZooKeeper獲取。
狀態恢復並不是唯一的重要問題。假如主節點有效,備份節點卻認為主節點已崩潰。如主節點負載過高,告知消息任意延遲,備份主節點將會接管成為主要主節點,執行必要的程序,最終可能以主節點的角色開始執行,成為第二個主節點。
此情況成為“腦裂”:系統中兩個或多個部分開始獨立工作,導致整體行為不一致。
2、從節點崩潰
如果從節點崩潰,已分配的任務將無法完成
3、通信故障
如果主節點和從節點之間無法進行信息交換,從節點將無法得知新任務分配給它。
1、主節點選取
主節點可以分配任務給從節點
2、崩潰檢測
主節點必須具有檢測從節點崩潰或失去連接的能力
3、組成員關系維護
主節點必須具有指導哪一個從節點可以執行任務的能力
3、元數據管理
主節點和從節點必須具有通過某種可靠的方式來保存和分配狀態和執行狀態的能力