Skip to content

布魯爾定理(Brewer's/CAP Theorem)筆記

Last Updated on 2024-11-26 by Clay

最近在看分散式系統的筆記,希望能對當前這一年所建立的系統進行反思,審視有什麼可以改進的點,就在這時被人推薦看看 CAP 定理,一看之下覺得滿直覺的,就順手紀錄於此。

所謂的 CAP,指的是:

  • 一致性(Consistency):所有節點訪問到的資訊都一致
  • 可用性(Availability):每次請求都能取得並非錯誤的回應(但不保證是最新資料)
  • 分區容錯性(Partition tolerance):分區是對通訊的時限要求,如果系統不能在時限內統一資料的一致性,這就發生了『分區』的情況,而我們要在分區的情況下仍能繼續運作,否則就不是分散式系統了

而 CAP 定理,簡單來說就是在指分散式系統中,一致性(Consistency)、可用性(Availability)和分區容錯性(Partition Tolerance)三者不能同時完全滿足,最多只能同時滿足兩項。

CA 系統(Consistency + Availability)

首先從 CA 系統開始說起。

經常會看到有人說我們不可能捨棄 P,所以只能在 CP 和 AP 中選擇一種。這是因為如果我們選擇了 CA 系統,這就代表著這是沒有網路分區的情況,所以也不完全符合分散式系統了。


CP 系統(Consistency + Partition Tolerance)

側重一致性,並允許系統發生錯誤。也就是在分散式系統發生錯誤導致不同的節點(Node)資料不同步時,不要使用節點上的資料回傳給使用者的請求,而是選擇直接回報錯誤、以此保證資料一致。

經典的例子就是分散式資料庫。寧可返回錯誤也不能回傳過時的錯誤資料。


AP 系統(Availability + Partition Tolerance)

側重可用性,放棄一致性。簡單來說就是在網路分區時,允許返回過期資料(不一致),但保證服務可用。

經典的例子就是 DNS。


結論

CAP 定理的關鍵在於如何權衡你的系統的功能優先度,因為只能在一致性和可用性之間選擇。


References


Read More

Tags:

Leave a Reply取消回覆

Exit mobile version