前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CDN系列学习文章(四)——缓存机制

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

原创
作者头像
开元
修改2019-06-19 22:54:36
2.8K0
修改2019-06-19 22:54:36
举报
文章被收录于专栏:开元说说开元说说

“所有文件配置缓存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等(黄色框)
HTTP响应
HTTP响应

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没有修改,这样就会出现开篇第二个问题情况。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
内容分发网络 CDN
内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档