Distributed systems and applications are commonplace today. For example, Internet companies employ distributed systems to support the services they offer to worldwide customers (e.g., search, email, social applications, etc.). Other companies employ or operate distributed applications, more to support their main business needs (e.g., credit card processing, mobile communication, data storage, etc.). In this course, we study principles and building blocks important for anyone involved in the development and operation of distributed systems and applications. In particular, we study different classes of failures and how to build systems resilient to faults.

Learning outcomes

1.Understand principles underlying the development of distributed systems 2.Understand common building blocks for distributed system development 3.Understand handling of failures in distributed systems 4.Experience the complexities involved in developing a distributed system
Number of credit hours per week 5
Course eligibility Compulsory
Presence of students On-campus


1.Distributed system principles 2.Distributed system building blocks 3.Distributed algorithms & protocols 4.Fault-tolerance, replication, availability & consistency 5.Examples & case studies 6.Advanced topics and trends

Compulsory readings

Selected chapters from: Distributed Systems: Principles and Paradigms. Andrew S. Tanenbaum & Maarten van Steen. Prentice Hall (a recent edition). Distributed Systems: Concepts and Design. George Coulouris, Jean Dollimore, Tim Kindberg. Addison Wesley (a recent edition). Additional material as announced in class.


Programming in Java (also familiarity with C & C++), data structures and algorithms, operating systems, computer network basics, databases