天天看點

帶你讀《對象存儲實戰指南》第二章協調和複制2.1協調(三)

2.1.1兩将軍問題

如圖 2-6 所示,兩支友軍分别 由 Al将軍和 A2将軍帶領,兩軍約定上午 10點同時攻擊山谷中的敵軍。正常情況下,Al将軍派通信兵經過敵軍占領 的山谷通知 A2将軍千上午 10點進攻敵軍(圖 2-6中的第 1步),然後A2将軍安排通信兵告知 Al将軍确認資訊已經收到

(圖 2-6中的第2步)。但是A2将軍還需要等待 Al  将軍的确認資訊,否則 A2将軍不知道“ Al将軍是否收到 A2将軍的确認資訊(第 2步的資訊)”,是以還需要執行第 3步“ Al将軍派通信兵通知A2将軍,第 2 步确認已經收到“。

帶你讀《對象存儲實戰指南》第二章協調和複制2.1協調(三)

圖 2-6兩 将軍問題

如果沒有發生異常(如通信兵被敵軍俘獲),通過上述三步的通信,Al   将軍和 A2将軍基本達成“ 上午 10點進攻敵軍”的計劃 。但是戰線 封鎖、路況不好會導緻通信兵傳遞資訊逾時,或者通信兵被俘獲/擊 斃會導緻傳遞的資訊 石沉大海,是以需要逾時 重傳機制保障通信正常 。通過兩将軍問題,采用固定次數的消息 确認,解決通信網 絡不 可靠時的共識問題。同時,也可以解釋 TCP/IP通信中的三次握手設計 。

2.1.1 拜占庭将軍問題

在兩将軍問題中,如果通信兵被敵軍俘獲并且 叛變 ,将會傳 遞錯誤的資訊給Al将軍和A2将軍,進而更難達成共識 。為了解決通信中傳遞錯誤資訊的問題,業界提出了 拜占庭将軍問題。

如圖 2-7所示,6支軍隊分别 由 6位拜占庭将軍 ( Al~A6) 率領,他們共同圍攻城池内的敵軍。各支軍隊的行動策 略為進攻/撤退兩 種,如果部分軍隊進攻 、部分軍隊撤退可 能會造成災難性後果 ,是以 Al~   A6将軍必須通過投票來達成共識 ,即所有軍隊一起進攻或所有軍隊一起撤退 。因為各位将軍分處   城市的不同方向,他們隻能通過通信兵互相聯系 。在投票過程中,每位将軍都将投票給出進攻還是撤退     的資訊,然後通過通信兵分别通知其他将軍, 進而根據自己   的投票和其   他将軍送來的資訊,每位将軍就可知道共同的投票結果并決定行動政策。

拜占庭将軍 的難題在于拜占庭故障 ,即通信兵可能被敵軍 俘獲并且叛變 ,進而傳遞錯誤資訊,還有将軍也有可能成為叛徒。例如,錯誤消息讓将軍判斷出3人以上要求進攻,但實際上并沒有這麼多進攻的投票,最終導緻誤判 。

帶你讀《對象存儲實戰指南》第二章協調和複制2.1協調(三)

圖2-7    拜占庭将軍間題

在分布式系統中,典型的拜占庭故障 ,就是某台伺服器 的程序因 CPU繁忙、記憶體申請逾時、網絡擁塞 、磁盤響應慢等原因出現工作狀态不正常,卻繼續帶 病工作的亞健康狀态 。在非安全網絡中,通過僞裝來竊取資訊,也是安全中要預防的典型的拜占庭故障。分布式系 統為了解決拜占庭故障,可以采用以下解決方案。

·   根據分 布式系統的伺服器總數,限定發生拜占庭 故障的伺服器數,來確定解決該問題。例如,伺服器總數為 N, 那麼發生拜占庭故障 的伺服器數不能超 過 1/3*N(伺服器總數的 1/3),剩下的伺服器還能通過多數派達成共識。

·   根據數 字簽 名識别僞裝的伺服器,或者根據序 列号識别亞健康伺服器 的錯誤消息,并及時将它們隔離。通過防護手段,盡早地隔離系統中的不穩定因素,進而支撐共識的達成。

1999年, MiguelCastro與 BarbaraLiskov在論文 P ractica l Byzantine Fault Tolerance andProactiveRecovery中通過高性能的運算方法,提升了拜占庭故障 的容錯和恢複性能 

繼續閱讀