Content Delivery Network
Edge caching at global scale
Design a content delivery network: caches in about 100 locations that serve customers' files near users, send few requests back to origins, and remove content everywhere within seconds.
Overview
A content delivery network (CDN) is a fleet of caching proxy servers spread over many points of presence (PoPs): racks of servers in data centers close to users. A customer points its domain, say static.example.com, at the CDN. A user's request reaches a nearby PoP; if a server there has the file, it answers in a few milliseconds; if not, it fetches the file, keeps a copy, and answers.
This page designs the CDN itself. When a site should use a CDN at all, and what is safe to cache, are in the CDN vs Direct Serving topic; the HTTP rules a CDN follows (Cache-Control, Vary, stale content, cache keys) are in the CDN Deep Dive topic; how users are steered to a location is in the GSLB, GeoDNS and Anycast topic. Here we size the fleet and design the parts an interviewer probes: how a PoP avoids storing the same object on every server, what to keep on limited disks, how misses are funneled so the origin sees few of them, and how a purge reaches hundreds of servers quickly and verifiably.
Questions to ask first
- Who are the customers? — Many websites and apps, each with its own origin
- What content? — Mostly static: images, scripts, downloads, video segments
- How much traffic? — 20 Tbit/s at peak, 8 Tbit/s on average; objects average 100 KB
- How many locations? — About 100 PoPs, grouped under about 10 regional parent PoPs
- How fast must a purge land? — Everywhere within 5 seconds (a target we chose), with a status the customer can check
- HTTPS? — Yes, with each customer's certificate at the edge
- Dynamic or personalized pages? — Passed through without caching
What you will be able to do
- Size a CDN from peak egress: servers, storage and the traffic that reaches parents and origins.
- Make a PoP store each object once, and keep popular objects despite limited disk.
- Explain tiered caching and request collapsing with the origin load they save.
- Design a purge system that reaches every server fast and knows when it is done.
- Say how the CDN behaves when a PoP, a parent or the origin fails.
Key concepts
- Points of presence
- Anycast or DNS steering
- Rendezvous hashing in a PoP
- Admission on second hit
- Tiered caching (shield)
- Request collapsing
- Purge fan-out with acks
- Versioned URLs
- Serve stale on error
Functional requirements
- Serve GET and HEAD for customer content from the PoP the user reaches
- On a miss, fetch from a regional parent, and on its miss from the origin
- Follow HTTP caching rules: store only what may be stored, for as long as allowed; revalidate with conditional requests
- Purge by exact URL, by prefix or by tag; report when every server has done it
- Terminate TLS with each customer's certificate
- Give customers per-minute statistics and raw logs
Non-functional requirements
- A cache hit answers in under 20 ms at p50 for users near a PoP (a target we chose)
- At least 90% of bytes served from the edge for typical static sites (a target we chose)
- A purge reaches every server within 5 seconds at p99 (a target we chose)
- Losing a whole PoP only moves its users to the next nearest one
- If an origin fails, content still in cache keeps being served
Interview questions
- How many servers does the CDN need?
- Why hash requests to one server inside a PoP?
- What does an origin shield do, and what does it cost?
- How do you purge content from every server within seconds?
- Anycast or DNS to route users?
- What happens when the customer's origin goes down?
- How do you decide what to keep on the edge disks?
Sign up free to read the full topic
More System Design topics
- Checksums and Data Integrity
- CI/CD Pipeline
- Clickstream Analytics Lakehouse
- Code Generation System
- Columnar File Formats (Parquet and ORC)
- Consistent Hashing
- Core Banking System
- CRDTs: Conflict-Free Replicated Data Types
- Customer Onboarding and KYC
- Customer Support Chatbot System
- Data Labeling and Annotation System
- Data Lakes and Lakehouse Table Formats
Start free on Cariara · Coding problems · System design studio