It states that it’s impossible for a system to simultaneously provide all three of the following guarantees:
- Consistency: A read is guaranteed to return the most recent write for a given client.
- Availability: A non-failing node will return a reasonable response within a reasonable amount of time (no error or timeout)
- Partition Tolerance: The system will continue to function when network partitions occur.
The modern CAP goal should be to maximize combinations of consistency and availability that make sense for the specific application.
In reality the choice 2 of 3 view is missleading, in essence CAP takes place when partitions can’t communicate within a certain time-bound or timeout, a program must make decision
- cancel the operation (decrease availability)
- proceed with the operation (risking inconsistency)