| Users | Read-heavy System | Write-heavy System |
|---|---|---|
| 100 users | Single server handles reads easily; DB writes low volume | Single server handles writes; DB writes manageable |
| 10,000 users | Read cache (Redis/Memcached) added; DB handles writes well | DB write load increases; write latency may rise; caching less effective |
| 1,000,000 users | Multiple read replicas; heavy caching; DB write master may bottleneck | Write DB bottleneck; need sharding or partitioning; caching limited |
| 100,000,000 users | Global CDN for reads; geo-distributed read replicas; write DB sharded and scaled horizontally | Complex write sharding; eventual consistency; write queues and batching; high infrastructure cost |
Read-heavy vs write-heavy systems in HLD - Scaling Approaches Compared
In read-heavy systems, the first bottleneck is usually the database's ability to serve many read queries simultaneously. Without caching or read replicas, the DB CPU and disk I/O get overwhelmed.
In write-heavy systems, the bottleneck is the database's write throughput. Writes are slower and require disk persistence, so the DB write master or primary node becomes the choke point.
- Read-heavy: Use caching layers (Redis, Memcached) to serve frequent reads quickly.
- Deploy read replicas to distribute read load across multiple DB instances.
- Use CDNs to cache static content closer to users globally.
- Write-heavy: Implement database sharding or partitioning to split write load across multiple DB nodes.
- Use write queues or batching to smooth spikes in write traffic.
- Consider eventual consistency models to reduce write latency.
- Scale application servers horizontally to handle increased write requests.
Assuming 1 million users with 10 requests per second each:
- Read-heavy: 10 million reads/sec, 1 million writes/sec.
- One DB instance can handle ~10,000 QPS; need ~1000 read replicas for reads.
- Caching can reduce DB reads by 90%, lowering replicas to ~100.
- Write DB handles 1 million writes/sec; requires sharding into ~100 shards (10k writes/shard).
- Network bandwidth: 1 Gbps = 125 MB/s; high traffic needs multiple network interfaces or data centers.
Start by clarifying if the system is read-heavy or write-heavy. Then discuss bottlenecks specific to that pattern. Propose targeted solutions like caching and read replicas for read-heavy, or sharding and write queues for write-heavy. Always mention trade-offs like consistency and cost.
Your database handles 1000 QPS. Traffic grows 10x. What do you do first?
Answer: Add read replicas and implement caching to reduce load on the primary DB. For write-heavy growth, consider sharding or write queues to distribute write load.