CS-179: Project in Computer Science - Computer Networks


Design Specification: Distributed Resource Sharing System

Michalis Faloutsos

You are expected to design and implement develop a resource  sharing system (i.e. file sharing). This project differs from other projects you may have done before in the following ways:

- It requires "design": you have to justify all your choices and the architecture of the system
- The requirements are on purpose vague: users state requirements not specifications, turning  requirements into specifications is your task
- It is open ended: you are free to explore and provide novel features (consult the instructor or the TA before deviating too much)
- You are free and expected to look at current practices and get inspiration (like any engineer should do).
  You need to document all resources you will use.
- The instrucotr is like a future "boss": he assigned a task and you need to complete it in a timely and professional manner.
- The TA and the instructor will be consultants but not as co-developers.
- You will deliver an professional quality  documentation of the system and the process for developping it (format will be given).


The user requirements are the following:

The system in more detail:
- Users want to be able to join a networked community and share resources. Users should be able to join, leave, specify which resources they will share, request and acquire resources.
- The system should operate over a network. The location of the participating users should not impede their capabilities to participate.
- As in any real system, there are several parameters and dimensions that are important by default such as:

You are expected to consider and discuss all these issues for your system. Given the time constraints, I do not expect you to address all of them in your system, but they should be discussed in your report. Proposing solutions in writing or possible extensions is expected.

Handling desing trade-offs.

Any real engineered system needs to strike a balance between trade-offs. Your design should do this explcitly. You should  identify the trade-offs and explain your rationale in choosing a particular solution.