阿里云CDN的缓存策略是怎么运作的?

简介: CDN是整个阿里云产品框架中是一个很重要的一环,因为它主要是在产品最外层,保证真实的客户在访问服务器端资源的时候能够有一个较好的体验。 那么CDN底层主要是通过什么样的手段去实现的呢?其实它就相当于在客户的就近的地区,布置了对应的节点,并且把对应的一些静态资源,比如说图片、视频等这些资源预先先缓存到对应的节点上。

CDN是整个阿里云产品框架中是一个很重要的一环,因为它主要是在产品最外层,保证真实的客户在访问服务器端资源的时候能够有一个较好的体验。

image

那么CDN底层主要是通过什么样的手段去实现的呢?其实它就相当于在客户的就近的地区,布置了对应的节点,并且把对应的一些静态资源,比如说图片、视频等这些资源预先先缓存到对应的节点上。以后,在客户访问的时候,我们就可以直接通过节点去拉起对应的资源并返回给客户,就不需要再回源了。这样的操作就缩短了客户端到服务器端的一个链路,提升了整个站点的ISP、地域兼容性。

CDN主要涉及的两个核心点是主要缓存的是静态资源和主要针对的是客户端请求的静态资源的缓存。

静态资源的请求主要指的是http的get请求。对于http协议里其他请求比如说put以及POST等动态回源的一些请求,CDN可能就不会去做任何缓存的处理,而是直接透传给源站,然后由源站进行对应的处理后返回给客户端。

阿里云CDN缓存规则配置

在CDN中,我们可以设置一些缓存规则来匹配一些实际业务场景的需求

image

CDN配置主要提供了包括目录、文件的后缀两种缓存配置方式。我们可以在针对于我们实际需要缓存的一些静态文件的目录或者一些静态文件的一些后缀名来配置对应的缓存规则,然后实现一些动态可调整的一些缓存配置。

同时,这里的缓存配置可以设置不同权重,这样我们可以针对于不同的文件设置多种缓存配置,那在实际的业务场景,我会按照高优先级的缓存配置来对它进行缓存。

阿里云CDN缓存策略解读

配置完成后,CDN是按照什么样的一个缓存规则来对资源进行缓存的呢?那接下来我们就来详细的解读一下这些缓存配置。

image

浏览器缓存

整个的缓存体系会包括浏览器缓存和CDN节点本身的缓存。对于浏览器缓存来说,浏览器主要是根据http头里Cache-Control和Expires等信息来决定我浏览器的缓存行为,这些信息同时包括强缓存、验证性缓存等。

image

针对Cache-Control和Expires信息,用户是可以在源站配置对应的信息,直接返给给客户端。如果在CDN上没有配置对应的http响应头的话,CDN会将源站配置的response头直接返给给浏览器。浏览器就会按照源站的配置直接按对应的缓存规则进行缓存处理。

如果在CDN上配置了HTTP头,我会覆盖源站的Cache-Control及Expires头信息。浏览器真实的缓存规则会按照CDN返回的response信息进行缓存。

CDN缓存策略

以上就是浏览器的缓存策略,那么CDN的缓存策略是什么呢。

image

CDN的缓存规则会首先依赖于源站返回给CDN的Cache-Control和Expires头信息。如果如果源站设置了no-cache或private或max-age=0这些信息,就相当于源站是不允许CDN对这个资源进行缓存的。这种情况下,CDN会存遵从于源站的设置,会对对应的资源不做任何的缓存而直接返回给浏览器。下一次在访问的时候,CDN同样会到源站去拉取对应的资源。对于这一类资源,用户主要是想让他时时的回到源站,不想返回历史的旧数据。

那在源站没有设置不允许CDN缓存的response头的情况下,CDN就会按照下图的逻辑进行缓存。

image

如果客户在控制台上配置对应的缓存规则的,CDN的缓存规则会优于源站的缓存规则,然后按照CDN的缓存规则进行缓存处理。如果CDN没有配置对应的缓存规则的话,CDN会完全按照源站的Cache-Control和Expires头进行缓存。

image

对于远站没有设置对应的缓存规则的话,CDN会按照上图中4和5的策略去缓存。第四点,CDN会按照CDN控制台上配置的缓存规则进行缓存,而第五点就是在既没有配置任何的缓存规则,而客户的源站也没有配置任何的缓存规则的情况,CDN会有一套自己的默认的缓存规则。

针对于默认的缓存规则,CDN针对的是源站对应的静态文件。通过源站返回的response头是否含有etag或者last-modified信息判断。如果返回的response包含这两个信息的任何一个,那CDN会认为这个文件是一个静态文件。如果返回的response头里面有last-modified信息,那么CDN会根据当前访问的时间戳减去last-modified乘以0.1,得到的值会被作为CDN的缓存时间,这个时间会在10~3600秒的区间范围内。如果只返回etag,CDN会默认缓存十秒的时间。

对于这种场景,其实客户的缓存规则是不可控的。因此我们建议不管是在源站还是在CDN控制台上,我们都能配置符合业务场景的缓存规则。

CDN返回response头解读

以上就是CDN缓存规则的解读,那我们在实际使用的过程中,我们又如何查看当前这个文件到底有没有在CDN节点上缓存或者它缓存的时间是多少呢?

image

资源在经过CDN节点以后,一定会在对应的http的response头里加若干的字段。其中的X-Swift-CacheTime就表示了这个资源在CDN节点上的缓存时间。对应的X-Swift-SaveTime表示对应的资源在时间节点上缓存配置了多长时间。

另外就是这个VIA字段,包含有四段信息,其中第一段和第三段会有一个M或者H的标识。M表示对应的资源没有在对应的CDN节点上缓存。H就表示对应的资源有在CDN节点上缓存。

第一段说明L2节点的缓存情况,第三段指的是L1节点的缓存情况,这两个其中有一个包含H,就表示对应的资源已经在CDN节点上进行了缓存。那这一次访问就不需要再回到源站拉取对应的资源了。


原文链接:https://aliyunnew.com/a/How-does-the-caching-strategy-of-Aliyun-CDN-work.html

相关文章
|
27天前
|
存储 缓存 算法
缓存淘汰策略
缓存淘汰策略
30 0
|
1月前
|
存储 缓存 NoSQL
后端开发中的缓存策略:提升应用性能的关键
后端开发中的缓存策略:提升应用性能的关键
24 0
|
1月前
|
缓存 监控 NoSQL
解析Redis缓存雪崩及应对策略
解析Redis缓存雪崩及应对策略
|
2月前
|
存储 缓存 UED
缓存策略与Apollo:优化网络请求性能
缓存策略与Apollo:优化网络请求性能
|
3月前
|
缓存 NoSQL 关系型数据库
mysql缓存策略
mysql缓存策略
28 0
|
15天前
|
缓存 关系型数据库 MySQL
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
|
2月前
|
域名解析 网络协议 安全
阿里云CDN
本文介绍阿里云CDN产品中涉及的基本概念,便于您更准确地理解和使用CDN产品。
59 5
|
3天前
|
缓存 NoSQL Java
使用Redis进行Java缓存策略设计
【4月更文挑战第16天】在高并发Java应用中,Redis作为缓存中间件提升性能。本文探讨如何使用Redis设计缓存策略。Redis是开源内存数据结构存储系统,支持多种数据结构。Java中常用Redis客户端有Jedis和Lettuce。缓存设计遵循一致性、失效、雪崩、穿透和预热原则。常见缓存模式包括Cache-Aside、Read-Through、Write-Through和Write-Behind。示例展示了使用Jedis实现Cache-Aside模式。优化策略包括分布式锁、缓存预热、随机过期时间、限流和降级,以应对缓存挑战。
|
6天前
|
存储 缓存 自动驾驶
缓存策略与Apollo:优化网络请求性能
缓存策略与Apollo:优化网络请求性能
|
10天前
|
存储 缓存 iOS开发
基于iOS的高效图片缓存策略实现
【4月更文挑战第9天】在移动应用开发中,图片资源的加载与缓存是影响用户体验的重要因素之一。特别是对于iOS平台,合理设计图片缓存策略不仅能够提升用户浏览图片时的流畅度,还能有效降低应用程序的内存压力。本文将介绍一种针对iOS环境优化的图片缓存技术,该技术通过多级缓存机制和内存管理策略,实现了图片快速加载与低内存消耗的目标。我们将从系统架构、关键技术细节以及性能评估等方面展开讨论,为开发者提供一套实用的图片缓存解决方案。
15 0

热门文章

最新文章