Term Project, Phase 1 Due June 30
Phase 1 Logistics: Feel free to work on this as an individual, or you can form a group of 2 or 3 students to collaborate on this first phase of the project. You’ll turn in a link to your code/tests, a short (5 page max) write-up describing your design and implementation, and make a short in-lab presentation about your work. You’ll also post the project write-up and link to the codebase on CourseSpaces.
Topics: Your project should be something you find interesting and challenging that’s closely related to the fundamental topics in the course. For example, you could provide a simulation and testing of logical clocks, vector clocks and global snapshots. Or maybe you want to explore what it would take to make a multiple master MapReduce.
Phase 2 (more on this later): You can either: (1) build on Phase 1, (2) do a final project based on your own ideas, or (3) implemented a Sharded Key Value Store, starting with a codebase provided in Go.
Deliverables
There are five concrete steps to Phase 1 of the final project, as follows:
1. Youmayformagroupanddecideontheprojectyouwouldliketoworkon. Feel free to use CourseSpaces or Slack to find group members and discuss ideas. The teaching team will be happy to discuss project ideas in lab, through Coursespaces messaging, or on Slack, and assist in finding group members.
2. Definetheexactproblemyouwillbeaddressingandhowyouwillgoabout solving it. By June 14, you must submit a proposal (less than a page) describing: your group members list, the problem you want to address, how you plan to address it, an initial design, and a proposed plan for the implementation. Submit your proposal on CourseSpaces. The teaching team will tell you whether we approve, or not, and give you feedback.
3. Executeyourproject:designandbuildsomethingsuperdupercoolforyour portfolio!
4. Writeadocumentdescribingthedesignandimplementationofyourproject, and turn it in along with a link to your project’s code by the final deadline, June 30. The document should be no longer than 5 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 deadline for this phase.
5. Prepareashortin-labpresentationabouttheworkthatyouhavedone.
Endless project ideas…
You should feel free to propose your own project idea. If you’d like to tackle something large, and break it out over Phase I and Phase II, that is exciting! Some big ideas might include the following:
• Build a very high-performance Raft implementation, changing the design as needed.
• Build a distributed, decentralized, fault-tolerant Reddit.
• Build a data-flow processing system in the style of Google FlumeJava or Spark
or Naiad.
• Build a system with asynchronous replication (like Dynamo or Ficus or
Bayou). Perhaps add stronger consistency (as in COPS or Walter or Lynx).
• Use a block-chain to build something other than a crypto-currency.
• Build a data-processing system that is good at both big data (like MapReduce
and Spark) and on-line processing (like a key/value store or SQL database).