This is an introductory course in distributed systems. During the course, students will learn the fundamental principles and techniques that can be applied to design and develop distributed systems and will cover architectures of distributed systems, communication, naming, fault tolerance, consistency replication, virtualization, and security. In addition, we will discuss different aspects of the design and implementation of popular distributed systems (such as BitTorrent, google file system, HDFS, etc.), programming models (MapReduce, MapReduce2/YARN) and consensus algorithms (Raft and Paxos). The course will not only cover computer science-related topics but will also include a substantial part of software engineering activities.

Practical exercises will include:

  • Cloud computing (Amazon Web Services)
  • Virtualization (Virtual Machines and Containers)
  • Time Synchronization (NTP and PTP)
  • Naming (DNS)
  • Distributed File Systems (DFS)

Practical exercises require UNIX-based operating systems

To build familiarity with the real-world use of Cloud Computing students will learn about and then apply a cost model for using traditional “on premise” deployment of a software system vs a Cloud deployment. Finally, students will build a very simple application on both PaaS and IaaS, starting with analyzing vendor offerings, then selecting a vendor and deploying into their environment.