Projects are to be performed individually, or in groups of 2 or 3. If the project is to be performed in groups, then the scope should be larger. Also, group projects should clearly specify who is going to do what part of the project in the project definition.
The goal of the project is to get some implementation experience with respect to distributed systems. There are way too many technologies out there that are related to distributed systems. Your project may take various different forms, such as:
Some example technologies of interest:
-
Distributed shared memory (DSM)
MPI
Key-value stores (memchached (in memory), HBASE (disk-backed), etc.)
Distributed hash-tables (Chord-like)
Map/Reduce
Stream processing (Twitter Storm, Yahoo! S4, IBM Streams (contact me to get a student copy))
BSP-style graph processing (GoldenORB)
Application: Implement graph algorithms on BSP middleware, using vertex-based programming
Middleware: Implement a BSP middleware
Grid computing (SETI@Home like)
Lowwer-level abstractions
Implement a distributed lock server
Implement a time synchronization service
Implement a library for the Paxos protocol
You can pick something else as well. Note that doing a middleware project is often more difficult but you will learn more. It is important to scope such projects properly.
We have two deliverables for the project:
A report describing the project: requirements, the internal design, and the results. For projects that require showing performance and/or fault-tolerance results, a detailed evaluation is needed as part of the report.
The code and the working demo.
Important Dates:
A single page project description: Due Week 4, Wednesday
Report and demos: Due last week of the course