CSCI 339

Distributed Systems

Home | Calendar | Assignments | CS@Williams

Final Project

The previous three assignments have given you experience with single-tier client/server systems, multi-tier client/server systems, and cluster-based systems. The purpose of your fourth and final project is to give you experience with computing in the wide-area. (I will also accept other projects as long as you discuss them with me in advance.)

This project should be done in teams of one or two.

Part 0: PlanetLab Slice Setup

Each group has been given access to a PlanetLab slice (williams_339[a-g]). All PlanetLab machines are accessible via SSH using the key that you uploaded to the PLC website during class. Remember that these machines should not be used for reliable storage. Make sure you make copies of any files that you need on the department web servers.

You are welcome to use any resource that you wish to simplify PlanetLab experimentation. In particular, you may wish to use Plush, SWORD, Nebula, or CoMon. See the lecture notes for more information on how to configure Plush, Nebula, and SWORD.

Part 1: Application Development

The project guidelines for this assignment are much more open-ended than your previous three projects. I want you to be creative! I recommend that you start small and make many assumptions, and then relax assumptions and use more machines as time permits. Your goal should be to utilize 20 PlanetLab machines. Of course, you are welcome to use more if you wish. Running on PlanetLab can be frustrating. Start early and ask lots of questions. I want you to have fun with this assignment!

If you are struggling to come up with creative project ideas, I suggest that you try to build a simple P2P file transfer application. To do this, choose one node as the source of your file transfer. Then build a tree among the file recipients, passing the file, or pieces of the file, down the tree. There are many optional optimizations that you can make here. For example, nodes at the same level of the tree could also exchange data among themselves. The figure below shows this design.

It is important to decide what metric you are optimizing for when you build your application. Are you trying to minimize transfer time or minimize aggregate bandwidth? Make sure you discuss these decisions in your writeup.

Part 2: Writeup + Presentation

Plan to present your results (12-15 minutes) to the class during the last week of the semester. Volunteers to go first are welcome!

To submit your code and final writuep, submit via turnin by May 18th at 5pm. No extensions are possible since this is a college policy.

Please include the following files in your final tarball:

1) Final paper. Your final writeup should include an intro, architecture summary (and figure), evaluation section (minimum of 3-4 graphs with analysis), related work, future work (possible extensions), and conclusions. It should be 8-10 pages in length, and should be written in LaTeX using a two column format. If you need help with formatting, let me know. You may use this style file to assist with formatting.

Also, please include a description and evaluation of any tools that you used (Plush, Nebula, etc). My goal is to make Plush/Nebula as user friendly as possible, so your feedback is extremely important to me. Include your general thoughts/reflections again, too. I found those to be very helpful.

2) Code. All the files for your source code only. Please do not include any executables.

3) Makefile. Your Makefile (or compile instructions) and any other information that I need to run your code.

Resources