Piazza idea discussions due: | Thursday, March 20, 2014 |
Proposals due: | Friday, April 4, 2014 |
Code and write-up due: | Friday, May 9, 2014 (11:59pm) |
Presentations: | Tuesday, May 13, 2014 and Thursday, May 15, 2014 (in class) |
In this lab, you will work on a final project of your own choice. Unlike in previous labs, you will work in groups of 3-4 for the final project. You will be required to turn in both your code and a short write-up describing the design and implementation of your project, and to make a short in-class presentation about your work. We will post your write-up and code on the web site after the end of the semester, unless you explicitly talk to us about why you want to keep yours confidential.
The primary requirement is that your project be something interesting. Your project should also have something to do with distributed systems, but that's relatively easy, and it's much more important for your project to be interesting.
We encourage students to choose any project idea that you might think is interesting. If you are not sure, we provide you with two kinds of potential projects. First, we present a reasonably well-defined starting point for your project -- basically, a default project. Second, we give a list of half-baked ideas that we think could turn into an interesting project, but we haven't given them too much thought.
We encourage final projects that leverage multiple classes you might be taking, or that involve other research or projects you are already working on (e.g., MEng and AUP projects).
There are four concrete steps to the final project, as follows:
Form a group. Decide on the project you would like to work on, and post short summary of your idea (one to two paragraphs) on Piazza; use the hw5 tag/folder on Piazza.
Discuss ideas with others in comments on their Piazza posting. Use these postings to help find other students interested in similar ideas for forming a group. Course staff will provide feedback on project ideas on Piazza; if you'd like more detailed feedback, come chat with us in person.
Project proposal. Discuss your proposed idea with course staff over the next week, before the proposal deadline, to flesh out the exact problem you will be addressing, how you will go about doing it, and what tools you might need in the process. By the proposal deadline, you must submit a one-to-two-page proposal describing: your group members list, the problem you want to address, how you plan to address it, and what are you proposing to specifically design and implement.
Submit your proposal to https://ydmao.scripts.mit.edu:444/6.824/handin.py
Write-up and code. Write a document describing the design and implementation of your project, and turn it in along with your project's code by the final deadline. The document should be about 3 pages of text that helps us understand what problem you solved, and what your code does. The code and writeups will be posted online after the end of the semester.
Project presentation. Prepare a short in-class presentation about the work that you have done for your final project. We will provide a projector that you can use to demonstrate your project.
Your goal for the default project is to build a persistent, fault-tolerant, high-performance key/value store, using lab 4 as a starting point. This means:
Note that making your service persistent implies that you will need to keep some Paxos state around on disk, in addition to your key/value state.
You can take a look at the source code for EPaxos here. Feel free to integrate it into your final project, although doing so may be quite non-trivial, and you may be better off implementing the above two optimizations yourself.
Here's a list of ideas to get you started thinking -- but you should feel free to pursue your own ideas.