The author provides an accessible introduction to distributed systems in this web content, focusing on commercial systems in data centers. They highlight the two key issues in distributed programming – distance and having more than one thing – which define the space of possible system designs, and explain how to deal with the implications of these constraints. The text covers scalability, availability, performance, latency, fault tolerance, and other high-level concepts required to tackle more specialized texts. Abstractions and models, system design options, and specific techniques such as partitioning and replication are also explained. Throughout the content, the author emphasizes the physical constraints that impact distributed systems.
http://book.mixu.net/distsys/single-page.html