分散式系統原理(10)CAP 理論
CAP 理論
CAP 理論是由 Eric Brewer 提出的分散式系統中最為重要的理論之一。本文將 CAP 理論安排在原理部分的最後介紹是為了利用前面已經介紹過的幾種分散式協議來幫助理解 CAP 理論
定義
CAP 理論的定義很簡單,CAP 三個字母分別代表了分散式系統中三個相互矛盾的屬性:
- C: Consistency (一致性),CAP 理論中的副本一致性特指強一致性
- A: Availiablity(可用性),指系統在出現異常時已經可以提供服務
- P: Tolerance to the partition of network (分割槽容忍),指系統可以對網路分割槽這種異常情況進行容錯處理
CAP 理論指出:無法設計一種分散式協議,使得同時完全具備 CAP 三個屬性:
- 該種協議下的副本始終是強一致性
- 服務始終是可用的
- 協議可以容忍任何網路分割槽異常;分散式系統協議只能在 CAP 這三者間所有折中
CAP 理論的詳細證明可以參考相關論文。這裡可以簡單用一個反例證明不存在 CAP 兼具的系統。假設系統只有兩個副本 A 和 B,Client 更新這兩個副本,假設在網路分化時,Client 與副本 A可以正常通訊,但副本 B 與 Client、副本 B 與副本 A 無法通訊,此時,Client 對副本 A 更新的資訊永遠無法同步到副本 B 上。如果希望系統依舊具有強一致的屬性,則此時需要停止更新服務,即不再修改資料,從而讓副本 A 與副本 B 保持一致;如果希望系統依舊可以提供更新服務,則只能更新副本 A 而無法更新副本 B,此時無法保證副本 A 與副本 B 一致
CAP 理論的意義
熱力學第二定律說明了永動機是不可能存在的,不要去妄圖設計永動機。與之類似,CAP 理論的意義就在於明確提出了不要去妄圖設計一種對 CAP 三大屬性都完全擁有的完美系統,因為這種系統在理論上就已經被證明不存在
協議分析
本節分析在第二章中介紹的幾種分散式協議是如何在 CAP 三大屬性中做折中與取捨的。在三章介紹典型分散式系統時,也會用 CAP 理論對這些系統的分散式協議進行分析
Lease 機制
Lease 機制犧牲了部分異常情況下的 A,從而獲得了完全的 C 與很好的 P。上面這句話有點抽象,下面一一解釋首先,Lease 機制不是在任何情況下都具有可用性的,使用 Lease 機制的協議,在發生異常時,需要等待 Lease 超時才能收回 Lease 許可權。然而,Lease 的持有者可能在 Lease 超時前就已經出現異常而不能提供服務了,直到 Lease 超時這段時間內,系統服務的可用性都有問題。例如,如果用 lease 決定 Primary 副本的,Primary 副本節點宕機後,只有待 Lease 超時才能選出新的 primary 副本,這段時間由於缺乏 primary 副本是沒有更新服務的。再者,Lease 協議本身保證了對於 Lease 約定的承諾在 Lease 頒發者和持有者之間是始終一致的。即使 Lease持有者由於網路分化沒有真正收到 Lease,Lease 頒發者也會在 Lease 時間內執行自己的承諾;而一旦 Lease 持有者收到 Lease,則即使再出現網路分化,也無法影響雙方對 Lease 承諾理解的一致性。最後,Lease 協議引入了“時間”這一概念,使得在對抗網路分化上有其特別的優勢,另外,Lease只需由頒發者向持有者通訊,即使網路是單向的也不影響 Lease 協議的正常工作
Quorum 機制
這裡僅討論一般的 Quorum 機制,即總共有 N 個副本,成功更新 W 個副本則算成功提交,讀取時讀 R 個副本。這種一般的 Quorum 機制,在 CAP 三大因素中都各做了折中,有一定的 C,有較好的 A,也有較好的 P,是一種較為平衡的分散式協議。
首先,讀取 R 個副本時,可以保證讀取到成功提交的版本,但無法保證讀取到最新的成功提交的版本(2.4.4)。也就是說,系統具有一定的一致性,卻無法真正做到強一致性。再者,無論是更新 W 個副本,還是讀取 R 個副本,協議可以允許部分副本異常而不影響更新或者讀取服務。最後,只要能與 W 個副本通訊就可以提供更新服務,能與 R 個副本通訊就可以提供讀服務,協議具有一定的容忍網路分化的能力。工程中,當使用 3 個副本時,可以講三個副本部署在三個不同的機房,只有同時出現兩個機房的網路都異常時才會影響服務,這種情況的概率本身已經非常低了
兩階段提交協議
兩階段提交系統具有完全的 C,很糟糕的 A,很糟糕的 P
首先,兩階段提交協議保證了副本間是完全一致的,這也是協議的設計目的。再者,協議在一個節點出現異常時,就無法更新資料,其服務可用性較低。最後,一旦協調者與參與者之間網路分化,無法提供服務
Paxos 協議
同樣是強一致性協議,Paxos 在 CAP 三方面較之兩階段提交協議要優秀得多。Paxos 協議具有完全的 C,較好的 A,較好的 P。Paxos 的 A 與 P 的屬性與 Quorum 機制類似,因為 Paxos 的協議本身就具有 Quorum 機制的因素。
首先,無需贅述,Paxos 協議是一種強一致性協議。再者,Paxos 協議只有兩種情況下服務不可用:一是超過半數的 Proposer 異常,二是出現活鎖。前者可以通過增加 Proposer 的個數來降低由於 Proposer 異常影響服務的概率,後者本身發生的概率就極低。最後,只要能與超過半數的Proposer 通訊就可以完成協議流程,協議本身具有較好的容忍網路分割槽的能力