04
Use each for what it's good at
CDN wins for: images, JavaScript bundles, CSS, fonts, public API responses (leaderboards, product catalogs), video segments. Anything where the same bytes get sent to thousands of users. The CDN absorbs the fan-out so your origin doesn't.
App cache wins for: per-user sessions, personalized feeds, rate-limit counters, hot DB rows, precomputed aggregations, leaderboard state (writes fast, reads fast). Anything that's per-user or frequently mutated.
The mistake: trying to put per-user data behind a CDN. Cache hit rate ≈ 0 (each user is unique). You pay CDN cost for no benefit. Put per-user data in app-level cache close to your backend.