Prerequisites

Before attempting this assignment, please watch at least Lectures 1--11 (and do the accompanying readings).  Later lectures are also helpful for this assignment, but the first nine lectures are absolutely essential.

Learning Goals

Students will practice and demonstrate the design of scalable software architectures by:

The Assignment

For this assignment (and also for HW6) you will submit architecture design documents for a few kinds of systems.  You may work alone or in pairs (groups of three are not allowed).  If you choose to work alone on both HW5 and HW6 then you may skip half of HW6.  Otherwise (if working as a pair on either assignment) you must design all four architectures.

For each of the systems below, you will create several kinds of documentation for your architectures.  A sample architecture doc is posted here:

Sample Architecture: Meeting Scheduler

Notice, that the document need not be very long.

Your document should include:

Most of you have never done this kind of design, so it is essential that you come to office hours to discuss your designs to get feedback before turning in your solutions. 

To review and prepare you for the assignment, you might also want to read about Stack Overflow's architecture, though the article goes into a lot of hardware details that are irrelevant if you are deploying to the cloud.

Your architecture should be scalable to tens of millions of monthly-active users.  I am not expecting you to make use of NoSQL databases, because they won't be covered until later in the class.  You can achieve this level of scale with relational/SQL databases.

Architecture 1: Tinyurl

Design an architecture to implement a url shortener like https://tinyurl.com.  This should be pretty simple.

Note that the HTTP protocol has redirection built in.  Your service can just return a 301 redirection to redirect a browser (originally directed to a shortened URL) to go to the final destination.

Architecture 2: A New Social Media, Forum, or Messaging Platform

If you could build a new kind of social media platform, what would it look like?  Maybe you can solve some problems that exist in current platforms?  Please make sure your design is highly scalable.

Your app should notify users of new messages/content even if they are not actively using the app.  Push notifications are covered in Lecture 12.  If you choose to use smartphone push notifications, please remember that these are not 100% reliable.  So, your app should also have a way to request/pull a list of new messages.

Submission

Turn in one big PDF for the team.  As in HW4, only one partner should submit.  The non-submitting partner should submit one line of text naming the partner.  The document should clearly list the authors (including netids).  Remember that you should review your designs with a member of the teaching staff at least once before the deadline.