What is Instagram?
Instagram is a social networking service that enables its users to upload and share their photos and videos with other users. Instagram users can choose to share information either publicly or privately. Anything shared publicly can be seen by any other user, whereas privately shared content can only be accessed by the specified set of people. Instagram also enables its users to share through many other social networking platforms, such as Facebook, Twitter, Flickr, and Tumblr.
We plan to design a simpler version of Instagram for this design problem, where a user can share photos and follow other users. The “News Feed” for each user will consist of top photos of all the people the user follows.
Requirements and Goals of the System
We’ll focus on the following set of requirements while designing Instagram:
Functional Requirements:
- Users should be able to upload/download/view photos;
- Users can perform searches based on photo/video titles;
- Users can follow other users;
- The system should generate and display a user’s News Feed consisting of top photos from all the people the user follows;
Non-Functional Requirements:
- Our service needs to be highly available;
- The acceptable latency of the system is 200ms for News Feed generation;
- Consistency can take a hit (in the interest of availability) if a user doesn’t see a photo for a while; it should be fine;
- The system should be highly reliable; any uploaded photo or video should never be lost;
Not in Scope: Adding tags to photos, searching photos on tags, commenting on photos, tagging users to photos, who to follow, etc.