Project 1 Design Activity

There are two prerequisites for this activity:

Next, review the Project 1 Specification. Your goal for this activity is to build a preliminary design for your system: what components you will have, their communication flow, message types, and functionality. You should modify the README.md file in your Project 1 repository to include this information, and update it as your design changes during development.

Starting Points

You already know what components and features you’re required to have, but it may be helpful to reduce them down to bullet point form. Next, for each feature, think about the communication flows that will be required. For instance, when initializing your network, Storage Nodes will need to communicate with the Controller when they come online. As part of this exercise, try to design a .proto file that models your communication patterns.

Diagramming

It can be quite useful to draw out the system and its communication flows. You are strongly encouraged to check these into your repository and include them in the README.md file.

Command Line Interfaces

How will you interact with your system? If it’s a command line interface, determine what options/flags the commands will need to support. For instance, perhaps your client works like this:

# Store 'some_file.jpg' and split it into 10-megabyte chunks
./client put some_file.jpg 10

# Retrieve the file
./client get some_file.jpg

# Delete a file
./client delete some_file.jpg

(etc, etc)

You don’t have to follow this example – it’s just one way of building the interface. Another approach may include using a scanner to prompt the user for commands and process them.

NOTE it’s probably easier to design the command line interfaces for the Controller and Storage Nodes first. They will likely have to support only a few options. E.g., the Controller may only need to know what port to listen on, and the Storage Node may simply need to know the host:port combination for the Controller and a target storage directory.

Submission

Update README.md in your Project 1 repository. If you are done early, please show the course staff so they can review your design decisions.