The aims of this course are to study the fundamental characteristics of distributed systems, including their models and architectures; the implications for software design; some of the techniques that have been used to build them; and the resulting details of good distributed algorithms and applications. The course focuses on basic concepts underlying design and implementation of distributed systems. It covers algorithms and lowerbounds for fundamental problems in distributed computation such as clock synchronization, mutual exclusion, routing, (graph) coloring, coordination, consensus, group communication, transactions, security and privacy, and replicated data management. These topics are discussed in the context of real-world systems such as databases, peer to peer networks, distributed file systems, distributed robotics, and sensor networks.
This is not a course on computer networking (e.g., routing protocols in the Internet). Programming assignments do however require you to write multithreaded networking code.