CAP theorem states that it is impossible for a distributed software system
to simultaneously provide more than 2 out of 3 of the following guarantees (CAP)
Consistency, Availability, and Partition tolerance
When we design a distributed system, trading off among CAP is almost the first thing we want to consider
CAP theorem says while designing a distributed system we can pick only 2 of the following three options: ### Consistency
All nodes see the same data at the same time
Consistency is achieved by updating several nodes before allowing further reads ### Availability
Every request gets a response on success/failure
Availability is achieved by replicating the data across different servers ### Partition tolerance
The system continues to work despite message loss or partial failure
A system that is partition-tolerant can sustain any amount of network failure
that doesn’t result in a failure of the entire network
Data is sufficiently replicated across combinations of nodes * and networks to keep the system up through intermittent outages
We cannot build a general data store that is
continually available, sequentially consistent, and tolerant to any partition failures
We can only build a system that has any 2 of these three properties
Because, to be consistent, all nodes should see the same set of updates in the same order
But if the network suffers a partition
updates in one partition might not make it to the other partitions
before a client reads from the out-of-date partition after having read from the up-to-date one
The only thing that can be done to cope with this possibility is
to stop serving requests from the out-of-date partition