Scalability Patterns
TL;DR
Horizontal scaling: Add more servers. Vertical scaling: Bigger servers. Stateless services: No session data (easy to scale). Sharding: Split data across servers. Caching: Reduce database load.
Patterns
1. Stateless Services
Key: Store session in Redis, not server memory (any server can handle any request).
2. Database Sharding
Horizontal partitioning: Split users across databases.
Shard 1: Users 0-999K
Shard 2: Users 1M-1.999M
Shard 3: Users 2M-2.999M
Shard key: user_id (determines which shard)
3. Read Replicas
Scale reads: Add more replicas (works for read-heavy workloads).
Common Interview Questions
Q1: "How do you scale to 10 million users?"
Answer:
- Caching (Redis): 90% cache hit rate
- Read replicas: 5-10 replicas for reads
- CDN: Static assets (images, CSS, JS)
- Sharding: When single DB can't handle writes
- Async processing: Message queues for background jobs
Q2: "Vertical vs horizontal scaling?"
Answer:
- Vertical: Upgrade to bigger server (simple, but limits)
- Horizontal: Add more servers (complex, but unlimited scale)
- Prefer horizontal: Scales better, higher availability
Quick Reference
Stateless: Store session externally (Redis)
Sharding: Split data by key (user_id)
Replicas: Add for read scalability
Caching: Reduce database load
Next: Reliability Patterns.