CAP定理是用來提醒設計師在設計聯網的共享數據系統時須要做出的權衡。CAP理論影響了不少分佈式數據系統的設計。這幾年來,CAP一直被普遍的誤解爲是用於對數據庫進行分類的工具。也流傳着許多關於CAP的錯誤的信息。不少關於CAP博客的觀點極有多是錯誤的。面試
你須要進一步的瞭解CAP從而去分辨出關於CAP的錯誤的信息。數據庫
CAP定理適用於存儲狀態的分佈式系統。在2000年的PODC上,Eric Brewer推測在任何聯網的數據共享系統中,一致性、可用性和分區容忍性之間本質上存在折中。在2002年,MIT的Seth Gilbert和Nancy Lynch發表了對Eric Brewer推論的證實。這個理論說明網絡數據共享系統只能確保或是強有力的支持一下三個屬性中的兩個:服務器
ACID中的C和A與CAP定理中的C和A是不同的概念。微信
CAP定理將系統劃分爲三類:網絡
一般用文斯圖或是一個三角形來可視化CAP定理。各類各樣的系統落入這三個圓圈相交的類型。
分佈式
文斯圖或是三角形圖對CAP的描述是錯誤的而且具備誤導性。正確的理解是當須要進行網絡分區時,設計師須要從可用性和線性一致性二選一。在任何一個聯網的數據共享系統中,分區容忍性都是必須的。網絡分區和消息的丟失是常態,必須合理的解決這個問題。簡單來講,網絡分區迫使設計師必須從強一致性和強可用性直接二選一。選擇一致性就意味着沒法隨時響應客戶的查詢,由於系統沒法保證返回最近一次的寫入結果,從而犧牲了可用性。網絡分區會強制一些正常運行的節點拒絕響應客戶端的請求,由於這些節點當前沒法保證數據的一致性。工具
而與此相反,選擇可用性意味着隨時可以響應客戶的請求,可是系統沒法保證數據的一致性,好比最近的一次寫入。高可用性的系統會盡量的提供最佳答案。spa
在正常的操做中(無網絡分區的場景),CAP理論不會對可用性或一致性施加限制。設計
CAP定理負責引出關於分佈式共享系統中各類折中的理論。它對於咱們加深對共享系統的理解起着重要的做用。然而,CAP的描述過於簡單並具備誤導性,Brewer 認可CAP理論簡化了在網絡分區中可用的選項。系統的設計者能夠有多種方法從網絡分區中恢復數據。每一個系統都應當盡力實現「基於特定應用最大程度的結合可用性和一致性」。教程
想要了解更多開發技術,面試教程以及互聯網公司內推,歡迎關注個人微信公衆號!將會不按期的發放福利哦~