貓頭鷹的深夜翻譯:理解CAP定理

CAP定理是用來提醒設計師在設計聯網的共享數據系統時須要做出的權衡。CAP理論影響了不少分佈式數據系統的設計。這幾年來,CAP一直被普遍的誤解爲是用於對數據庫進行分類的工具。也流傳着許多關於CAP的錯誤的信息。不少關於CAP博客的觀點極有多是錯誤的。面試

你須要進一步的瞭解CAP從而去分辨出關於CAP的錯誤的信息。數據庫

CAP定理適用於存儲狀態的分佈式系統。在2000年的PODC上,Eric Brewer推測在任何聯網的數據共享系統中,一致性、可用性和分區容忍性之間本質上存在折中。在2002年,MIT的Seth Gilbert和Nancy Lynch發表了對Eric Brewer推論的證實。這個理論說明網絡數據共享系統只能確保或是強有力的支持一下三個屬性中的兩個:服務器

  • 一致性:確保分佈式集羣中的每個節點都返回相同的,最近成功寫入的數據。一致性意味着客戶對數據的視圖是同樣的。有各類各樣的一致性模型。而CAP中的一致性是指線性化或是順序一致性,這是一種強一致性。
  • 可用性:每個非故障節點可以在必定時間內對客戶端的請求做出相應。這裏的重點在於每個。爲了實現可用性,在任意一個網絡分區的節點都必須可以在必定時間內做出響應。
  • 分區容忍性:儘管存在網絡分區,可是系統依然可以繼續運行而且保證一致性。網絡分區已經成了生活中的常態。實現分區容忍性的分佈式系統可以保證分區可以正常的從故障中恢復。

ACID中的C和A與CAP定理中的C和A是不同的概念。微信

CAP定理將系統劃分爲三類:網絡

  • CP(一致性和分區容忍性):乍一看來,CP系統使人困惑。換句話說,一個系統具備一致性和分區容忍性,可是永遠都不可用。CP被認爲是在網絡分區的場景下犧牲可用性的一類系統。
  • CA(一致性和可用性):CA系統是指沒有網絡分區並實現一致性和可用性的數據庫。一般認爲一個單節點的數據庫服務器能夠歸類爲CA。單節點的數據庫服務器永遠都不須要處理分區容忍性,所以被認爲是一個CA系統。這個理論的漏洞在於單節點的數據庫不是聯網共享數據的分佈式系統,根本就不適用於CAP。
  • AP(可用性和分區容忍性):這是具備可用性和分區容忍性可是不保證一致性的系統。

一般用文斯圖或是一個三角形來可視化CAP定理。各類各樣的系統落入這三個圓圈相交的類型。
clipboard.png分佈式

文斯圖或是三角形圖對CAP的描述是錯誤的而且具備誤導性。正確的理解是當須要進行網絡分區時,設計師須要從可用性和線性一致性二選一。在任何一個聯網的數據共享系統中,分區容忍性都是必須的。網絡分區和消息的丟失是常態,必須合理的解決這個問題。簡單來講,網絡分區迫使設計師必須從強一致性和強可用性直接二選一。選擇一致性就意味着沒法隨時響應客戶的查詢,由於系統沒法保證返回最近一次的寫入結果,從而犧牲了可用性。網絡分區會強制一些正常運行的節點拒絕響應客戶端的請求,由於這些節點當前沒法保證數據的一致性。工具

而與此相反,選擇可用性意味着隨時可以響應客戶的請求,可是系統沒法保證數據的一致性,好比最近的一次寫入。高可用性的系統會盡量的提供最佳答案。spa

在正常的操做中(無網絡分區的場景),CAP理論不會對可用性或一致性施加限制。設計

CAP定理負責引出關於分佈式共享系統中各類折中的理論。它對於咱們加深對共享系統的理解起着重要的做用。然而,CAP的描述過於簡單並具備誤導性,Brewer 認可CAP理論簡化了在網絡分區中可用的選項。系統的設計者能夠有多種方法從網絡分區中恢復數據。每一個系統都應當盡力實現「基於特定應用最大程度的結合可用性和一致性」。教程

clipboard.png
想要了解更多開發技術,面試教程以及互聯網公司內推,歡迎關注個人微信公衆號!將會不按期的發放福利哦~

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息