CS188: Distributed Systems, Spring 2019

Instructor: Ravi Netravali
TAs: Spyridon Mastorakis and Shaghayegh Mardani
Lectures: Monday/Wednesday 12pm-1:50pm in 3400 Boelter Hall
Office Hours

  • Ravi (ravi@cs.ucla.edu): Monday 2pm-4pm (482 Engineering VI)

  • Spyridon (mastorakis@cs.ucla.edu): Tuesday 9am-11am (366 Engineering VI)

  • Shaghayegh (shaghayegh@cs.ucla.edu): Wednesday 2:30pm-4:30pm (486/490 Engineering VI)

Course Overview

Distributed systems enable developers to leverage compute and storage resources across many networked computers to provide services that are fast, highly available, and scalable. However, doing so is challenging as systems can fail at any time, and networks can fail or be arbitrarily slow. This class covers fundamental concepts regarding the design and implementation of distributed systems. Topics include synchronization (e.g., clock synchronization, logical clocks, vector clocks), failure recovery (e.g., snapshotting, primary-backup), consistency models (e.g., linearizability, eventual, causal), consensus protocols (e.g., Paxos, Raft), distributed transactions, and locking. In addition to lectures, students will gain hands-on, practical experience with these topics through multiple programming assignments; the assignments work through the steps of creating a fault-tolerant, sharded key/value store. We will also explore how these concepts have manifested in several real-world, large-scale distributed systems used by Internet companies like Google, Facebook, and Amazon.


In addition to office hours (listed above), students can use the course's Piazza page to ask questions relating to lecture material and programming assignments. Students are also encouraged to respond to other student comments/questions. Please sign up for the Piazza page as soon as possible!


  • 70% Programming Assignments (10% for Assignment 1, 20% each for Assignments 2-4)

  • 30% Midterm exam

Programming Assignments

The course will include four programming assignments which collectively focus on building a fault-tolerant, sharded key/value store. The assignments will be implemented using the Go programming language. The first lab must be completed individually (as it provides an introduction to the Go programming environment, and how we will use it in this course). The remaining three labs may be completed individually, or in groups of two students (each group will turn in one solution, along with a note about how work was divided). Note that expectations are the same for individuals or groups; if you would like a partner, but are unable to find one, please email a TA who will try and pair you with someone. Also note that the same groups will be used for assignments 2-4. Assignments are due by 10pm on the listed due dates. Each assignment will take quite a bit of time (mostly spent designing solutions and debugging), so please start early!

Late policy: each group may use up to four late days over the course of the quarter; late days cannot be used for Assignment 1 which will be completed individually. Late days may be allocated across the programming assignments in any way. To use a late day, please contact a TA ahead of time; late days will not be granted after the fact. Any assignment turned in after late days have been expended will be scored starting at 50% of the total score (i.e., the max score for an assignment worth 100 points will be 50 points). Further, assignments may not be turned in more than 5 days after their due dates. In cases when late days do not suffice, please contact the instructor. However, note that additional late days will not be granted for certain circumstances (e.g., interviews, vacation, etc.); please schedule accordingly.

Collaboration policy: programming assignments must be done individually or with your designated group. The work turned in must be your own, and you may not copy another person's solutions or code, including from online sources. In addition, it is not acceptable to discuss solutions with others. Matters of copying work (or allowing work to be copied) will be treated very seriously. In scenarios where material seems too challenging or due dates seem too hard to meet, please contact the instructor or a TA rather than consulting another student's work.

Midterm exam

The midterm exam will take place during class on Monday, May 20. The exam will be closed book, and will cover all lecture topics up to and including Lecture 14 (distributed transactions).


There is no required textbook for the course; lecture materials will be made available following each lecture. However, the textbook: Distributed Systems (3rd Edition), Maarten Van Steen and Andrew S. Tanenbaum covers many topics that we will discuss, and is a good reference. The textbook is optional, and a free digital copy is available here.


Course content, including lectures and programming assignments, were largely inspired by the following distributed systems courses at other universities: