System Design Basics
Before designing a System
- Clarify the system requirements and agree on the scope of system.
- User Cases
- who will be using it
- how they are going to use it
- Constraints
- traffic and data handling constraints at scale
- scale of the system(req/s, req types data write/s, data read/s)
- other requirements such as multi-threading, read or write oriented
- Abstract Design(High-level architectures)
- Sketch the important components and connections between them
- application service layer
- list of required services
- data storage layer
- load balancers, service partitions, database(master/slave db clusters),
caching system
- Component Design
- component + API
- object oriented design
- map features to modules
- relationship among modules:
- singeletons (uniq instance)
- compositions (made up of many other objects)
- inheritance
- Database Schema Design
- Understanding Bottlenecks