CAP 定理:它是什麼以及對您意味著什麼
已發表: 2022-11-18在計算中,CAP 定理,也稱為 Brewer 定理,指出分佈式數據存儲不可能同時提供以下三種保證中的兩種以上:一致性:每次讀取都會收到最近的寫入或錯誤可用性:每個請求都會收到一個(非錯誤)響應——但不能保證它包含最新的寫入分區容限:儘管節點之間的網絡丟棄(或延遲)了任意數量的消息,但係統仍繼續運行換句話說, CAP 定理指出,分佈式數據存儲只能提供以下三種保證中的兩種:一致性、可用性或分區容錯性。
根據 CAP 定理,系統設計人員了解網絡共享數據系統設計中的權衡。 本書從需求的角度討論了 NoSQL 數據庫的基礎知識。 根據 CAP 定理,我們只能獲得數據庫三個保證中的三分之二:一致性、可用性和分區容錯性。 分區是分佈式系統中節點之間的通信中斷。 如果一個節點無法從系統內的另一個節點接收到任何消息,它將在兩個節點之間分配。 一旦分區痊癒,保證分區容錯性的分佈式系統就可以優雅地恢復到之前的狀態。 設計人員在設計或選擇分佈式數據庫時必須考慮 CAP 定理。
CAP定理將MongoDB中的兩個系統定義為CP和AP。 CAP 定理呈現了當今分佈式系統(例如 MongoDB 和 Cassandra)的簡化視圖。 正常操作允許靈活的可用性和一致性,以及滿足特定要求的能力。
CAP 定理 (CP) 是一個數學定理,可以使用 MongoDB 和其他類似應用程序研究其應用。 它經常用於實時應用程序中以在多個位置運行並處理大量數據。 CAP 定理指出 MongoDB 是一種 CP 數據存儲,它通過保持一致性同時犧牲可用性來管理網絡分區。
Nosql中的上限定理是什麼?
說到NoSQL,一致性和高可用是無法同時實現的。 Brewer 首先在 CAP 定理中陳述了這一點。 CAP 定理或 Eric Brewers 定理指出,數據庫只能實現三個保證中的兩個:一致性、可用性和一致性。
當談到分佈式數據存儲時,CAP 定理由三個部分組成。 正常操作會導致所有三個功能都由您的數據存儲執行。 但是,根據 CAP 定理,當分佈式數據庫遇到網絡困難時,您可以提供一致性或可用性。 結果喜憂參半。 一種數據庫類型,比如 NoSQL 或非面向,是否能夠支持高可用性或高一致性是選擇時要考慮的一個重要因素。 當必須以精確的方式返回數據時,使用一致的數據庫至關重要。 銀行應用程序應盡快返回用戶信息的準確值。
如果服務比信息更重要,則可以使用可用性數據庫。 電子商務公司可以通過使用它來證明數據庫的可用性有多高。 用戶可以更改 Cosmos 或 Cassandra 等數據庫中的旋鈕,以表明他們更喜歡穩定性還是可用性。
換句話說,即使發生分區,CAP sense 中存儲的所有數據都會保留。 在 CAP 中,僅用於單個分區的數據備份系統沒有一致性。
這意味著,即使某些節點不可用,系統也可以為其客戶端提供服務。 允許分區容忍但不保留數據的系統與CAP不一致。
在具有數據複製的分佈式系統中,無法保證同時保持所有三個理想屬性——一致性、可用性和分區容錯性。 雖然分區節點並不總是可用,但 CAP 中的節點仍然可以讀寫。 在 CAP 意義上,一個系統保持其部分而非全部節點能夠讀寫是不可用的,無論它是否仍然對客戶端可用並滿足其 SLA。
CAP 意義意味著即使發生分區,所有數據都保留在主機上。
上限定理:這是一個問題嗎?
根據您的看法,這可能是一個艱難的決定。 CAP 定理可以從 Web 應用程序中移除,在該應用程序中,當底層數據庫系統是分佈式的時,可用性和可伸縮性比一致性更重要。
Nosql是否遵循上限定理?
這個問題沒有明確的答案,因為它取決於你如何解釋 CAP 定理。 有些人認為 nosql 數據庫不遵循 CAP 定理,因為它們不保證一致性,而另一些人則認為 nosql 數據庫確實遵循 CAP 定理,因為它們不保證可用性。
什麼是上限定理示例?
CAP 定理是計算機科學中的一個理論,它指出分佈式計算機系統不可能同時提供以下三個保證中的兩個以上:
1.一致性:每次讀取都會收到最近的寫入或錯誤
2. 可用性:每個請求都會收到一個(無錯誤的)響應——但不保證它包含最新的寫入
3. 分區容錯:儘管節點之間的網絡丟棄(或延遲)了任意數量的消息,但係統仍繼續運行
換句話說,CAP 定理指出分佈式系統不可能在網絡分區的情況下同時保持一致和可用。
在設計雲應用時,所有的雲應用都是分佈式系統,所以學習CAP定理是必不可少的。 CAP 一致性意味著所有客戶端,無論連接到哪個節點,都會收到相同的數據。 集群中的分區容忍度意味著即使某些節點通信失敗,集群也不會中斷。 根據 CAP 定理,NoSQL 數據庫不被視為 CA 數據庫。 CA 數據庫提供一致性和可用性,但如果系統中的任何兩個節點具有單獨的分區映射,它們就無法保證容錯性。 AP 數據庫包括 CouchDB、Cassandra 和 ScyllaDB。 根據CAP定理,CA分佈式數據庫理論上是可以的,但目前還沒有。
NoSQL 數據庫被認為是 AP 系統,因為它以犧牲一致性為代價具有可用性和分區容錯性。 諸如 PACELC 之類的分佈式數據庫除了延遲和一致性之外,還為分佈式系統增加了延遲和一致性。 考慮到性能,在不影響其他關鍵領域的情況下兌現這一承諾是否可行? ScyllaDB 是一個高可用性、分區容錯、低延遲的系統,可以通過多種方式進行配置。 傳統的 CAP 定理不提供延遲或性能。 作為雲原生應用程序,它們需要可預測的低延遲和高可用性。 CylonDB 的性能大大優於 CockroachDB 等分佈式 NewSQL 數據庫。
數據不一致是 CAP 定理試圖解決的服務可用性問題的唯一原因。 此外,硬件故障或人為錯誤等其他因素也可能導致數據不可用。 CAP 定理是一個著名的數據庫設計定理,指出任何數據存儲都不能被分區,同時具有穩定性、可用性和分區容錯性這三個屬性。 公司有可能同時實現一致性和可用性,但並不總是可能的。 Mohammad Hashim 博士和 Amnon Shashua 博士在題為“在數據存儲中實現一致性、可用性和分區容錯性”的論文中提出了該定理。 該定理通過解決這三個屬性之間的權衡,將數據不一致作為可用性問題的唯一原因。 眾所周知,該定理並未解決所有不可用的原因或解決方案。 因此,理解不可用性的所有原因並確定和開發這些問題的解決方案至關重要。 因此,可以使用數據倉庫來協助完成這項工作。 您可以使用數據倉庫來更好地理解和解決您的數據與它之間的任何不一致。
上限定理
如果您的應用程序要保持一致,它就必須可用。 如果您的應用程序需要頻繁的可用性,它必須願意接受分區限制。 最後,如果您的應用程序需要分區容錯性,則必須犧牲一致性。
如果網絡分區導致單個對等點上存儲的數據丟失,則 CAP 定理指出單個對等點上可以存儲的最大數據量是有限的。
上限定理 Nosql 示例
一個主節點處理 MongoDB 的寫操作。 在缺少主節點的情況下,系統必須替換它,而在這樣做的同時,系統會阻止客戶端寫入它,直到主節點可用為止。
混合 Nosql 數據庫的優缺點
SPO 數據庫的優勢在於提供一致性而不是可用性。 另一方面,混合 NoSQL 數據庫屬於 NoSQL 數據庫的第二類,它們不完全屬於這些類別中的任何一個。 CP 和 SPO 數據庫合併到這些數據庫中,其中包含 CP 和 SPO 數據。 兩全其美使混合 NoSQL 數據庫成為越來越受歡迎的選擇。 由於易於維護和可用性,它們降低了數據不一致和數據丟失的風險。
區塊鏈中的上限定理
CAP 定理,也稱為布魯爾定理,指出分佈式系統不可能同時提供以下三種保證中的兩種以上:
– 一致性(所有節點同時看到相同的數據)
– 可用性(每個請求都會收到響應)
– 分區容錯(即使某些節點發生故障,系統仍可繼續運行)
在區塊鏈系統中,節點是分佈式的,數據在所有節點之間複製。 因此 CAP 定理適用於區塊鏈系統。
根據 CAP 定理,分佈式數據存儲(例如區塊鍊網絡)不能提供超過兩種保證:一致性和可用性。 即使網絡由於網絡分區(故障節點)而不能保證它是最新的,每個請求都會得到答复。 當您發送比特幣時,不確定交易是否會被接受。 交易輸入後五分鐘內將形成一個區塊。 如果你等待的時間太長,你的交易將被轉移到另一個區塊,它周圍的區塊將開始積累。 從來沒有一筆交易在完成超過五個小時後被平倉。
可能會出現網絡停機,但沒有跡象表明這會導致不一致或可用性。 根據計算機理論 CAP 定理,這是可以實現的。 因為它允許分佈式數據庫的兩個最重要的功能共存,所以一致性和可用性是唯一可以共存的兩個功能。 根據我們系統的具體用例,我們可以權衡這兩個可用功能。
例如,如果我們需要一個系統來響應火災,我們可以選擇可用性而不是一致性。 正是由於這一事實,我們知道系統必須在發生火災時可用,即使仍然缺少一些信息。 我們寧願擁有一個一致的系統,也不願擁有一個可用的系統。 我們之所以知道這一點,是因為我們知道無論網絡出現故障,用戶都需要訪問相同的數據。
CAP 定理需要對網絡連接的共享數據系統有透徹的理解才能設計它們。 在這種情況下,我們可以使用它在三個功能之間進行權衡,並根據用戶的特定需求定制系統。
上限定理:為什麼它今天仍然相關
CAP 定理,儘管它的進步和重新思考的算法,幾十年來一直是一個相關的概念。 該定理將分佈式系統描述為具有一致性、可用性和分區這三個屬性中的兩個,並且是系統設計的基本原則。 當分區存在時,CAP 定理表達了可用性和一致性之間的折衷。 定理是理解這些屬性之間的權衡和協助系統優化的有用工具。
大數據中的上限定理
在大數據中,CAP 定理指出分佈式系統不可能同時提供以下三種保證中的兩種以上:
1.一致性:系統中的所有節點同時看到相同的數據。
2.可用性:系統中的每個節點都可以訪問和查詢數據。
3.分區容忍:即使部分節點不可用,系統也可以繼續運行。
CAP 定理經常被引用為大數據系統不能真正一致而必須設計為最終一致的原因。
布魯爾定理,也稱為上限定理,是一個描述一致性、可用性和分區容錯性的數學概念。 框架和交換器之間的交換開始於框架一致的穩定狀態。 為確保框架在 100% 的時間內可用,它必須保持運行。 分佈式數據庫的概念需要多台 PC 或節點的交互,為客戶端提供一個獨特的操作數據庫單元。 在數據恢復的情況下,客戶端連接到離它需要從中檢索信息的節點最近的節點。 水平縮放的使用降低了信息複製的成本和速度。 數據庫 NoSQL(非關係)數據庫可用於分佈式網絡應用程序。
在快速擴展的網絡中,它們可以水平分佈,並使用簡單的層次結構輕鬆訪問。 NoSQL 數據庫可以描述為 AP 或 CP 數據庫。 Partition tolerance 和 accessibility 是業界非常看重的兩個 CAP 特性。 通過利用分佈式框架,我們能夠實現過去不可能實現的大量計算能力和可訪問性。 當分佈式框架用於長時間運行的服務器時,它們會提供更高的性能、惰性和接近 100% 的正常運行時間。 水平擴展的目標是了解分佈式框架及其帶來的挑戰,以及將折衷方案納入 CAP。
為什麼上限定理很重要
在數據庫系統中,CAP 定理指出,分佈式系統不可能同時提供以下三種保證中的兩種以上:一致性:每次讀取都會收到最近的寫入或錯誤錯誤)響應——不保證它包含最新的寫入 分區容限:儘管任意數量的消息被節點之間的網絡丟棄(或延遲),系統仍繼續運行 CAP 定理最初由計算機科學家 Eric Brewer 在2000。它也被稱為 CAP 權衡。 CAP 定理很重要,因為它可以幫助開發人員和架構師了解分佈式系統的局限性。 分佈式系統不可能同時提供所有三個 CAP 保證。 開發人員和架構師必須選擇哪兩個保證對他們的應用程序更重要,並相應地設計系統。
根據 CAP 定理,分佈式數據存儲無法同時提供以下理想功能:一致性、可用性和分區容錯性。 無論系統中的某些節點是否不可用,任何連接到數據庫的客戶端都將始終收到來自數據庫系統的有效請求。 在分佈式數據庫系統中,數據經常被拆分到多個節點中。 剪切,也稱為水平分區,發生在這個過程中。 在 NoSQL 數據庫系統中保持水平擴展至關重要。 NoSQL 數據庫往往具有極強的適應性,具有大量的客戶端和嚴格的服務級別要求。 系統中每個複制者的狀態都可以由中央數據庫節點維護。
當節點請求或更新數據時,它會在傳輸請求的數據之前通知中心節點。 當應用於高可用性和分區容錯的數據庫系統時,該模型可以幫助提高整體一致性。 如果該響應不包含陳舊數據或根本不包含任何數據,它將繼續違反原子一致性。 當在部分同步模型上可以訪問節點時,可以創建最終一致或延遲 t 一致的系統。 作為這樣的系統的一部分,數據最終會被複製到足夠多的節點,一旦所有數據位都被傳送到每個節點,系統就會達到一致性。
每個寫請求在每個節點都可用。 A 和 B 可以被任意兩個節點 A 和 B 劃分,因為有一組獨立的節點 C 可以處理大多數 A 或 B 故障,並且 C 中的每個節點只能容忍 A 或 B 的一個故障。該定理可以推廣任意數據結構和任意一致性保證 在分佈式系統中維護一組一致的數據以確保它始終是最新的是至關重要的。 因為分佈式系統是節點的集合,不可能保證所有節點都有最新的寫入數據。 數據可用性的另一個重要特徵是它總是隨時可供閱讀。 為了確保系統能夠處理任意數量的故障,保持分區容忍度最新是至關重要的。 根據 CAP 定理,任何數據存儲只能保證兩件事:數據始終保持不變或在數據更改時產生錯誤。 同樣,可用性聲明表示所有寫請求在所有節點上都可用。 如果一個節點發生故障,其他節點將可以訪問數據。 此外,分區容錯性指出即使兩個節點同時發生故障,整個系統仍然能夠同時容忍故障。 CAP 定理是一個理論計算機科學定理,有助於理解分佈式系統的工作原理。 數據是頻繁分佈的,因此在 Web 應用程序等實際應用程序中實現這一點至關重要。 CAP 定理除了確保數據始終正確更新和優雅地處理故障外,還可以幫助數據恢復。
上限定理SQL
CAP 定理是計算機科學中的一個理論,它指出分佈式系統不可能同時提供以下三個保證中的兩個以上:
一致性:所有用戶同時看到相同的數據。
可用性:所有用戶都可以隨時讀寫數據。
分區容忍:即使某些網絡節點不可用,系統也可以繼續運行。
根據 CAP 定理,如果一個系統在存在分區和默認情況下都不能保持一致和可用,那麼就沒有分佈式系統這樣的東西。 一致性是由 CockroachDB 在 CAP 定理中定義 CP 系統時選擇的。 因為網絡有各種各樣的分區,一些CAP-Consistent系統有時可能不可用,但仍然可以到處找到。 CAP 定理描述了一致性和可用性之間的狹隘權衡。 CAP 定理沒有考慮氣候變化影響等因素,這些因素可能會導致停電。 與 CAP-available 相比,CAP 購買在有效性方面的作用非常小。 結果,由於失去了一致性,因此需要大量代碼。
如果您選擇使用 CockroachDB,您可以根據需要利用其更高可用性、更低可靠性模式。 如果您只是從最近的副本中讀取最少的陳舊數據而不會阻塞衝突事務,則您應該考慮提高副本的可用性。 儘管延遲可能會更長,但大多數需要一致的 CAP 兼容數據庫的應用程序(例如 CockroachDB)通常最好使用 CAP 兼容的數據庫。
上限定理證明
Cap 定理沒有明確的證明。 然而,有一些關鍵的見解有助於解釋為什麼該定理是正確的。
首先,理解上限定理實際上是關於權衡的,這一點很重要。 在任何分佈式系統中,總是需要在一致性、可用性和分區容錯性之間進行權衡。
其次,該定理實際上是關於分佈式系統中可能發生的事情的陳述。 它不是關於什麼是可取的或最佳的陳述。
第三,上限定理的證明依賴於計算機科學中一些非常基本的思想,包括分佈式系統的概念和共識算法的概念。
在分佈式系統中,CAP 定理是一個基本定理。 事實上,任何分佈式系統都可以具有以下三個特徵中的兩個或多個。 我們將檢查一個基本的分佈式系統,並通過解釋什麼使它適用於一致、可用和分區容錯來向您展示如何使其工作。 在一個可用的系統中,當我們的客戶端向一個沒有崩潰的服務器發送請求時,服務器會盡快響應客戶端。 如果我們要具有分區容錯性,就必須能夠在任意網絡分區下正常運行。 根據我們的研究,一個系統不可能同時擁有這三者。
上限定理
根據理論計算機科學,使用分佈式數據存儲不可能同時提供以下三個理想功能:一致性、可用性和分區容錯性。 一致性、可用性和分區容錯性都包含在 CAP 中。
因為 CAP 定理指出沒有系統可以同時提供所有三個屬性,所以這是真的。 如果我們想要提供一致性、可用性和分區容錯性,我們必須在三個規範中的一個上做出妥協。
數據庫
Nosql 數據庫是不使用傳統關係模型的數據庫系統。 相反,他們使用更適合現代數據存儲和檢索需求的各種不同模型。 Nosql 數據庫通常比關係數據庫更具可擴展性和更易於使用,使它們成為許多 Web 應用程序的流行選擇。
文檔數據庫將數據存儲在文檔中而不是關係數據庫中。 為了滿足現代企業的需求,它們被構建為具有適應性、可擴展性,並且能夠快速響應數據管理需求。 文檔NoSQL數據庫分為四種類型:純文檔數據庫、鍵值存儲、寬列數據庫和圖數據庫。 全球 2000 強組織越來越多地採用 NoSQL 數據庫來支持任務關鍵型應用程序。 這是由於五個趨勢很難處理,以至於關係數據庫無法再處理它們。 由於其固定的數據模型,關係數據庫是敏捷開發的主要障礙。 它被定義為NoSQL的應用模型。
數據可以以任何它希望的方式在節點中建模,而不是靜態的。 在面向文檔的數據庫的上下文中,JSON 是存儲數據的實際格式。 因此,ORM 框架不再執行應用程序開發的開銷要求。 N1QL(發音為“nickel”)是 Couchbase Server 4.0 中包含的一種強大的查詢語言,它允許將 SQL 轉換為 JSON。 它不僅支持標準的SELECT/FROM/WHERE語句,還支持聚合(GROUP BY)、排序(SORT BY)、連接(LEFT OUTER/INNER)等功能。 NoSQL 數據庫易於使用,因為它們採用橫向擴展架構設計,沒有單點故障。 隨著越來越多的任務在移動設備和網頁上執行,企業能夠在線滿足客戶需求變得越來越重要。
NoSQL 數據庫易於安裝、配置和擴展,使其成為數據管理的理想工具。 它們旨在充當讀取、寫入和存儲系統。 此外,可以管理和監視不同大小和處於不同操作階段的集群。 不需要安裝單獨的軟件來進行數據庫之間的複制,因為 NoSQL 數據庫是分佈式的。 此外,它允許應用程序通過使用硬件路由器按需執行自己的停機時間——應用程序不需要等待數據庫發現問題並執行自己的停機時間。 NoSQL 數據庫越來越普遍地支持現代 Web、移動和物聯網 (IoT) 應用程序。
不同類型的 Nosql 數據庫
NoSQL 數據庫的日益流行是由於 NoSQL 數據庫能夠以不同的方式存儲數據,從而允許更快、更有效的訪問方法。 可以在這些平台上運行各種應用程序,包括 Web 應用程序、大數據和物聯網 (IoT)。 基於文檔的 NoSQL 數據庫,例如 Cassandra,非常適合難以訪問的大量數據。 使用它們很容易變異數據,這對於實時更新數據很有用。
Redis 是一個鍵值數據庫,可用於存儲需要快速訪問的少量數據。 只需查看密鑰,就可以使用它們快速檢索數據。
通過使用像 Neo4j 這樣的寬列數據庫,您可以輕鬆地索引和搜索大量數據。 由於這些特性,可以將列快速添加到數據庫中。
Neo4j 等圖形數據庫非常適合組織難以以平面方式訪問的數據。 借助此 API,您可以簡單高效地查詢數據。
關係數據庫酸
關係數據庫是Edgar F. Codd於1970年提出的基於數據關係模型的數字數據庫。用於維護關係數據庫的軟件系統是關係數據庫管理系統(RDBMS)。 許多關係數據庫系統都可以選擇使用酸性(原子性、一致性、隔離性、持久性)事務模型。
這是一組通過建立 ACID(原子性、一致性、隔離性、持久性)來保證數據庫事務得到可靠處理的特性。 數據庫的 ACID 功能是從處理事務時可能發生的錯誤中恢復。 儘管有任何錯誤,數據庫的數據仍然準確且一致。 如果事務在完成之前失敗,則不會更改數據。 事務可能由於輸入不當或在某些情況下違反一致性而失敗。 這可能是由於數據庫管理系統中的超時或死鎖造成的。 另一方面,介質故障是指存儲設備(如硬盤)無法讀取和寫入數據。
Rdbms 酸兼容嗎?
事務數據必須符合 ACID,許多流行的 RDBMS 都支持這一點,例如 Oracle、SQL Server、PostgreSQL 和 MySQL。
哪個 Db 具有酸性?
MySQL、PostgreSQL、Oracle 和 Microsoft SQL 都保證事務的 ACID 屬性。
Rdbms 是否具有酸性?
與分佈式數據相比,RDBM 具有難以維護的 ACID 屬性。 RDBM 還根據 CAP 定理(Gilbert 和 Lynch,2002 年)確保一致性和可用性優於可伸縮性,該定理指出每個處理的事務都需要 ACID,例如並發事務。