Aim: Why are computing systems becoming increasingly distributed? How can we build reliable and fault-tolerant distributed systems? Why does the Internet scale to billions of users? How are modern distributed systems such as the cloud, the smart grid, or connected cars built? These are a few questions that our course on distributed systems addresses. The goal of the courses is to understand the design of distributed systems and discuss the underlying principles and mechanisms that drive today's distributed systems. Our lectures provide you with the required fundamentals, and our labs give you a hands-on experience in developing distributed systems and exploring their real-world challenges.

Content: We begin the course with an introduction to the basic concepts of distributed systems and the challenges they pose. After that, we revisit the required background in communication systems and operating systems. We continue with the main course content and focus on:

  • Naming 
  • Mutual Exclusion and Election
  • Clocks and Time 
  • Consistency and Replication 
  • Fault Tolerance in Distributed Systems 
  • Selected Applications in Distributed Systems 

Our lectures provide students with the required fundamentals, and labs give students a hands-on experience in developing distributed systems and exploring their real-world challenges. This course offers learning experiences that involve hands-on experimentation and analysis as they reinforce student understanding of concepts and their application to real-world problems. Overall, this course provides the students the ability to understand fundamental issues in the design of methods for distributed systems.