题目
如何设计CDN缓存策略解决电商大促期间商品图片更新延迟问题?
信息
- 类型:问答
- 难度:⭐⭐
考点
CDN缓存原理,HTTP缓存头配置,缓存失效策略,回源机制,性能优化
快速回答
解决电商图片更新延迟的核心策略:
- 使用
Cache-Control: max-age配合stale-while-revalidate实现后台刷新 - 通过版本化URL(如
/product_v2.jpg)确保资源即时更新 - 设置
must-revalidate防止过期资源被错误缓存 - 利用CDN的Purge API实现主动缓存刷新
- 配置分层缓存策略(边缘节点+父节点)减少回源压力
问题场景
电商大促期间频繁更新商品图片,用户访问CDN节点时出现图片更新延迟(最长30分钟),导致显示旧价格引发客诉。
核心原理
CDN通过边缘节点缓存静态资源:
1. 用户请求 → 边缘节点检查缓存
2. 缓存有效(HIT)→ 直接返回
3. 缓存失效(MISS)→ 回源站获取
4. 缓存更新 → 返回用户并存储
缓存策略设计
HTTP缓存头配置(关键)
# Nginx源站配置示例
location ~* \.(jpg|png)$ {
# 基础缓存时间(5分钟)
add_header Cache-Control "public, max-age=300";
# 允许后台刷新(更新后仍可用旧缓存10分钟)
add_header Cache-Control "stale-while-revalidate=600";
# 强制过期后必须验证
add_header Cache-Control "must-revalidate";
# 添加版本标识(解决浏览器缓存)
add_header ETag "${image_version}";
}缓存更新策略
- 版本化URL:
/product.jpg?v=20230815修改版本号使旧缓存立即失效 - 主动刷新:调用CDN API刷新变更资源
# 阿里云CDN刷新示例 curl "https://cdn.aliyuncs.com?Action=RefreshObjectCaches &ObjectPath=product.jpg &ObjectType=File"
最佳实践
- 分层缓存:边缘节点(300s TTL)+ 父节点(1800s TTL)
- 回源优化:
- 使用
If-None-Match协商缓存减少带宽 - 设置回源连接池避免TCP重建
- 使用
- 监控指标:关注缓存命中率(>95%)、回源率(<5%)
常见错误
- 错误1:设置
max-age=0导致所有请求回源(失去加速效果) - 错误2:未配置
Vary头导致移动/PC端缓存混乱 - 错误3:大促前未预热缓存导致回源雪崩
扩展知识
- 动态内容加速:通过边缘计算实现AB测试、个性化内容
- 安全防护:CDN集成WAF防御DDoS攻击
- 协议优化:QUIC/HTTP3减少TCP队头阻塞