拜占庭將軍問題是由 Paxos 算法作者萊斯利·蘭伯特提出的點對點通信中的基本問題。
該問題要說明的含義是,在不可靠信道上試圖通過消息傳遞的方式達到一致性是不可能的。
所以,Paxos 算法的前提是不存在拜占庭將軍問題,即信道是安全的、可靠的,
集羣節點間傳遞的消息是不會被篡改的。
一般情況下,分佈式系統中各個節點間採用兩種通訊模型:共享內存(Shared Memory)、
消息傳遞(Messages Passing)。而 Paxos 是基於消息傳遞通訊模型的。
Paxos算法:
(1)三種角色
- Proposer:提案者
- Acceptor: 表決者
- Learner: 同步者
(2) Paxos 算法的一致性
Paxos 算法的一致性主要體現在以下幾點:
- 每個提案者在提出提案時都會首先獲取到一個具有全局唯一性的、遞增的提案編號 N, 即在整個集羣中是唯一的編號 N,然後將該編號賦予其要提出的提案。
- 每個表決者在 accept 某提案後,會將該提案的編號 N 記錄在本地,這樣每個表決者中保存的已經被 accept 的提案中會存在一個編號最大的提案,其編號假設爲 maxN。每個表決者僅會 accept 編號大於自己本地 maxN 的提案。
- 在衆多提案中最終只能有一個提案被選定。
- 一旦一個提案被選定,則其它服務器會主動同步(Learn)該提案到本地。
- 沒有提案被提出則不會有提案被選定。