System Design Fundamentals
11 items
11 items
Everything you need to know before designing distributed systems - a complete refresher
This is a comprehensive refresher covering all system design fundamentals: scalability, latency, availability, CAP theorem, load balancing, caching, databases, async processing, networking, and capacity estimation. Use this as a quick review before interviews or when starting a new design. Each section summarizes the key concepts - dive into individual topics for deeper understanding.
You cannot design systems without understanding these concepts. Scaling, consistency, availability - these aren't optional topics. They're the vocabulary of distributed systems.
There are no perfect solutions. CAP theorem, latency vs consistency, cost vs reliability - system design is about choosing the right trade-offs for your requirements.
Know your latencies, throughputs, and capacity numbers. Back-of-envelope math separates good designs from impossible ones.
Scalability is a system's ability to handle increased load by adding resources.
Vertical Scaling (Scale Up): Add more CPU/RAM to existing server - Simple, no code changes - Limited by hardware ceiling - Single point of failure
Horizontal Scaling (Scale Out): Add more servers - Unlimited theoretical scale - Requires stateless design - Adds complexity (load balancing, data distribution)
Key Principle: Design for horizontal scaling from the start. Keep services stateless - store state in databases, caches, or external stores.
Stateless vs Stateful:
| Stateless | Stateful | |-----------|----------| | No server-side session | Session stored in server memory | | Any server can handle any request | Requests tied to specific server | | Easy to scale horizontally | Requires sticky sessions | | Store state externally (Redis, DB) | Failover loses state |
Deep dive: Scalability Fundamentals