Consistency - The result of a read at T1 is the same as T2 if there were no writes between T1 and T2. Basically, any read can see any previously completed write.
- Availability - The system can service all reads and writes.
Wikipedia defines Consistency as all nodes see the same data at the same time, but that is incorrect because CAP is defined by the observed rather than actual state of the system.
Most NoSQL database choose availability over consistency (i.e. eventual consistency), which means they cannot provide ACID transactions. Since horizontal scalability and transactions are both important, we should create a system that chooses consistency over availability, but makes every effort to minimize latency and handle some network failure.
What is Optimistic Availability?
Optimistic availability is a characteristic of distributed systems that are coordinated by a master node which allows the system to tolerate arbitrary node failure while preserving availability as long as the master node and at least one relevant node agree on the state of the system. In laymen's terms: given sufficient replication, if a node fails, we're optimistic that the system will remain available.