System requirements
Functional:
List functional requirements for the system (Ask the chat bot for hints if stuck.)...
tweets includes text, pic and videos.
text: limited to 280 characters
pic: 5MB per pic and 9 pictures
video: one video. max size is 15m.
users range: 100m?
post 5 tweets per day per user
view 20 tweets per day per user
general users:
user managements (register, unregister, login)
user authentication/authorization
compose tweets
delete tweets
share tweets
track the updates from other users
favorite tweets
get the favorite tweets list
read the tweet
premium features will consider as future discussions
edit tweets
admin users:
admin user management
monitor/analysis/alert/logging
Non-Functional:
List non-functional requirements for the system...
scalability: need scale to 100m users
latency: 100m to post one text only tweet; 1s to post the text and pic tweet; 10s to upload 15m video. need get 20 tweets in 100ms.
consistence: high consistence for twitter system
availability: five 9 availability requirements
security: need high security to protect user info
privacy: need protect user's privacy
Capacity estimation
Estimate the scale of the system you are going to design...
throughput:
write: 100m*5/24*3600
read: 100m*20/24*3600
tweet struct:
tweet id: 64Byte
user id: 32Byte
time: 8 Byte
tweet contents: 280Byte
pic address: 8Byte
video address: 8Byte
status: 32Byte
total: ~512B
daily data increase: 512B*100m*5= 256GB
1 year: 256*365=934.4TB
API design
Define what APIs are expected from the system...
define several APIs as examples:
create_post(user_id, post_id, str text_contents, pic_link, video_link, timestamp)
delete_post(user_id, post_id);
Database design
Defining the system data model early on will clarify how data will flow among different components of the system. Also you could draw an ER diagram using the diagramming tool to enhance your design...
user database: use SQL database
post database: use key-value database
High-level design
You should identify enough components that are needed to solve the actual problem from end to end. Also remember to draw a block diagram using the diagramming tool to augment your design. If you are unfamiliar with the tool, you can simply describe your design to the chat bot and ask it to generate a starter diagram for you to modify...
Request flows
Explain how the request flows from end to end in your high level design. Also you could draw a sequence diagram using the diagramming tool to enhance your explanation...
Detailed component design
Dig deeper into 2-3 components and explain in detail how they work. For example, how well does each component scale? Any relevant algorithm or data structure you like to use for a component? Also you could draw a diagram using the diagramming tool to enhance your design...
use msg queue for all the service communications with database
use cache for database: CDN for contents and Redis for database
add logging/metrix/monitoring/alerting
Trade offs/Tech choices
Explain any trade offs you have made and why you made certain tech choices...
Failure scenarios/bottlenecks
Try to discuss as many failure scenarios/bottlenecks as possible.
Future improvements
What are some future improvements you would make? How would you mitigate the failure scenario(s) you described above?