簡體   English   中英

使用DDBMS理解“ CAP”中的“ P”

[英]Understanding the “P” in “CAP” with DDBMSes

在CAP定理中,“ P”(分區)組件實質上表明盡管存在物理網絡分區,系統仍可以正常運行。

我猜想在DDBMS上下文中,“ C”(一致性)和“ A”(可用性)對我來說是很有意義的:具有一致性,所有客戶端都必須具有一致的數據視圖,而不管它們正在服務的DB節點如何。 並且具有可用性,所有客戶端必須能夠從某個數據庫節點獲得響應以進行讀/寫(即,所有節點永遠不會同時關閉)。

但是出於某種原因,我對CAP的分區感到很吃驚,它的意義是什么,尤其是對於DDBMS。

對於分布式數據庫,根據定義,您具有多個(群集)節點。 取決於網絡和系統架構,物理設備等,無論如何在節點之間復制或通信(半聯接等)時,您將遇到性能問題。 CAP中的“ P”也僅僅是提高DDBMS性能的一種方式。 沒有P保證會阻礙性能的表現?

此外,“ P”與單個節點(非集群)DB有何關系? 我覺得在這種情況下完全不相關。 提前致謝!

CAP定理說,在分布式系統中,您在故障期間不能具有通用的正確性,可用性和分區容限。 正確性意味着從任何節點讀取的數據在任何其他節點上都沒有沖突的值。 可用性意味着客戶端可以使用所有健康的節點。 分區容限意味着可以將系統划分為子集,這些子集不能相互通信並且仍然可以運行。

假設您有3台機器。 其中一個無法與其他人聯系,換句話說,群集被分為2個分區。 如果系統可以處理這種情況,則它是分區容忍的。 但是,您必須放棄完全正確性或完全可用性:

丟棄正確性:所有節點都保持啟動狀態,但拆分節點和其余群集節點可能包含沖突數據,有時也稱為裂腦。

刪除可用性:其中一個分區脫機。 這樣可以保護數據完整性,因為任何成功的讀取在其他任何地方都不會產生沖突的值。

從數據庫系統的角度來看,這意味着您必須具有不同的策略來處理故障。 無法處理分區故障的數據庫意味着,如果任何節點出現故障,則行為是不確定的。 一個在故障期間犧牲正確性的數據庫將在解決故障時強制應用程序處理一致性問題,但仍有更多節點可用。 放棄可用性的數據庫將使應用程序邏輯能夠假定數據始終是一致的,但是在故障期間無法訪問其他一些健康的節點。

我對CAP的理解是,您不能一直可靠地擁有所有三個理想的屬性,必須選擇優先級。 我同意這不是最容易理解的術語,但是Eric Brewer自己的這篇文章很好地解釋了它。 http://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed

要直接回答您的問題,如果您選擇對數據進行分區,則需要在某種程度上權衡一致性或可用性。 如果您在A和B之間分割數據,並且它們之間失去連接,則可以阻止更新(-可用性)或讓它們獨立更新(-一致性)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM