System designLoading progress…

CDNs and HTTP

Design a cache key, freshness policy and miss path while calculating load and mean-latency effects.

CDNs and HTTP

A CDN is a shared cache near the users, and HTTP tells it what it may do. Cache-Control: max-age=60 gives a freshness lifetime; once a copy is older, the cache revalidates with the validator (ETag / If-None-Match) and the origin can answer 304 Not Modified with no body. private keeps a response out of shared caches, no-store out of all caches, and s-maxage sets a lifetime for shared caches only.

Cache-Control:
age of the cached copy (s)45
decision: FRESH serve the stored copy without contacting the origin validator example: If-None-Match: "abc" vs ETag "abc" → 304, 0 bytes of body

A CDN is a shared cache: it may only store what the directives allow. private keeps a response out of shared caches, no-store out of every cache, no-cache means "store, but revalidate before use", and s-maxage sets the lifetime for shared caches only.

Pick a header, an age and a cache type.

Predict first. Does every response become publicly cacheable because it passed through a CDN?

Chapter context

A cache serves a previously obtained representation instead of repeating work. Its correctness depends on which requests can share a value and how long that value may remain useful. Fast retrieval of the wrong representation is still an error.

Chapter reference: math, worked example & code

This section belongs to the whole chapter, so it is the same on every lesson in it and may cover a different lesson's topic. The code for the experiment you just ran is inside the experiment itself.

Math and notation

If h is hit probability, t-hit hit-path time and t-miss complete miss-path time:

E[T]=h thit+(1−h)tmiss,Rorigin≈(1−h)R.E[T]=h\,t_{hit}+(1-h)t_{miss},\quad R_{origin}\approx(1-h)R.

The miss time here already includes lookup overhead. Means do not establish tail latency, and background refresh can add origin traffic.

Worked example

At 90% hits, 2-ms hit paths and 50-ms complete miss paths, mean latency is 0.9×2+0.1×50=6.8 ms. For 1000 requests/s, nominal origin demand is 100 requests/s. During a complete cache outage, it could become 1000 requests/s rather than remaining at the normal miss rate.

Reference code

The following example uses the Python standard library and does not call a remote service.

from math import isclose
hit=.9
assert isclose(hit*2+(1-hit)*50,6.8)
assert isclose((1-hit)*1000,100)
assert 1000/100 == 10

Python examples are provided for study and local execution; this page does not execute Python.

Common mistakes

A hit ratio is not a correctness guarantee. Mean latency does not reveal p95. Shared caching requires a safe identity and privacy policy; TTL does not replace authorization.