|
TA: Vincent Liu (vincent AT cs DOT washington DOT edu)
Office hours: by appointment (send email)
Lectures: Wednesdays, 6:30pm-9:20pm, in Johnson 075.
Prerequisities: the basic prerequisite is to have taken an undergraduate operating systems course (CSE 451 or equivalent) or an undergraduate networks course (CSE 461 or equivalent). If you haven't taken an undergrad OS or networks course, please come talk to Arvind. We will not be covering undergraduate material in this course.
Papers: you will be responsible for reading approximately three papers before each class, and contributing your thoughts on each assigned paper to the class discussion board before the class that covers it.
Project: The core of the course is the project: to design and build a fault tolerant peer-to-peer Facebook application by the end of the quarter. The project is to be done in groups of three students. The project has three pieces, each building on the previous ones, due roughly every three weeks. This is a very aggressive schedule and so we need every group to get an early start on the assignments. We will provide you some basic message passing code as well as a framework for simulating and emulating a distributed system to aid in debugging. The first project assignment is to build a simple client-server storage system. We then add crash recovery and high availability to this basic system. The final assignment is to use these pieces to construct a fault tolerant Facebook application that can run without a central server, on a cluster of nodes in the undergraduate PC lab.
Exam: near the end of the quarter, I'll hand out a take-home final exam. The questions will test your understanding of the material we cover in the reading and during lectures. You'll have a few days to finish and turn in the final exam.
Announcements:
https://catalyst.uw.edu/gopost/board/arvindk/26947/and the link to the assignment dropbox:
https://catalyst.uw.edu/collectit/dropbox/arvindk/21374
Date |
Reading |
Notes |
Assignments |
March 28 | Introduction | intro, rpc, time | |
April 4 | Global states, Consistency | GPD, SVM | |
April 11 |
Consistency |
consistency | |
April 18 | Transactions and Replication | transactions w/ white bg | |
April 25 | Paxos |
paxos
w/ white bg
|
|
May 2 | Overlays, DHTs |
DHTs
w/ white bg
|
|
May 9 | Cloud Storage | storage w/ white bg | |
May 16 | Map-reduce | MR/Dryad w/ white bg | |
May 23 | Peer-to-peer systems | P2P w/ white bg | |
May 30 | Security |
BFT w/ white bg |
You should also be able to do the programming assignments on your own personal machines; none of them require large or exceptionally powerful machines. I'd recommend doing your work on Linux; I'd start with a standard Linux Ubuntu distribution. Note that the department has made virtual machine images available with the departmental linux installation on them. You'll need to get ahold of VMware to use them.
A few rules of the road are worth mentioning. For design questions, you should feel free to talk with each other about the question and ideas that you come up with. You should not, however, share your written answers with each other directly. If you do discuss ideas with each other, please cite who you discussed with in your turned in work. This is mostly so that you get in the habit of properly attributing collaborations.
Similarly, you should feel free to talk with each other about the programming assignments, and share ideas as you see fit. You can also make use of Google or other resources. However, you must not share code with each other, or rely on code you find else where, such as the Web, to solve the programming assignment directly: you must implement your own code to solve each programming assignment. Unless the programming assignemnt specifies otherwise (and a few of them will), tou can pick whatever programming environment or tools to build on that you like -- e.g., you can make use of shells, interpreters, and within reason, libraries or other building blocks that don't directly solve the problem for you. As before, if you do discuss a programming assignment with someone else or find useful sources of information (e.g., code or technical descriptions on the Web), please cite or otherwise attribute all of your sources.
Spec for single person assignment
out: Friday March 30th, 2012
due: Tuesday May 8th, 2012, by 11:59pm
Spec for single person assignment
out: Friday May 11th, 2012
due: Wednesday June 6th, 2012, by 11:59pm