在設計分散式系統(Distributed System)前,必須要了解CAP定理(CAP theorem),又稱布魯爾定理(Brewer's theorem)。
CAP定理的三個字母C,A,P分別代表以下:
- Consistency:一致性
- Availability:可用性
- Partition-tolerance:分區容錯
Consistency 一致性
指分散式系統中的每個節點(nodes)所查到的都是一致且最新的資料。
Availability 可用性
在任何時候,每次向系統發出請求都能在合理的時間內獲得回應,但並不保證回應的資料為最新。
Partition-tolerance 分區容錯
當網路或節點故障造成系統的不同網路分區間(Partitions)的傳輸資料丟失時,系統仍可以正常運作。
滿足以上三種特性是一個完美的分散式系統欲達成的目標。
不過CAP定理指出,一個分散式系統最多只能滿足以上三個特性中的兩個,而無法同時滿足三個。
You can have at most two of these properties for any shared-data system
因此在設計分散式系統時,只能從三個特性中取捨,最多只能選擇兩點來滿足,有下列組合:
- CP (Consistency and Partition Tolerant):一致性與分區容錯。
- AP (Availability and Partition Tolerant):可用性與分區容錯。
- CA (Consistency and Availability): 一致性與可用性。
CP (Consistent and Partition Tolerant)
在分區容錯的情況下保證資料的一致性,那就必須犧牲可用性。
AP (Availability and Partition Tolerant)
在分區容錯的情況下保證系統的可用性,那就必須犧牲資料的一致性。
CA (Consistent and Availability)
保證系統的可用性與資料一致,那就無法有分區容錯,也就是只有一個節點,這樣的情況就不是分散式系統了,不過這樣的系統可能並不存在。
CAP定理的證明請參考Brewer’s Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services。
而分散式系統本身即為滿足分區容錯(P)的架構,也就是希望系統在部分節點或網路失靈的狀況下功能能可正常運作,因此通常是在CP與AP中作抉擇。
參考:
- Towards Robust Distributed Systems
- Brewer’s Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services
- Understanding the CAP Theorem
- CAP Theorem and Distributed Database Management Systems
- MongoDB 學習筆記之一 - 從 NoSQL 談起
- CAP theorem - Availability and Partition Tolerance
- 分布式系統的架構天險:CAP THEOREM 的一點探討
- 谈谈分布式系统的CAP理论
- CAP Twelve Years Later: How the "Rules" Have Changed
- 微服務架構的資料一致性
沒有留言:
張貼留言