CDN场景下文件缓存最佳实践
缓存介绍
浏览器缓存
浏览器缓存结果来说分为四种
- Service Worker
- Memory Cache
- Disk Cache
- Push Cache
其中Memory Cache、Disk Cache最为常见,
Memory Cache —内存中的缓存,随着页面的关闭而释放
Disk Cache —硬盘中的缓存,不会随着浏览器关闭而释放,需要手动清理
一般浏览器缓存根据默认缓存策略或Cache-Control设置进行缓存
- Cache-Control由CDN返回或者文件header头携带,CDN header配置>源文件header头配置
- 如果 Cache-Control、Expires均没设置,按照如下缓存策略计算
if ((last_modified > 0) && (date > 0) && (date - last_modified) > 0) {
return (date - last_modified) / 10;
}
CDN缓存
我们可以通过浏览器判断文件是否有CDN缓存,在Response Headers字段内,可以查看详细的请求和返回的报文信息。
- Age:为CDN返回的头部字段,表示该文件在CDN节点上缓存的时间,单位为秒。只有文件存在于节点上Age字段才会出现,当文件被刷新后或者文件被清除的首次访问,在此前文件并未缓存,无Age头部字段,需要注意当Age为0时,表示节点已有文件的缓存,但由于缓存已过期,本次无法直接使用该缓存,需回源校验。
- X-Swift-SaveTime:CDN节点上的缓存RS(swift)的时间,即该文件是在什么时间缓存到CDN节点上。
- X-Swift-CacheTime:CDN节点上的允许缓存时间,即该文件可以在CDN节点上缓存多久,是指文件在CDN节点缓存的总时间。计算还有多久需要回源刷新= ’X-Swift-CacheTime’ – ‘Age’。
- HIT:表示已缓存。
- MISS:节点上无该文件的缓存,回源请求。
CDN缓存策略由源文件header头及CDN缓存周期决定
业务缓存设置
一般业务会遇到三种场景,1、高频访问需要及时刷新,2、高频访问不需要及时刷新,3、低频访问
根据这三种场景我们CDN缓存和浏览器缓存可按如下表格选择
场景 | CDN缓存设置 | 浏览器缓存设置 |
---|---|---|
高频访问且及时更新 | 缓存时间小(小于1天) | 缓存时间小,可和CDN缓存配置一样 |
高频访问不更新 | 缓存时间大(大于30天) | 缓存时间大,且要大于CDN缓存周期 |
低频访问 | 缓存时间(1天-30天) | 缓存时间大,且要大于CDN缓存周期 |
Cache-Control
此处介绍最常见的几种设置
- Cache-Control:no-cache 告诉CDN和浏览器不需要缓存,资源请求需要强一致校验
- Cache-Control:max-age=3600 表示缓存内容将在3600秒后失效,注意:此处要和CDN缓存更新时间比较,date+max-age需要大于当前访问时间才会被本地浏览器缓存
- Cache-Control:s-maxage=3600 同max-age作用一样,只在代理服务器中生效
weixin_42783087: internalTrafficPolicy 对 NodePort 可以生效吗?
weixin_42783087: externalTrafficPolicy 和 internalTrafficPolicy 可以同时设置吗?
北风之神c: 总结的很全面,写得赞,博主用心了。 celery对目录层级文件名称格式要求太高,只适合规划新的项目,对不规则文件夹套用难度高。 所以新手使用celery很仔细的建立文件夹名字、文件夹层级、python文件名字。 所以网上的celery博客教程虽然很多,但是并不能学会使用,因为要运行起来需要以下6个方面都掌握好,博客文字很难表达清楚或者没有写全面以下6个方面。 celery消费任务不执行或者报错NotRegistered,与很多方面有关系,如果要别人排错,至少要发以下6方面的截图,因为与一下6点关系很大。 1)整个项目目录结构, 2)@task入参 ,3)celery的配置,4)celery的配置 include ,5)cmd命令行启动参数 --queues= 的值,6)用户在启动cmd命令行时候,用户所在的文件夹。 在不规范的文件夹路径下,使用celery难度很高,一般教程都没教。 [项目文件夹目录格式不规范下的celery使用演示](https://github.com/ydf0509/celery_demo) 。 此国产分布式函数调度框架 funboost python万能通用函数加速器 https://funboost.readthedocs.io/ , 从用法调用难度,用户所需代码量,超高并发性能,qps控频精确程度,支持的中间件类型,任务控制方式,稳定程度等19个方面全方位超过celery。发布性能提高1000%,消费性能提高2000%。 python万能分布式函数调度框架funboost支持python所有类型的并发模式和一切知名消息队列中间件,python函数加速器,框架包罗万象,万能编程功能宝典,一统编程思维,与业务不绑定,适用范围广。 funboot能支持celery作为中间件,用户可以使用funboost的极简api来使用celery核心调度,不用手动复杂的配置操作celery funboost 自动化操作celery https://github.com/ydf0509/funboost_support_celery_demo pip install funboost
海盗巨人: thanks
征途黯然.: The description of IstioServiceEntry介绍 is very vivid and has given me a deeper insight. I hope to see more content about IstioServiceEntry介绍 in the future!