CSE 452/M552: Distributed Systems, Spring 2017
Distributed systems have become central to many aspects of how computers are used, from web applications to e-commerce to content distribution. This senior-level course will cover abstractions and implementation techniques for the construction of distributed systems, including client server computing, the web, cloud computing, peer-to-peer systems, and distributed storage systems. Topics will include remote procedure call, preventing and finding errors in distributed programs, maintaining consistency of distributed state, fault tolerance, and high availability. We believe the best way to learn the material is to implement the ideas presented in the course, and so there will be a substantial programming project. There will be no midterm or final exam.
Two versions of the course will be offered simultaneously: CSE 452 to undergraduates, and CSE M552 to students in the fifth year masters program.
The course is emphatically not curved. Because of the advanced nature of the class, most students taking the class will have done extremely well in prior classes, and we will take that into consideration in assigning grades.Deliverables
- The course project to be done in teams of 2 (451) or individually (M552). The project is split into eight separate assignments, with one due roughly every week.
- Readings in distributed systems (approximately 14 papers).
- Blog entries answering questions about reading (5).
- Problem sets (5): to be done individually.
There is no textbook for this course. Instead, we will assign approximately 14 research papers tied to specific lectures; these readings are to be done before class, as we will take the papers as a starting point, not the end point of the class discussion.
Readings assigned for each lecture are listed on the course calendar. Hack days, lecture topics, problem sets, and project due dates can all also be found on the calendar. Note that you can subscribe to the calendar - this is very convenient.
On days with an assigned paper or short reading, students in both 452 and M552 are required to post a short, unique comment, observation, or question to the discussion board by 10:00am on the day of each class with a paper reading. (Because each post needs to be unique, you are encouraged to post earlier than the deadline.) For each assigned reading, we will post one or two discussion questions to the discussion board, linked off the course web page. You may reply to this question, or pose one of your own; e.g., if you found something in the reading that was confusing. Valid posts can also take a position on a design choice in the paper, discuss the applicability of the paper to an important problem, answer another student's question, etc. Everyone should read the posted comments before class, so please keep your posts short -- a couple sentences is fine.
We grade blog posts on a two point scale: solid, pro forma. If you say something particularly interesting, we'll give you extra credit (e.g., we grade on a three point scale). We will use the 5 best grades over the quarter, so you don't need to write more than 5 posts.
The administrative information regarding this course (homework assignments, project assignments, helpful hints, etc.) will be communicated via the class email list. Be sure to check your CSE 452 email at least daily!
Also helpful is the course calendar which contains the reading assignments and due dates for problem sets and the project assignments.
There's a class discussion board with separate threads for various topics such as blog posts for papers, questions about the project, etc.
- Problem sets: 20%
- Blog posts: 10%
- Project: 70%
The course is not curved. There is no midterm or final exam. For the project, there are eight separately graded assignments. You may skip any assignment at a cost of a 0.3 deduction for the final grade. That is, a B is to complete the assignments up through Lab 3.
We have slip days that you can use at your discretion, but if you find yourself falling behind on an assignment, just let us know. We can be flexible about turn-in dates, but if you are more than a few days late on an assignment, you are likely not to get the next one done on time either. At that point, please talk to us; we are likely to ask you to keep doing the assignments in order, at a one week lag to the rest of the class.
There is no midterm or final exam for this course.
We plan to hand out several short problem sets. They should be done individually. Our intent is to make the problem sets relatively easy (no more than an hour of work) for students who have been paying attention.
The core of the course is to build a highly available, scalable, fault tolerant NoSQL key-value store in the Go programming language. Go is particularly convenient for writing this type of code, and NoSQL stores are widely used in practice.
The labs were initially designed for the MIT graduate distributed systems course, but we have made some modifications (mostly to make it easier to navigate the specifications). Each lab has an extensive test suite that you can use to validate your implementation. At MIT, the labs are done individually over the first 9 weeks of the semester.
We will also automatically grant each group eight slip days for the project assignments, for you to use at your discretion. These are calendar days -- weekends and holidays count. There are no slip days for problem sets. Regardless of your remaining slip days, all assignments must be turned in by Wednesday, June 7 at 9:00pm. In other words, slip days are not available for the last assignment.
CSE's Academic Misconduct Policy.
Collaboration is a good thing. On the other hand, cheating is a serious offense. Please don't do it! Concern about cheating creates an unpleasant environment for everyone. If you cheat, you risk losing your position as a student in the department and the college. The department's policy on cheating is to report any cases to the college cheating committee. What follows afterwards is not fun -- for anyone!
So, how do you draw the line between collaboration and cheating? A great one-sentence guideline is highlighted in our Academic Misconduct Policy:
"In general, any activity you engage in for the purpose of earning credit while avoiding learning, or to help others do so, is likely to be an act of Academic Misconduct."
For this quarter, I will have very relaxed rules with respect to collaboration on the project. You are encouraged to ask for help, from the instructor, from the TA's, from other students. However, do not cross this line: On the project, do not share code or text. Do not look at project solutions that might be on the Internet. Do not use someone else's code or text in your solutions. Sharing ideas, explaining your code to someone to see if they know why it doesn't work, even helping someone else debug if they've run into a wall, all that is ok. Any survival guides you find online are also ok; we'll try to link to them on the main course website, so if you find one that's useful and we haven't put it up, let us know.
All work on the problem sets must be done individually. You may ask clarifying questions of the TA's and the instructor.
The department policy is provided in CSE's Academic Misconduct Policy.