Instructors: Laurent Bindschaedler, Deepak Garg and Yiting Xia
Teaching assistants (TAs): Qi Guo, Pierfrancesco Ingo, Federico De Marchi, Yiming Lei
Mondays: 12:00-14:00, Wednesdays: 10:00-12:00
Location: Building E1.3, HS 002 (note: location was E1.5, 029 until 19.04.2023)
Lectures will also be accessible live via Zoom, but you are strongly encouraged to participate in person since remote participation might be interrupted due to network, audio and video issues.
The entire course content will be available on a moodle page at https://moodle.mpi-sws.org/course/view.php?id=66. You need to enroll for the course to access the non-public content. We will also use moodle for discussions.
This course introduces the principles, design, and implementation of distributed systems. The lectures focus primarily on the principles and design of distributed systems, and cover communication, distributed storage, synchronization, fault tolerance, naming, addressing, distributed databases, and distributed security and privacy. A course project exposes students to the implementation aspects of distributed systems and serves to solidify students' understanding of the course material.
This core course is open to Bachelor and Master students. Bachelor students must have passed the basic courses on Programming 2 and Math 2, as well as the concurrent programming or alternatively the operating systems course. Proficiency in programming (C/C++) and UNIX development tools (e.g. make, gcc, gdb) is required to successfully complete this course. The language of the course is English. All lectures, office hours, tutorials and communication with the course staff will be conducted exclusively in English.
There is no prescribed textbook, but the following books are reasonable references:
A small number of papers will be made available to the class. The lectures will cover some topics in more depth than the books, and also in a different order.
Summary lecture notes or slides will be available on the course web-site for some of the material covered in the class. These notes are primarily meant to help students with taking notes. However, they will not accurately or consistently cover all the material discussed in the lectures. Students are expected to know all material covered in the lectures, and in the assigned readings and projects. Therefore, students should not rely only on the lecture notes. They should attend class regularly, take their own notes, and complete all assignments.
In a sequence of project assignments, students will build a multi-server file system called Yet-Another File System (yfs) in the spirit of Frangipani. The eight project stages correspond to the design and implementation of:
The project will require a substantial amount of software design and implementation. The software produced will be graded based on its ability to successfully pass a set of functional and performance tests.
Project teams: Students can work on the projects in small teams of two students. It is the responsibility of the students to form and manage their own teams. If your teammate drops the course you must immediately find a replacement, irrespectively of the current project stage. All team members must be involved in all aspects of the project. To collaborate effectively, team members should divide the project responsibilities so that they can work in parallel. However, each member is responsible for, and should be familiar with, all the work done by the team. Proper time management is critical – if you don't start working on the assignments early you will not be able to complete the projects!
Full details about team registration and individual projects will be made available on the course moodle.
After every project assignment’s submission, there will be an in-class quiz (a mini-test) to check the students’ understanding of that project stage. These quizzes must be attempted individually even if the project assignment was submitted by a group of two. Every quiz will be graded and its score will count towards the score of the corresponding project assignment.
There will be a midterm exam (covering material from the first half of the course), a final exam (covering the entire course), and an optional repeat exam (covering the entire course). The exams carry equal weight, only the best two of the three exams are counted towards your grade. All exams will be open book and based on the material covered in lectures, paper readings, and projects.
To pass the course, a student's total score on the project assignments and quizzes must be at least 50% of the maximum possible score, and the student must pass at least two of the three exams. The course grade will be based on a weighted score, where 50% of the weight will be on the project assignments and quizzes, and 25% will be on each of the best two of the three exams (we will ignore the exam with the lowest score).