This is a first-day-of-class overview of the spring 2019 edition of CMPS128 (“Distributed Systems”), an upper-division undergraduate course in the Computer Science and Engineering Department at the UC Santa Cruz Baskin School of Engineering.
Hi, I’m Lindsey Kuper! (Call me “Lindsey”.)
- Email: firstname.lastname@example.org
- Office location: Engineering 2, Room 349B
- Office hours: Wednesdays 10:30-11:30am and Fridays 2:45-3:45pm (sign up for a 15-minute slot)
- Research areas: Programming languages, distributed systems, parallelism, concurrency, verification
- Email: email@example.com
- Office hours: Tuesdays, 1-2pm (Jack Baskin Engineering, Room 118)
Tutors and readers
These folks will hold group tutoring sessions and/or help with grading your work!
Emma Gomish (tutor/reader)
- Tutoring hours: Mondays, 11:30am-12:30pm (Stevenson Fireside Lounge)
- 5/6 session rescheduled to Thursday 5/2 (same time and place)
- 5/27 session rescheduled to Wednesday 5/29 (same time and place)
Romeo Jung (tutor)
- Tutoring hours: Tuesdays/Thursdays, 2:45-3:45pm (McHenry Ground Floor Rm 0334)
Aasim Khan (tutor/reader)
- Tutoring hours: Fridays, 11:30am-12:30pm (Stevenson Fireside Lounge)
Lawrence Lawson (reader)
Pete Wilcox (reader)
- All ten colleges represented!
- Several majors represented!
A few essential details about the course
- Upper-division undergraduate course
- Significant “programming-in-the-large” project component
- Class meets Mondays, Wednesdays, and Fridays, 1:20-2:25pm, Stevenson College Room 175 (supposedly an 11m walk from Science Hill)
- Sections (optional, but strongly encouraged) meet at two times (choose one you like):
- Mondays, 4:00-5:05pm, Physical Sciences Room 130
- Fridays, 10:40-11:45am, Physical Sciences Room 130
- Final exam: 8-11am on Thursday, June 13
- Canvas (for official announcements and assignments): https://canvas.ucsc.edu/courses/22168
- Piazza (optional; primarily for student-to-student Q&A): https://piazza.com/ucsc/spring2019/cmps128/home
- Course web page: http://composition.al/CMPS128-2019-04/
- This document: http://composition.al/CMPS128-2019-04/course-overview.html
What’s this course about?
The theory and practice of distributed systems. Some of the topics we’ll cover are:
- Time and asynchrony. No two computers can reason about each others’ perception of time. What does it mean to talk about time when we don’t share a clock?
- Fault tolerance and replication. Given that computers crash and messages lost, how can we write protocols and algorithms that have adequate redundancy to tolerate failure? Maybe if I think a computer will crash, it’s a good idea to run the same computation on more than one! Maybe if I think messages will be lost, I should send the same message more than once!
- Consistency and consensus. Is our system storing the right data and providing the right responses? I might have two “replicas” that aren’t actually replicas! If replicas disagree, how do we know which one is right?
- Parallelism. Why deal with all the pain of distributed systems? Sometimes, if you throw a bunch of computers at a problem, you can do things faster – much faster.
The schedule has more details!
Official course description
Covers topics in distributed computing including communication, naming, synchronization, consistency and replication, fault tolerance, and security. Examples drawn from peer-to-peer systems, online gaming, the World Wide Web; other systems also used to illustrate approaches to these topics. Students implement simple distributed systems over the course of the quarter. Prerequisite(s): course 101 or Computer Engineering 150. Course 111 or 105 recommended.
In this course, you will:
- Learn fundamental concepts and practical skills for reasoning about, designing, and implementing distributed systems.
- Together with your project team, implement a distributed, sharded key-value store, using your programming language and tools of choice.
- Gain experience with practical tools like the Docker containerization platform.
- Enjoy talks from guest speakers.
- Optionally carry out a creative project in which you’ll share your knowledge of the course material with the world in a fun way.
Background you’ll need
You should be comfortable working in at least one programming language at a reasonably large scale (i.e., programs that span multiple files).
You should be willing and able to write code with a team. This will most likely involve using tools intended for programming-in-the-large, such as version control systems and continuous integration tools. It’s up to you to know (or learn) how to use these tools effectively, in a way that works for your team.
History suggests that students who have already taken CMPS111 (Operating Systems) do better in CMPS128 than those who have not. However, this is most likely not so much because CMPS128 relies on any particular knowledge of operating systems; rather, it probably has more to do with the fact that those students have already done a major group programming project. Take this into account when deciding whether CMPS128 is for you.
Whether or not you have previous experience with a large group programming project, the course staff wants you to succeed and is here to help.
For the course project, you will work together with a team to implement a distributed, sharded key-value store. The project will be done in a series of cumulative assignments, with each assignment building on the previous one. (The exception is the first assignment, which must be completed individually.)
You will work together with a team on the project. Teams must have a minimum of two and a maximum of four students; we recommend having four. This arrangement is meant to be “fault-tolerant”: if one person on your team drops the class, the remaining three people should still be able to handle the workload. If two people on your initial team drop, you can talk to us about potentially merging your team with another one.
Assignment descriptions will become available over the course of the quarter. If you want to get a head start on planning when to work on what, tentative deadlines for all the assignments are already on the schedule of topics. Here’s a rough sketch of what the assignments will involve (subject to change):
- Assignment 1: You (individually) will learn to use Docker. (This is the only assignment that will be done individually.)
- Assignment 2: You (with your team) will build a RESTful key-value store that will go in a Docker container.
- Assignment 3: You (with your team) will turn that single key-value store into many key-value stores, partitioned across many containers, and consistent (according to some definition of consistency).
- Assignment 4: You (with your team) will make your key-value store fault-tolerant, by making each partition replicated.
It’s going to be hard! Remember: We’re here to help.
This course doesn’t have a textbook. We may, however, have a few assigned readings that will supplement the lecture material from class. More information about reading assignments will become available over the course of the quarter.
- Participation: 10%
- Midterm: 20%
- Final: 24%
- Course project: 46%
As you can see, participation is a big part of your grade – so come to class and office hours! Because this course doesn’t have a textbook, the best material to study from will be the notes you take in class, and conversations with fellow students and course staff (e.g., on Piazza).
Optional creative project
This course will have an optional creative project component. The creative project, which must be done independently (i.e., not with a team), gives you the opportunity to share your knowledge of the course material with the world in a fun way. I’ll provide more information about the creative project later in the quarter.
Students who choose to do the creative project can opt to have it account for 10% of their grade in the course, in which case the grade percentage allocation will look like this:
- Creative project: 10%
- Participation: 10%
- Midterm: 15%
- Final: 19%
- Course project: 46%
Notice that the course project and participation are worth the same amount as they were before, so the creative project isn’t a way to get out of having to work hard on the course project or participate in class. On the other hand, a killer creative project could help make up for not-so-good exam grades.
You’re in college; you’re expected and encouraged to discuss your work with others. That said, everything you write for this course (code and everything else) must be your own original work.
Properly attribute any work that you use. It is part of your job as a scholar to understand what counts as plagiarism, and make sure you avoid it.
This course borrows a lot of material from Peter Alvaro’s previous editions of the course, especially the one taught in fall 2018.
A note on accessibility
If you have a disability and you require accommodations to achieve equal access in this course, please submit your Accommodation Authorization Letter from the Disability Resource Center (DRC) to me privately during my office hours or by appointment, preferably within the first two weeks of the quarter. I am eager to discuss ways we can ensure your full participation in the course.
I encourage all students who may benefit from learning more about DRC services to contact the DRC.