Distributed Systems


Course Objective

By taking this course, you will learn:
1. Explain the basic concepts, objectives, and functions of distributed
computing (eco)systems, e.g.,
communication, resource management and scheduling, data consistency,
fault-tolerance, performance.
2. Compare the basic characteristics of distributed computing with other
computing paradigms (i.e., centralized, parallel).
3. Identify proficiently the different flavors of modern distributed
ecosystems (i.e., peer-to-peer systems, cluster computing, grid
computing, cloud computing, datacenters, distributed HPC, SDN, Big Data
systems, IoT systems).
4. Analyze proficiently the trade-offs inherent in the design of modern
distributed systems.
5. Design your portfolio distributed-system, with many basic and some
complex operations of modern distributed systems.
6. Implement and deploy your portfolio distributed-system.
7. Analyze your portfolio distributed-system.

Course Content

This course focuses on distributed computing systems and ecosystems. In
general, debugging and tuning existing systems and ecosystems, and
designing, implementing, and analyzing new distributed computing systems
remains vital and challenging for both industry and academia.

Starting with the mid-1990s, computing is undergoing a revolution, in
which collections of independent computers appear to users as a single,
albeit distributed, computing system. Motivated by the advent of the
Internet, by the increase in the computation capacity of consumer
computers, by the commoditization of server-grade machines, by energy
constraints, etc., the distributed computing paradigm has permeated all
fields using computers. Current distributed computing applications range
from social networks to banking, from peer-to-peer file-sharing to
high-performance computing used in research, from massively multiplayer
online games to business-critical workloads, etc. Important advances
have helped to fuse heterogeneous resources into truly global
distributed systems and ecosystems, for example in scientific computing,
where distributed computation is using Big Data and distributed sensors
to produce meaningful progress for the humankind. We will focus in this
course on a number of these modern examples of distributed computing

Although so many distributed systems and ecosystems already exist, the
list of conceptual and technical challenges they pose is long. Depending
on requirements, even trivial communication between nodes of the
distributed system can be challenging. The failure of a single node, or
sometimes even a performance hiccup, can bring an entire system down;
with it, other nodes or entire other systems may also crash,
experiencing correlated and catastrophic failures. Data consistency and
coordinating nodes remain important challenges made worse by the
large-scale of real-world deployments. Poor resource management and
naive scheduling can lead to orders-of-magnitude higher operational
costs and consumption of energy that we simply cannot spare. It is not
uncommon for a modern distributed system to quickly rise and then fall
in popularity, as exemplified by the 2016 example of Pokemon Go. We will
present in this course real-world situations where modern distributed
systems have behaved poorly.

Addressing these challenges requires unique approaches and concepts.
Separating concerns and breaking down problems into smaller cases often
lead to limited success, because many properties of distributed systems
can only be achieved end-to-end. Can anyone imagine a perfectly reliable
production pipeline, if even one of its key stages can suffer failures?
Building capability by adding resources is often offset by the
distributed nature of the system. Can anyone ignore the physical
limitations of communication around the globe? In this course, we will
focus on the unique approaches and principles of distributed systems,
from specific architectures and communication protocols, to specific
concepts in resource management and scheduling, data consistency,
fault-tolerance, and performance.

Teaching Methods

The course uses dr. Iosup's gamification method. The course is taught as
a series of lectures, in
combination with self-study and design sessions, and with a large
practical assignment. The
course also has important design and seminar components.

Method of Assessment

Written exam. Report on the practical assignment. In-class assignments
include: design, seminar, Q&A. There are other gamification elements.
For a total of maximum 10,000 points (equivalent to a grade of 10), the
course activities will be graded as follows:
1) Exam, questions (max 6,000 points)
2) Practical, lab exercise (max 4,000 points)
3) Design and seminar sessions (max 2,000 points)
4) In-class activity: max 50p per session

There is only a resit opportunity for the exam.

Entry Requirements

Ability to work in teams for the practical assignment. Ability to design
software and to
develop code using modern software engineering practices, e.g., setting
up your own GitHub repository, co-editing using tools such as Overleaf
or Sharelatex, etc., is a big plus. Experience with big data processing,
multimedia and online gaming systems, scientific (workflow) computing is
also a plus.


The course uses as textbook the book: Maarten van Steen and Andrew S.
Tanenbaum, Distributed Systems, 3rd. Ed., online edition, 2017. (free
for all) [Online] Available:


Recent material is only available as lecture slides and selected
publications. The lecture slides also recommend additional literature.
The study guide available on Canvas also indicates other worthwhile
sources of information.

Target Audience


Additional Information

This course uses the gamification technique developed by prof. Iosup and
his team.

Explanation Canvas

The course guide is mandatory reading for every student prior to any
other activity in the course.

Recommended background knowledge

Students should have taken standard courses on:
- Computer networks.
- Operating systems.
- Programming paradigms, in particular OOP and/or actor-based
- Software engineering.
Prior experience with Internet, web, distributed, or parallel
programming and algorithms is helpful.
Prior experience with operating systems development and analysis, and in
general experience with computer systems courses, is a big plus.

General Information

Course Code X_400130
Credits 6 EC
Period P2
Course Level 400
Language of Tuition English
Faculty Faculty of Science
Course Coordinator dr. A. Uta MSc
Examiner prof. dr. ir. A. Iosup
Teaching Staff dr. A. Uta MSc
prof. dr. ir. A. Iosup

Practical Information

You need to register for this course yourself

Last-minute registration is available for this course.

Teaching Methods Seminar, Lecture