Principles of distributed systems: architecture, communication, synchronization, consistency and replication, and fault tolerance. Methodologies and paradigms for understanding and designing distributed applications. Powerful distributed approaches and their tradeoffs. State-of-the-art examples of distributed systems, such as Web, Web services, peer-to-peer systems, big-data processing frameworks, large-scale data storage. (3 credits).