Course ID: CS134 Distributed Systems Instructor: Konstantinos Kallas (kkallas@ucla.edu) (Website) TA: Arjun Aggarwal (arjuna5@g.ucla.edu) Lecture Time & Location: Tuesdays/Thursdays 4pm-5:50pm -- Dodd Hall 175 Discussion & Location: Fridays 2pm-3:50pm -- Dodd Hall 146 Office Hours:
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, Meta, and Amazon. Finally, we will cover how these concepts apply to contemporary cloud computing.
The course has a heavy programming assignment load using the Go programming language, so it is crucial that you have some familiarity with:
The course will include four heavy 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 need help to find a partner, please come to discussion section and talk to folks. Alternatively, you can post about partner searchers on Piazza or email the 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 a lot of time (mostly spent designing solutions and debugging), so please start early!
Late policy: each group may use up to 8 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 the 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, no more than 4 late days can be used for a single assignment. 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. However, students are encouraged to discuss challenges and solution insights with others during the discussion section.
The programming assignments will take up significant amount of your time while working on the course, so the main focus of the discussion sections will be working on the assignments. The sections will have minimal lecturing from the TA and will primarily be lab sections where students can work on their assignments and discuss their questions with the TA, the LAs, and among each other. Students are encouraged to participate in all discussion sections and to use those as the primary way to get help with the assignments. This way, students can discuss challenges not only with the TA (as would be the case on Piazza and office hours) but also with LAs and other students.
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.
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:
Image copyright: MiSchu/Shutterstock.