Distributed Systems

Credits: 12

Semester: Summer

Length: full semester


Distributed systems are everywhere - computers, smart houses, control systems, data storage systems, banks, libraries, traffic lights, etc. Nowadays, it is hard to find a system without any kind of distribution (resources, control, etc.).

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 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.

After completing this course students will be able to:

  • understand key principles involved in designing and implementing of distributed systems
  • reason about problems that involve distributed components
  • become familiar with important techniques and best practices for solving problems that arise in distributed contexts
  • get hands-on experience of distributed systems development and dealing with distributed environment problems


  • Students are expected to be experienced in coding (Java/Python)
  • It is recommended to pass “Architectures for Software Systems” course before Distributed Systems course to be familiar with quality attributes, constraints and requirements (architectural drivers) and tradeoff decisions
                - For students who did not pass the course instructors will arrange recitations with explanation of needed topics

Сайт находится в технической разработке