In theoretical computer science, the CAP theorem, also named Brewer's theorem after computer scientist Eric Brewer, states that it is impossible for a distributed computer system to simultaneously provide all three of the following guarantees:
- Consistency (every read receives the most recent write or an error)
- Availability (every request receives a response, without guarantee that it contains the most recent version of the information)
- Partition tolerance (the system continues to operate despite arbitrary partitioning due to network failures)
In other words, the CAP theorem states that in the presence of a network partition, one has to choose between consistency and availability.
No distributed system is safe from network failures, thus network partitioning generally has to be tolerated. In the presence of a partition, one is then left with two options: consistency or availability. When choosing consistency over availability, the system will return an error or a time out if a particular information cannot be guaranteed to be up to date due to network partitioning. When choosing availability over consistency, the system will always process the query and try to return the most recent available version of the information, even if it cannot guarantee it is up to date due to network partitioning.
In absence of network failure, that is when the distributed system is running normally, both availability and consistency can be satisfied.
CAP is frequently misunderstood as if one had to choose to abandon one of the three guarantees at all times. In fact, the choice is really between consistency and availability for when a partition happens only; at all other times, no trade-off has to be made.
Database systems designed with traditional ACID guarantees in mind such as RDBMS choose consistency over availability, whereas systems designed around the BASE philosophy, common in the NoSQL movement for example, choose availability over consistency.
The PACELC theorem builds on CAP by stating that even in absence of a partition, another trade-off between latency and consistency occurs.
According to University of California, Berkeley computer scientist Eric Brewer, the theorem first appeared in autumn 1998. It was published as the CAP principle in 1999 and presented as a conjecture by Brewer at the 2000 Symposium on Principles of Distributed Computing (PODC). In 2002, Seth Gilbert and Nancy Lynch of MIT published a formal proof of Brewer's conjecture, rendering it a theorem. This last claim has been criticized, however, this reference does not offer a peer-reviewed formal proof - just an informal assertion on a blog posting.
In 2012 Brewer clarified some of his positions, including why the often-used "two out of three" concept can be misleading or misapplied, and the different definition of consistency used in CAP relative to the one used in ACID.
- PACELC Theorem
- Consistency model
- Fallacies of Distributed Computing
- Paxos (computer science)
- Project management triangle
- Raft (computer science)
- Seth Gilbert and Nancy Lynch, “Brewer's conjecture and the feasibility of consistent, available, partition-tolerant web services”, ACM SIGACT News, Volume 33 Issue 2 (2002), pg. 51-59.
- "Brewer's CAP Theorem", julianbrowne.com, Retrieved 02-Mar-2010
- "Brewers CAP theorem on distributed systems", royans.net
- Greiner, Robert. "CAP Theorem: Revisited". robertgreiner.com. Retrieved 2016-09-02.
- "Better explaining the CAP Theorem - DZone Big Data". dzone.com. Retrieved 2016-09-02.
- Eric Brewer, “CAP twelve years later: How the "rules" have changed”, Computer, Volume 45, Issue 2 (2012), pg. 23-29.
- Armando Fox and Eric Brewer, “Harvest, Yield and Scalable Tolerant Systems”, Proc. 7th Workshop Hot Topics in Operating Systems (HotOS 99), IEEE CS, 1999, pg. 174-178.
- Eric Brewer, "Towards Robust Distributed Systems"
- Mark Burgess, "Deconstructing the `CAP theorem' for CM and DevOps"
- CAP Twelve Years Later: How the "Rules" Have Changed Brewer’s 2012 article.