I wanted to do a TL;DR; on the CAP theorem, because what distributed systems blog would this be without mentioning it.

In 1998, Eric Brewer proposed a theorem, that distributed systems must make tradeoffs and cannot provide all capbilities imaginable. In particular, Brewer singled out 3 distinct areas that this tradeoff involves.

Consistency

This is about making sure that events happening in your system can be acknolwedged by the entire system. Or, to quote Wikipedia’s entry, your reads acknowledge the latest writes.

Availability

This property implies that clients will receive a non-error response to their requests.

Partition Tolerance

Systems that are partition tolerant can function and recover under terrible network conditions.

The premise is that you can only pick 2 of the above. The plot twist is that if you don’t have a system that is tolerant of partitions then you don’t really have a distributed system.