CAP theorem - Availability and Partition Tolerance

后端 未结 9 1728
囚心锁ツ
囚心锁ツ 2020-12-04 04:09

While I try to understand the \"Availability\" (A) and \"Partition tolerance\" (P) in CAP, I found it difficult to understand the explanations from various articles.

<
相关标签:
9条回答
  • 2020-12-04 05:05

    Consistency means that data is the same across the cluster, so you can read or write from/to any node and get the same data.

    Availability means the ability to access the cluster even if a node in the cluster goes down.

    Partition tolerance means that the cluster continues to function even if there is a "partition" (communication break) between two nodes (both nodes are up, but can't communicate).

    In order to get both availability and partition tolerance, you have to give up consistency. Consider if you have two nodes, X and Y, in a master-master setup. Now, there is a break between network communication between X and Y, so they can't sync updates. At this point you can either:

    A) Allow the nodes to get out of sync (giving up consistency), or

    B) Consider the cluster to be "down" (giving up availability)

    All the combinations available are:

    • CA - data is consistent between all nodes - as long as all nodes are online - and you can read/write from any node and be sure that the data is the same, but if you ever develop a partition between nodes, the data will be out of sync (and won't re-sync once the partition is resolved).
    • CP - data is consistent between all nodes, and maintains partition tolerance (preventing data desync) by becoming unavailable when a node goes down.
    • AP - nodes remain online even if they can't communicate with each other and will resync data once the partition is resolved, but you aren't guaranteed that all nodes will have the same data (either during or after the partition)

    You should note that CA systems don't practically exist (even if some systems claim to be so).

    0 讨论(0)
  • 2020-12-04 05:05

    Here is how I'm discussing CAP, regarding P particularly.

    CA is only possible if you are OK with a monolithic, single server database (maybe with replication but all data on one "failure block" - servers are not considered to partially fail).

    If your problem requires scale out, distributed, and multi-server --- network partitions can happen. You're already requiring P. Few problems I approach are amenable to single-server-always paradigms (or, as Stonebraker said, "distributed is table stakes"). If you can find a CA problem, solutions like a traditional non-scale-out RDBMS provides a lot of benefits.

    For me, rare: so we move on to discussing AP vs CP.

    You only choose between AP and CP operation when you have a partition. If the network & hardware is operating correctly, you get your cake and eat it too.

    Let's discuss the AP / CP distinction.

    AP - when there is a network partition, let the independent parts operate freely.

    CP - when there is a network partition, shut down nodes or disallow reads and writes so there are deterministic failures.

    I like architectures that can do both, because some problems are AP and some are CP - and some databases can do both. Among the CP and AP solutions, there are subtleties as well.

    For example, in an AP dataset, you have the possibility of both inconsistent reads, and generating write conflicts - these are two different possible AP modes. Can your system be configured for AP with high read availability but disallows write conflicts? Or can your AP system accept write conflicts, with a strong and flexible resolution system? Will you need both eventually, or can you pick a system that only does one?

    In a CP system, how much unavailability do you get with small partitions (single server), if any? Greater replication can increase unavailability in a CP system, how does the system handle those tradeoffs?

    These are all questions to ask with CP vs AP.

    A great read in this area right now is Brewer's "12 years later" post. I believe this moves forward the CAP debate with clarity, and recommend it highly.

    http://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed

    0 讨论(0)
  • 2020-12-04 05:09

    I have gone through lot of links, but none of them could give me satisfactory answer, except one.

    Hence I am describing CAP in very simple wordings.

    • Consistency: Must return same Data, regardless to from which node is it coming.

    • Availability: Node should respond (must be available).

    • Partition Tolerance: Cluster should respond (must be available), even if there is a a partition (i.e. network failure) between nodes.

    ( Also one main reason it confuses more is bad naming convention of it. If I had right, I might have given DNC theorem instead: Data Consistency, Node Availability, Cluster Availability, where each corresponds to Consistency, Availability and Partition Tolerance respectively )

    CP database: A CP database delivers consistency and partition tolerance at the expense of availability. When a partition occurs between any two nodes, the system has to shut down the non-consistent node (i.e., make it unavailable) until the partition is resolved.

    AP database: An AP database delivers availability and partition tolerance at the expense of consistency. When a partition occurs, all nodes remain available but those at the wrong end of a partition might return an older version of data than others. (When the partition is resolved, the AP databases typically resync the nodes to repair all inconsistencies in the system.)

    CA database: A CA database delivers consistency and availability across all nodes. It can’t do this if there is a partition between any two nodes in the system, however, and therefore can’t deliver fault tolerance. In a distributed system, partitions can’t be avoided. So, while we can discuss a CA distributed database in theory, for all practical purposes, a CA distributed database can exist but should not exist.

    Hence, this doesn’t mean you can’t have a CA database for your distributed application if you need one. Many relational databases, such as PostgreSQL, deliver consistency and availability and can be deployed to multiple nodes using replication.

    Source: https://www.ibm.com/cloud/learn/cap-theorem

    0 讨论(0)
提交回复
热议问题