Three properties
- Consistency — every request receives the most recent result or an error
- Availability — every request receives a response (not necessarily the most recent data)
- Partition Tolerance — the system continues operating despite network failures between nodes
In practice
Partition Tolerance is mandatory for any real distributed system — the network will always fail at some point. So the choice is: CP (MySQL, HBase, ZooKeeper) or AP (Cassandra, CouchDB, DynamoDB). MongoDB and Redis can be configured for either model.