新闻、帮助、产品更新动态

最新的业界新闻,产品系统更新开发动态,帮助教程和活动发布

CDN系列学习文章(四)——缓存机制

发布日:2021-10-17 14:43       阅读数:

“所有文件配置缓存30天,相同CDN节点测试,一周后请求怎么就回源了?”
 
‘’明明设置了CDN缓存时间为0,为啥还缓存?”
 
带着这两个问题,咱们从缓存空间,内容和策略三方面来介绍CDN节点缓存机制
 
1.缓存空间
 
CDN服务器会将内容存储,以块形式,存储到磁盘中。磁盘容量是有限的,为了保持容量在一个健康水位,一般遵循删除策略(文件最久未访问)来淘汰文件。假设,互联网上所有静态资源在CDN节点上配置缓存时间都是一年,如果磁盘严格遵守缓存时间来缓存内容,这一年下来,CDN机房都没有地方来放磁盘了。因此在CDN上配置较长的缓存时间,CDN节点行为是尽力而为,并不是严格遵守。这里应该明白第一个问题了吧
 
2.缓存内容
 
CDN节点到底缓存源站哪些内容呢?CDN缓存内容来源于HTTP请求响应内容,HTTP响应包括状态行,header头部,body。这里问一个问题
 
如果CDN节点把源站所有响应都缓存下来,有什么影响?讲道理,缓存就应该把源站响应内容全盘照收,然后将缓存内容返回给用户。但这里有问题,既然是HTTP响应中,除了body之外,状态行和header很多字段是重复的,如果把这些字段都缓存在磁盘,对磁盘空间是一种浪费。更糟糕的情况,如果都是1K小文件,一个盘里存储内容都是状态行和header,显然是不合理的。一般CDN厂家,对缓存HTTP响应header策略有差异,但基本规则都差不多:
 
body这个肯定是需要缓存的,这点没啥好说的。(蓝色框,测试仅内容显示大小)
状态行,这个一般不缓存,都是程序逻辑判断生产。(红色框)
header,保存和缓存相关的字段,各家厂家有所差别,例如last-modify,expired等(黄色框)

3.缓存策略
 
CDN缓存策略。可能大家对这个概念比较模糊,咱们细化为两个问题:
 
CDN节点基于什么条件来决定该文件是否缓存?
 
这个问题,反过来想,CDN节点肯定是能缓存任何响应内容,但是在海量资源里,系统如何能找到这个资源呢?都不要思考,肯定是请求URL呀。如果每条URL都配置缓存策略也是不现实的,但是对这些URL进行抽象成不同的正则表达式,对应缓存策略。这个正则,在系统内成为缓存key,每一个缓存key对应一个缓存时间,也是对应缓存策略。
即使遵循上面缓存规则,但是是否所有源站响应的内容都是缓存呢?当然不是,例如5XX,4XX,3XX这些异常响应内容默认是不缓存的。一方面,CDN缓存主要缓存body内容,而这些状态码对应body内容价值较少,还浪费磁盘空间;另一个方面,可能会影响正常业务访问。如果配置502缓存1小时,源站异常1分钟,本来只影响一分钟业务,由于配置了502,用户访问直接吐缓存资源,结果影响了1小时。
用户请求,节点发现缓存文件过期,CDN处理逻辑?这里不同厂家处理方式不一样
 
回源拉取文件,直接覆盖缓存文件,对IO有消耗。
回源拉取文件,节点判断Mtime,如果Mtime一致,直接吐缓存文件,不进行覆盖。这里试想,如果设置了缓存时间为0,但是源站的Mtime没有修改,这样就会出现开篇第二个问题情况。
 

编辑:航网科技   来源:腾讯云

本文版权归原作者所有 转载请注明出处

联系我们

客服部:深圳市龙华区龙胜商业大厦5楼B5区

业务部:深圳市南山区讯美科技广场2栋12楼1202

资质证书

  • Copyright © 2011-2020 www.hangw.com. All Rights Reserved 深圳航网科技有限公司 版权所有 增值电信业务经营许可证:粤B2-20201122 - 粤ICP备14085080号

    在线客服

    微信扫一扫咨询客服


    全国免费服务热线
    0755-36300002

    返回顶部