Skip to content
No description, website, or topics provided.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

CMPS128 Fall 2019

Distributed Systems

key value
When: Monday, Wednesday and Friday at 1:20 PM.
Where: Merrill Academic 102
Who: Peter Alvaro
Office hours: Mondays @ 2:25 (begins at Merrill Academic 102 and ends in E2)
Fridays @ 12:30 (begins at E2 and ends at Merrill)
Prerequisites: CSE101 or CE150 required. CSE111 or CSE105 recommended.
Optional Text: Distributed Systems, Coulouris et al.
TA: Aldrin Montana and Elisabeth Oliver
TA sections: TBD
Modules: Modules
Readings (in flux): Readings


This course will explore fundamental as well as emerging topics in distributed systems.

Distributed systems are notoriously difficult to program, and even harder to reason about. Much of this difficulty arises from uncertainty in the executions of distributed programs. Uncertainty about the ordering and timing of events and communication give rise to concerns about the consistency of program outputs and states. Uncertainty about what may go wrong during an execution (e.g., computers crashing, messages being lost) gives rise to concerns about the completeness of these outputs and states. Together, these sources of uncertainty make achieving even relatively modest guarantees in large-scale systems extremely difficult.

While distributed systems have been studied for some time, they have only recently become essentially ubiquitous: nearly all non-trivial systems are now physically distributed. It is no longer possible to relegate responsibility for managing the complexity of distributed systems to a group of expert library or infrastructure writers: all programmers must now be distributed programmers. This is both a crisis and an opportunity.

This course will cover both theoretical and practical aspects of distributed systems and distributed programming, diving the subject matter into four core Modules:

  • Time and Asynchrony
  • Fault Tolerance
  • Consistency
  • Parallelism and Scaleup

Readings and Prerequisites

The optional text for CMPS128 is Distributed Systems by Coulouris et al. Despite having perhaps the worst cover art that I have ever seen on any book in my life, this text covers most of the fundamental concepts of the course. Note however that the text is supplemental. The key material of this course is covered in lecture, and reading the text will not be sufficient to pass the examinations.

For optional reading, Mikito Takada's Distributed Systems for fun and profit covers many of the same topics in a sophisticated (albeit high-level) way.

Students are required to have completed either CMPS101 or CE150, and are recommended to have completed CMPS111 or CMPS105.

One of the purposes of CMPS128 is to familiarize you with practical aspects of implementing and reasoning about programs that require the cooperation of some number of physical machines. Hence system building is a critical part of the course. While CMPS128 will involve a substantial implementation component, we will not be teaching any particular language. That is to say, you are here to build distributed systems, but we expect you to come to the table with enough programming knowledge and experience to build non-distributed systems with minimal guidance. Regardless of the coursework you have undertaken, if you are not comfortable using programming languages (e.g. C, Java, Python, Ruby, Scala, Erlang, Bloom -- pick your poison) to build systems, this course is not for you.

Assigments and Grading

Pop quizzes

To ensure that everyone keeps up with the reading and attends class, we may hold a small number of pop quizzes. Students who do not attend class on the day of a pop quiz will not receive credit. If you need to miss class, please email the professor or TA before the absence with a brief explanation of the cause.

Final Project

The final project will involve implementing and managing fault-tolerant distributed system. This will be a substantial enginering effort, and we encourage you to work in teams of up to four people.

The final project will be divided into four sub-projects, coming due roughly every two weeks.

Project specifications will be posted on a separate page and announced on Piazza. They will usually be posted before they are announced, but they are subject to change until announcement. If we need to change an assigment after it was announced, we will email the class about the change.

Assigments announcements will always include a due date.

Late assignments are not accepted. Late assignments will forfeit 10% of the grade for every day late. Students are granted one grace day that they may use for any assignment submission to avoid this penalty.


There will be two examinations: the midterm and the final.


Subject Share
Pop quizzes 5%
Participation 10%
Midterm 15%
Project 40%
Final 30%

Final projects are required to pass the course. The fact that participation accounts for 10% of the grade (and pop quizzes for 5%) should give you an idea of the important of class attendance.

Academic honesty

Collaboration is a key part of research. I encourage you to discuss the readings and the final project ideas with your classmates. However, you must reveal the students with whom you discussed the assignments. Failure to do so will result in formal disciplinary proceedings.

I should not need to say so, but I do: plagiarism in any form is not acceptable and will not be tolerated. As researchers, we always stand upon the shoulders of giants, and building upon existing work is the norm. It is essential, however, that we provide proper attribution. When in doubt, cite!

You can’t perform that action at this time.