SYSTEM DESIGN
System Design Fundamentals: Where to Start
3 min read
A practical guide to approaching system design problems, covering scalability, reliability, and trade-offs.
System Design Fundamentals
System design is about making trade-offs. There’s rarely a perfect solution — only appropriate ones given constraints.
The CAP Theorem
Any distributed system can guarantee at most two of:
flowchart TD
CAP[CAP Theorem]
CAP --> C[Consistency]
CAP --> A[Availability]
CAP --> P[Partition Tolerance]
C --> CP["CP Systems (e.g. HBase, Zookeeper)"]
A --> AP["AP Systems (e.g. Cassandra, CouchDB)"]
Key Concepts
- Horizontal scaling — add more machines
- Vertical scaling — add more power to existing machines
- Load balancing — distribute traffic evenly
- Caching — reduce latency and database load
- Sharding — split data across multiple databases
Further Reading
- Designing Data-Intensive Applications by Martin Kleppmann
- System Design Interview by Alex Xu