Studiegids

nl en

Distributed Systems

Vak
2025-2026

Admission requirements

This is a practical-intensive course, which involves low-level systems programming. Mastering all this is also highly rewarding. Students are assumed to have taken courses in advanced programming, computer architecture, computer networks, and operating systems at a BSc level. Prior knowledge of Java is not required and can be learned during this course.

Description

Distributed systems are pervasive, and most members of our society interact with them daily. Social networks, government services, and media streaming are all powered by distributed systems. Such systems are composed of many physically distributed computers, all connected through a network. Distributed systems are applied in areas such as data storage (e.g., HDFS, Ceph), data transmission and queueing (e.g., gRPC, ZeroMQ), key-value stores (e.g., Redis, Cassandra), analytics (e.g., Spark, Hive), batch (e.g., MapReduce, Hadoop) and stream processing (e.g., Flink), distributed supercomputing (e.g., MPI), as well as machine learning (e.g., Tensorflow, pytorch).

As computer scientists, systems engineers, or devops, most of the large-scale systems we work with, either directly or indirectly, are actually distributed systems. Both academia and industry invest significant effort into: (i) defining theory and design processes for building such systems; (ii) understanding the performance of these systems; (iii) understanding the interaction between these systems and their underlying computing infrastructure; and (iv) building more efficient systems, that seamlessly scale with the number of users, machines, and workloads.

This course is a practical, systems-first approach at understanding distributed systems. We will discuss general distributed systems topics, such as communication, consistency, fault-tolerance, consensus, and distributed machine learning. We will discuss the design of distributed systems, such as which parts are these composed of (e.g., storage, resource management, scheduling, communication). We will also treat general topics on performance evaluation, such as: benchmarking, workloads, metrics, statistical analysis, and how to design repeatable experiments. In the lab, you will get practical experience in dealing with all aforementioned issues.

Course objectives

After following this course, students will be able to:
1. Understand the main concepts of distributed systems, e.g., communication, resource management and scheduling, consistency, fault-tolerance, performance.
2. Explain and identify trade-offs for designing certain components of distributed systems.
3. Analyse research papers, critically discuss their merit.
4. Design, build, and evaluate distributed systems.
5. Evaluate performance using state-of-the-art experiment design techniques for reproducible performance evaluation.

Timetable

In MyTimetable, you can find all course and programme schedules, allowing you to create your personal timetable. Activities for which you have enrolled via MyStudyMap will automatically appear in your timetable.

Additionally, you can easily link MyTimetable to a calendar app on your phone, and schedule changes will be automatically updated in your calendar. You can also choose to receive email notifications about schedule changes. You can enable notifications in Settings after logging in.

Questions? Watch the video, read the instructions, or contact the ISSC helpdesk.

Note: Joint Degree students from Leiden/Delft need to combine information from both the Leiden and Delft MyTimetables to see a complete schedule. This video explains how to do it.

Mode of instruction

The course is composed of three components:
1. Lectures given by the instructor, to teach key topics in distributed systems, such as storage, communication and queueing, key-value stores, analytics, distributed supercomputing and distributed training of deep neural networks.

  1. Self-study Lab Assignments. The assignments can be done alone or in pairs of two students. Students are expected to work on the lab assignments autonomously, outside of the lectures. This is a hands-on course, where the lab constitutes a large part of the final grade. All assignments are done in Java, using Java's Remote method invocations (RMI) as communication method. For the lab, we use a real distributed computer system, the DAS-6. There are four large-scale lab components: (1) a simple client-server application using Java RMI, to get acquainted with Java, the RMI programming model and performance analysis; (2) build your own MapReduce implementation, where you learn how to build a performing and scalable distributed system; (3) Implement the Raft replicated state machine protocol, where you learn how wo reach consensus in a distributed system; (4) Using your earlier Raft implementation, build a fault-tolerant distributed key-value store.

Assessment method

In this course, the use of generative AI (e.g., ChatGPT, copilot, etc.) is not allowed. We may perform a short individual oral examination where you have to explain your solutions and code. Failure to explain your own code leads to disqualification.

To pass the course, all assignments have to be submitted, and you must score a grade higher than or equal to 5.5 for each of the assignments. Deadlines for the assignments are hard deadlines; for late submissions, 1 point is deducted, and a submission cannot be more than 1 week overdue. The lab grade is the weighted average over the lab assignments, weights to be announced at the start of the course. The grade for the exam also must be 5.5 or higher. Partial scores will not be kept between academic years.

The assessment method is based on the following student assignments: *** Hands-on labs: in total 70% (group-based, mandatory) ** (1) A simple client-server application using Java RMI. (10%) (2) Your own MapReduce implementation. (20%) (3) The Raft replicated state machine protocol. (20%) (4) Using your earlier Raft implementation, build a fault-tolerant distributed key-value store. (20%)

*** Exam: 30% (Individual, mandatory) **

Resits:
Each of the lab assignments can be resubmitted once, until a week after the deadline, at the cost of a penalty point in the grade for that assignment. You can resit at most one of the lab assigments. The grade for that assignment is then capped to a 5.5.

There will be a resit for the exam.

Reading list

M. van Steen and A.S. Tanenbaum, Distributed Systems, 4th ed., distributed-systems.net, 2023.
Note that this book can be legally downloaded for free! See https://www.distributed-systems.net/index.php/books/ds4/.

We also use a selection of research papers, to be announced on BrightSpace.

Registration

As a student, you are responsible for enrolling on time through MyStudyMap.

In this short video, you can see step-by-step how to enrol for courses in MyStudyMap.
Extensive information about the operation of MyStudyMap can be found here.

There are two enrolment periods per year:

  • Enrolment for the fall opens in July

  • Enrolment for the spring opens in December

See this page for more information about deadlines and enrolling for courses and exams.

Note:

  • It is mandatory to enrol for all activities of a course that you are going to follow.

  • Your enrolment is only complete when you submit your course planning in the ‘Ready for enrolment’ tab by clicking ‘Send’.

  • Not being enrolled for an exam/resit means that you are not allowed to participate in the exam/resit.

Contact

Rob van Nieuwpoort

Remarks

Software
Starting from the 2024/2025 academic year, the Faculty of Science will use the software distribution platform Academic Software. Through this platform, you can access the software needed for specific courses in your studies. For some software, your laptop must meet certain system requirements, which will be specified with the software. It is important to install the software before the start of the course. More information about the laptop requirements can be found on the student website.