CS134: Distributed Systems, Spring 2020

Instructor: Ravi Netravali
TAs: Howard Xie and Meet Taraviya
Lectures: Monday/Wednesday 10am-11:50am
Office Hours (all times PDT)

  • Ravi (ravi@cs.ucla.edu): Monday/Wednesday 11:30am-12:30pm; Friday 12:30pm-1:30pm

  • Howard Xie (howardx@cs.ucla.edu): Tuesday 12pm-2pm

  • Meet Taraviya (meet11061997@gmail.com): Thursday 1pm-3pm

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.

Remote Lectures, Discussion Sections, and Office Hours

Prior to each class (MW 10-11:50am), the lecture will be posted as a video on CCLE (i.e., lectures are recorded, not live). However, because this is a fairly interactive class, we will host extra office hours that cover the entire week and will help students ask questions in smaller groups. Discussion sections will still operate normally, in a live fashion.

The following Zoom links will be used for all office hours and discussion sections run by each staff member:


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 (especially due to the remote class structure), please post about partner searchers on Piazza or 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 (PDT) 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 be take-home, and will be distributed and due on Wednesday, May 20; there will be no lecture that day. The exam will be released sometime in the morning on the 20th, and it will be due sometime later in the day. The regular class time will fall into this window, and the exam will be designed to fit within the regular class time (i.e., 2 hours). The exam should be done entirely independently, and will cover all lecture topics up to and including Lecture 15 (two-phase locking).


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: