For this project, you will propose and implement an extension to
your FileSync application. The lecture period on November 25 will be
discussion of your proposal. By November 25, you will need to submit a 1-2
paragraph description of your extension. I will respond promptly with
comments about your proposal. You are strongly encouraged to meet with
the professor early and often to discuss your ideas.
For this project, you may choose to work in teams of 2. I will expect teams to complete roughly 2 times more work than individuals, and each team member will receive a grade based on my assessment of the individual contributions.
Your final grade will be based upon your proposal, the functionality of your final submission, the design of your final submission, the degree of difficulty of your proposed project, and your final demonstration. Submissions that demonstrate a low level of difficulty and/or few new features will be graded accordingly. Upon reading your proposal I will give you feedback on the level of difficulty of the project.
Following are several ideas for Project 3. This is not meant to be
exhaustive list, and is meant to inspire your creativity. Keep in mind
that I will expect the amount of work required for Project 3 to exceed that of Project 2.
Implement and compare several load-aware strategies for selecting
nodes where replicas will be placed. For example, you might consider a
round-robin approach, a random approach, an approach that keeps track
of the amount of space available for backup on each node, and an
approach that considers the uptime of each node. Experimentally
compare the approaches using metrics such as how often restoration is
successful and submit a writeup.
Replace the current strategy you use to maintain a list of peers
with a DHT such as CAN. Use the DHT to help you determine where data
should be backed up.
Back up your files in chunks a la BitTorrent. To restore, download chunks in parallel from several nodes.
Integrate one or more web services in addition to the Google Docs service. You will need to come up with (good!) justification as to why the chosen service enhances the service provided by your application.
Provide a SOAP interface to your service. Compare the SOAP-based implementation to the REST-based implementation.
Reimplement your application using another platform, such as Django or Ruby on Rails. Compare the features of the RESTlet architecture to the platform you choose.
Implement a security mechanism to enable devices to authenticate themselves. Encrypt content before sending over the network.
Note: No portion of your code may be copied from any other source including another text book, a web page, or another student (current or former). You must provide citations for any sources you have used in designing and implementing your program.