You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
209 lines
8.0 KiB
209 lines
8.0 KiB
[ |
|
{ |
|
"id": "url-shortener-easy", |
|
"name": "URL Shortener", |
|
"description": "Build a basic service to shorten URLs with a single backend.", |
|
"difficulty": "easy", |
|
"targetRps": 100, |
|
"durationSec": 60, |
|
"maxMonthlyUsd": 100, |
|
"maxP95LatencyMs": 200, |
|
"requiredAvailabilityPct": 99.0, |
|
"mustInclude": ["database"], |
|
"hints": ["Start with a basic backend and persistent storage."] |
|
}, |
|
{ |
|
"id": "url-shortener-medium", |
|
"name": "URL Shortener", |
|
"description": "Scale your URL shortener to handle traffic spikes and ensure high availability.", |
|
"difficulty": "medium", |
|
"targetRps": 1000, |
|
"durationSec": 180, |
|
"maxMonthlyUsd": 300, |
|
"maxP95LatencyMs": 150, |
|
"requiredAvailabilityPct": 99.9, |
|
"mustInclude": ["database", "loadBalancer"], |
|
"encouragedComponents": ["cache"], |
|
"hints": ["Consider caching and horizontal scaling."] |
|
}, |
|
{ |
|
"id": "url-shortener-hard", |
|
"name": "URL Shortener", |
|
"description": "Design a globally distributed URL shortening service with low latency and high availability.", |
|
"difficulty": "hard", |
|
"targetRps": 10000, |
|
"durationSec": 300, |
|
"maxMonthlyUsd": 1000, |
|
"maxP95LatencyMs": 100, |
|
"requiredAvailabilityPct": 99.99, |
|
"mustInclude": ["cdn", "database"], |
|
"encouragedComponents": ["cache", "messageQueue"], |
|
"hints": ["Think about write-path consistency and global replication."] |
|
}, |
|
|
|
{ |
|
"id": "chat-app-easy", |
|
"name": "Chat App", |
|
"description": "Implement a simple chat app for small group communication.", |
|
"difficulty": "easy", |
|
"targetRps": 50, |
|
"durationSec": 120, |
|
"maxMonthlyUsd": 150, |
|
"maxP95LatencyMs": 300, |
|
"requiredAvailabilityPct": 99.0, |
|
"mustInclude": ["webserver", "database"], |
|
"hints": ["You don’t need to persist every message yet."] |
|
}, |
|
{ |
|
"id": "chat-app-medium", |
|
"name": "Chat App", |
|
"description": "Support real-time chat across mobile and web, with message persistence.", |
|
"difficulty": "medium", |
|
"targetRps": 500, |
|
"durationSec": 300, |
|
"maxMonthlyUsd": 500, |
|
"maxP95LatencyMs": 200, |
|
"requiredAvailabilityPct": 99.9, |
|
"mustInclude": ["webserver", "database", "messageQueue"], |
|
"encouragedComponents": ["cache"], |
|
"hints": ["Ensure you decouple frontend from persistence."] |
|
}, |
|
{ |
|
"id": "chat-app-hard", |
|
"name": "Chat App", |
|
"description": "Design a Slack-scale chat platform supporting typing indicators, read receipts, and delivery guarantees.", |
|
"difficulty": "hard", |
|
"targetRps": 5000, |
|
"durationSec": 600, |
|
"maxMonthlyUsd": 1500, |
|
"maxP95LatencyMs": 100, |
|
"requiredAvailabilityPct": 99.99, |
|
"mustInclude": ["messageQueue", "database"], |
|
"discouragedComponents": ["single-instance webserver"], |
|
"hints": ["Think about pub/sub, retries, and ordering guarantees."] |
|
}, |
|
|
|
{ |
|
"id": "netflix-easy", |
|
"name": "Netflix Clone", |
|
"description": "Build a basic video streaming service with direct file access.", |
|
"difficulty": "easy", |
|
"targetRps": 200, |
|
"durationSec": 300, |
|
"maxMonthlyUsd": 500, |
|
"maxP95LatencyMs": 500, |
|
"requiredAvailabilityPct": 99.0, |
|
"mustInclude": ["cdn"], |
|
"hints": ["You don’t need full-blown adaptive streaming yet."] |
|
}, |
|
{ |
|
"id": "netflix-medium", |
|
"name": "Netflix Clone", |
|
"description": "Add video transcoding, caching, and recommendations.", |
|
"difficulty": "medium", |
|
"targetRps": 1000, |
|
"durationSec": 600, |
|
"maxMonthlyUsd": 2000, |
|
"maxP95LatencyMs": 300, |
|
"requiredAvailabilityPct": 99.9, |
|
"mustInclude": ["cdn", "data pipeline", "cache"], |
|
"encouragedComponents": ["monitoring/alerting"], |
|
"hints": ["Think about asynchronous jobs and caching strategy."] |
|
}, |
|
{ |
|
"id": "netflix-hard", |
|
"name": "Netflix Clone", |
|
"description": "Design a globally resilient, multi-region Netflix-scale system with intelligent failover and real-time telemetry.", |
|
"difficulty": "hard", |
|
"targetRps": 10000, |
|
"durationSec": 900, |
|
"maxMonthlyUsd": 10000, |
|
"maxP95LatencyMs": 200, |
|
"requiredAvailabilityPct": 99.999, |
|
"mustInclude": ["cdn", "data pipeline", "monitoring/alerting"], |
|
"encouragedComponents": ["messageQueue", "cache", "third party service"], |
|
"hints": ["You’ll need intelligent routing and fallback mechanisms."] |
|
}, |
|
{ |
|
"id": "rate-limiter-easy", |
|
"name": "Rate Limiter", |
|
"description": "Build a basic in-memory rate limiter for a single instance service.", |
|
"difficulty": "easy", |
|
"targetRps": 200, |
|
"durationSec": 60, |
|
"maxMonthlyUsd": 50, |
|
"maxP95LatencyMs": 100, |
|
"requiredAvailabilityPct": 99.0, |
|
"mustInclude": ["webserver"], |
|
"hints": ["Use an in-memory store and sliding window or token bucket."] |
|
}, |
|
{ |
|
"id": "rate-limiter-medium", |
|
"name": "Rate Limiter", |
|
"description": "Design a rate limiter that works across multiple instances and enforces global quotas.", |
|
"difficulty": "medium", |
|
"targetRps": 1000, |
|
"durationSec": 180, |
|
"maxMonthlyUsd": 300, |
|
"maxP95LatencyMs": 50, |
|
"requiredAvailabilityPct": 99.9, |
|
"mustInclude": ["webserver", "cache"], |
|
"encouragedComponents": ["messageQueue"], |
|
"hints": ["Consider Redis or distributed token buckets. Account for clock drift."] |
|
}, |
|
{ |
|
"id": "rate-limiter-hard", |
|
"name": "Rate Limiter", |
|
"description": "Build a globally distributed rate limiter with per-user and per-region policies.", |
|
"difficulty": "hard", |
|
"targetRps": 5000, |
|
"durationSec": 300, |
|
"maxMonthlyUsd": 1000, |
|
"maxP95LatencyMs": 30, |
|
"requiredAvailabilityPct": 99.99, |
|
"mustInclude": ["cache"], |
|
"encouragedComponents": ["cdn", "data pipeline", "monitoring/alerting"], |
|
"hints": ["Ensure low latency despite distributed state. Avoid single points of failure."] |
|
}, |
|
{ |
|
"id": "metrics-system-easy", |
|
"name": "Metrics System", |
|
"description": "Create a basic system that collects and stores custom app metrics locally.", |
|
"difficulty": "easy", |
|
"targetRps": 100, |
|
"durationSec": 120, |
|
"maxMonthlyUsd": 100, |
|
"maxP95LatencyMs": 200, |
|
"requiredAvailabilityPct": 99.0, |
|
"mustInclude": ["webserver", "database"], |
|
"hints": ["Start by storing metrics as timestamped values in a simple DB."] |
|
}, |
|
{ |
|
"id": "metrics-system-medium", |
|
"name": "Metrics System", |
|
"description": "Design a pull-based metrics system like Prometheus that scrapes multiple services.", |
|
"difficulty": "medium", |
|
"targetRps": 1000, |
|
"durationSec": 300, |
|
"maxMonthlyUsd": 500, |
|
"maxP95LatencyMs": 100, |
|
"requiredAvailabilityPct": 99.9, |
|
"mustInclude": ["data pipeline", "monitoring/alerting"], |
|
"encouragedComponents": ["cache"], |
|
"hints": ["Consider time-series indexing and label-based queries."] |
|
}, |
|
{ |
|
"id": "metrics-system-hard", |
|
"name": "Metrics System", |
|
"description": "Build a scalable, multi-tenant metrics platform with real-time alerts and dashboard support.", |
|
"difficulty": "hard", |
|
"targetRps": 5000, |
|
"durationSec": 600, |
|
"maxMonthlyUsd": 1500, |
|
"maxP95LatencyMs": 50, |
|
"requiredAvailabilityPct": 99.99, |
|
"mustInclude": ["monitoring/alerting", "data pipeline"], |
|
"encouragedComponents": ["messageQueue", "cache", "third party service"], |
|
"hints": ["Think about downsampling, alert thresholds, and dashboard queries."] |
|
} |
|
]
|
|
|