System Design
System design is a wide topic. Even a experienced software engineer at top IT company may not be an expert on system design. Many books, articles, and solve real large scale system design problems may needed.
Steps (S - N - A - K - E)
- Scenario: (Case/Interface)
- Necessary: (Contain/Hypothesis)
- Application: (Services/Algorithms)
- Kilobyte: (Data)
- Evolution
Scenario
Enumerate All possible cases
- Register / Login
- Main Function One
- Main Function Two
- ...
Sort Requirement
Think about requirement and priority
Necessary
- Ask:
- User Number
- Active Users
- Predict
- User
- Concurrent User:
- Peak User:
- : c is a constant
- Future Expand:
- Users growing: max user amount in 3 months
- Concurrent User:
- Traffic
- Traffic per user (bps)
- MAX peak traffic
- Memory (< 1 TB is acceptable)
- Memory per user
- MAX daily memory
- Storage
- Type of files (e.g movie, music need to store multiple qualities)
- Amount of files
- User
Application
- Replay the case, add a service for each request
- Merge the services
Kilobyte
- Append dataset for each request below a service
- Choose storage types
Evolution
- Analyze
- with
- Better: constrains
- Broader: new cases
- Deeper: details
- from the views of
- Performance
- Scalability
- Robustness
- with