Skip to main content

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:

  1. Caching (Redis): 90% cache hit rate
  2. Read replicas: 5-10 replicas for reads
  3. CDN: Static assets (images, CSS, JS)
  4. Sharding: When single DB can't handle writes
  5. 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.