题目重点:解释静态资源分发,设计 cache key、TTL、版本与故障时的回源保护。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 公共静态资源与个人化/权限内容分开;CDN是否缓存由配置和响应合同决定。
解题路线
- 请求经边缘节点命中缓存或回源,距离缩短和连接复用可能降延迟,但缓存不正确会扩散错误。
- cache key包含影响表示的维度,例如路径、必要query和编码;不能将每个无意义参数都分裂key,也不能忽略用户权限导致共享缓存泄漏。
- 静态asset用内容hash版本,长TTL并保留旧版本;HTML/接口按更新与一致性需求设策略。purge传播不应被当作瞬时全球原子操作。
- 缓存miss风暴要请求合并、限回源与合适stale策略;故障时是否允许旧内容按资源风险选择。
- 验证hitratio、回源流量、错误、分地域P95和内容版本,不只看总带宽下降。
手动走一遍
app.abcd.js内容hash更新到app.efgh.js,旧页面仍能加载旧资源;立即删除旧asset会让在途用户失败。个人余额接口不能因“GET可缓存”就公共缓存;认证与响应缓存合同必须明确。
规模与取舍
源站流量约请求量×miss率,但热点失效会短时放大;边缘储存/回源与地域分布影响成本。
易错点与追问
容易失分的边界
- CDN只要开就安全缓存所有GET。
- purge瞬时全球一致。
- 大TTL不保留旧asset。
继续深挖
- 动态内容怎样谨慎用边缘缓存?
- 防回源雪崩有哪些取舍?
