This document provides an overview of distributed systems, including definitions, important aspects, examples, characteristics, goals, architectures, and techniques for scaling distributed systems. A distributed system is defined as a collection of independent computers that appears as a single coherent system to users. Key goals of distributed systems are making resources accessible, hiding the distribution of resources from users, being open through standard interfaces, and being scalable to additional users and resources.