This document discusses key concepts in designing large-scale distributed systems. It covers consistency models like eventual consistency and sequential consistency. It discusses why systems are distributed, including for failures and geolocation. It also covers decentralized architectures, transactions, and consensus protocols like Paxos. Tradeoffs between different techniques are presented, like consistency vs availability. Real-world examples like Dynamo and Megastore are also summarized.