For this project, you will propose and implement an extension to your FileSync application. The lecture period on April 27 will be devoted to
discussion of your proposal. By April 27, you will need to submit a 1-2
paragraph description of your extension. I will respond promptly with any
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, and the degree of difficulty of your proposed project. 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 an
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.