Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jianminchen/6cd268163dd69d89247a097a2f835cd5 to your computer and use it in GitHub Desktop.
Save jianminchen/6cd268163dd69d89247a097a2f835cd5 to your computer and use it in GitHub Desktop.
System design - mock interview 1/ 30/ 2018 10:00 PM
Design Instagram:-
Use cases:-
1. Upload photos to instagram
2. Download photos
3. Follower should be able to see my upload in their timeline
4. Home timeline
100M users
10M active users
3-4 photos per day
~200 people to follow
0-10M
Average size ~400KB
40M *400KB :- ~4tb of data stored per day
APIs :-
1. Upload(UserId, Raw photo, app Id)
2. HomeTimeline(UserId);
Data Model
User :- List<UserId> followers
Location , other UserMetadata , createdDate
Photo :-
Url of the thumbnail
Url of the full Image
UserId of the uploader
Timestamp of upload
Metadata about quality
Follower
User1, User2 :- User2 is following user1
timeLine
List<Post>
post :-
UserId
photo details :- photoId
10M followers :-
Upload -> load balancer(round robin) - > how many followers I have .
If followers is <1000 :- Update the in memory timeline for the 1000 users
if followers >1000 :- store this info in the UserLEvel Cache
Storing :- go through a thumbnail server and encoding server :- encode in hd /sd quality :
- Generate the photo Id :- Push to the timeline of my followers
shard key :- UserId :- hot user
timestamp :- hot node :- all writes are going
timestamp :- photoId :- help us retrieve the recent photos and avoid hot node in this case
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment