System Design Tradeoffs for a Web-Scale Service
Context
You are designing a web-scale, user-facing transactional service. Compare key architectural choices across the following dimensions, and ground your answers with quantitative targets (e.g., 20k QPS, P99 200 ms, 99.99% availability):
-
Service decomposition: monolith vs microservices
-
Primary data store: relational vs document vs wide-column
-
Inter-service communication: synchronous RPC vs event-driven messaging
-
API protocol: REST vs gRPC
-
Caching strategies: write-through, write-back, write-around
-
Consistency models: strong vs eventual
-
Data partitioning: range, hash, consistent hashing
-
Load balancing: round-robin, least-connections, consistent hashing
Task
For each dimension:
-
Provide a concrete scenario and quantitative targets (throughput, latency SLOs, availability, retention, etc.).
-
Justify a choice, and discuss implications for:
-
Latency
-
Availability and durability
-
Cost and scalability
-
Operability (developer productivity, observability, change management)
-
Failure modes and mitigations
Where helpful, include small calculations (capacity, shard counts, cache hit/miss effects) and brief formulas. Keep each comparison grounded in realistic, web-scale use cases.