透过ATS缓存配置看如何判断HTTP资源是否可缓存方法论

      缓存有个大原则,就是在不影响用户、不触犯法律的前提下,尽量多的将资源缓存到本地。哪些HTTP资源可以cache哪些不能cache,ATS对可缓存性有一套系统的判断机制,设置灵活,可以对全局进行配置也可以对个别资源单独配置,可以针对单个url进行配置也可以针对文件后缀类型进行配置,可以对正常资源进行配置也可以对故障信息(状态码400以上)进行配置,可以对静态资源进行配置也可以对动态资源单独配置,现在就剖开看一下。
 

一、HTTP响应头信息配置缓存级别

任何cache系统大多数资源都是通过HTTP头信息来判断是否可缓存的,ATS同样如此,此头信息的配置是资源是否cache的一个必要条件,并且根据头部信息的情况将资源分为3个级别,分别是:

  • 2、有明确的缓存生命周期,具体表现是响应头里有expires(到什么时间过期)或者有Cache-Control:(max-age、no-cache),这种设置对用户最负责任,不会出错,我们线上ATS默认使用这个级别

  • 1、有Last-Modified头或者有明确的缓存生命周期,这个级别就要松一些了,即使资源没有明确的缓存周期,但是通过Last-Modified头结合ATS自身的算法机制(引进了老化因子的概念)计算出缓存时间,对资源进行缓存,存多久看后面的第五条;

  • 0、在级别1的基础上,对没有明确头部信息的资源,默认存入本地缓存,存多久见后面第五条,然后每次if-modified-since回源。

      具体对应的配置如下:

      proxy.config.http.cache.required_headers  0|1|2    (0是无要求,1是有Last-Modified头或者有明确的缓存生命周期,2是有明确的缓存生命周期)

此为ATS所有内容是否可缓存的必要不充分条件。 

 

二、动态内容是否缓存

ATS不会像人一样通过理性判断去确定资源是否为动态,他对动静态资源的判断完全是依赖url特征匹配,我们线上的默认配置是不缓存,对应的配置参数是:

      proxy.config.http.cache.cache_urls_that_look_dynamic   0|1  (0是不缓存,1是可缓存) 

 此为动态内容ATS是否可缓存的必要不充分条件。

三、带cookie的资源是否缓存

web2.0的网站中,很多资源带有cookie,对于cookie的信息是否缓存,如何缓存才能不影响用户质量考验着cache系统的性能,ATS对于cookie的设置分5个级别:

      proxy.config.http.cache.cache_responses_to_cookies INT  0|1|2|3|4
 

  • 0、任何带cookie的资源都不缓存;

  • 1、任何带cookie的资源都缓存;

  • 2、只缓存是图片的cookie资源;

  • 3、除了文本类型其余的cookie资源都缓存。

  • 4、除了系统响应的没有”Set-Cookie”或者有”Cache-Control:public”的文本类型其余的cookie资源都缓存。(我们线上设备的默认配置级别)

 此为cookie内容ATS是否可缓存的必要不充分条件。

四、故障信息是否缓存

所谓故障信息指的是源站返回的4XX、5XX等错误代码,对于故障信息是否缓存是存在争议的,ATS在处理上将故障信息分为两类,一类是带有明确生命周期的故障,另一类是没带有生命周期的故障,配置的参数如下:

        proxy.config.http.negative_caching_enabled  0|1  (1对所有故障信息都缓存,0是只缓存有明确生命周期的故障信息,线上默认使用的是0)

        proxy.config.http.negative_caching_lifetime   2s   (对有明确缓存生命周期的故障信息的缓存时间,可以根据时间时间设置,目前线上默认改为2s 

五、对于请求头、响应头中无任何缓存说明的信息资源

   对于这种信息ats是通过proxy.config.http.cache.required_headers头再加上默认时间指令来控制的,比如header头设置的是0级别,就是说对于头部信息设置最宽松的策略,这时一个请求,如果没有Cache-control、expires、Last-Modified这些字段,但是有Last-Modified头的话,是通过最小化因子计算缓存时间,对应指令和计算方式如下:

      proxy.config.http.cache.heuristic_lm_factor FLOAT 0.100000 (缓存时间=当前时间减Last-Modified时间*0.1

      对于连Last-Modified头都没有的信息,是通过默认存储时间去计算的,这个nginx的判断逻辑有点类似,不过nginx对于缓存与否是全部判断了后再操作,但ats是存不存和存多久是分开的,哪怕存储时间为0也会存一下,这两条指令如下:

      proxy.config.http.cache.heuristic_min_lifetime INT 3600

      proxy.config.http.cache.heuristic_max_lifetime INT 17280000

      单位是秒,也就是说对这种没任何缓存说明信息的资源最小存3600秒,最大存17280000秒。

      其实对于线上环境这三条指令都是用不到的,因为我们把header头的级别设置为了2。


      综上所述:对于ats而言,存储设置是很灵活的,可以对各类资源单独设置,如果觉得还不够还可以在cache.config(影响cache-control字段)对单个资源进行设置。当然每一环都是有逻辑的,我举个例子,现在比如我想要对除了授权类型的所有资源进行强制缓存10天,而且缓存期间不回源,可以这么设置:

traffic_line -s proxy.config.http.cache.cache_urls_that_look_dynamic -v 1

traffic_line -s proxy.config.http.cache.cache_responses_to_cookies -v 1

traffic_line -s proxy.config.http.cache.required_headers -v 0

traffic_line -s proxy.config.http.cache.heuristic_min_lifetime -v 8640000

traffic_line -s proxy.config.http.cache.heuristic_max_lifetime -v 8640000

traffic_line -s proxy.config.http.cache.heuristic_lm_factor -v 0.5

traffic_line -s proxy.config.http.cache.when_to_revalidate -v 3 

cache.config    url_regex=.*    scheme=http       ttl-in-cache=240h

自建个人原创站运维网咖社(www.net-add.com),新的博文会在个人站更新,欢迎浏览。

原创文章,作者:XYGEO,如若转载,请注明出处:http://www.wangzhanshi.com/n/13049.html

(0)
XYGEO的头像XYGEO
上一篇 2025年1月1日 17:07:21
下一篇 2025年1月1日 17:07:23

相关推荐

  • 怎么用全站CDN部署Discourse论坛

    Discourse 介绍 Discourse 是一款由 Stack Overflow 的联合创始人——Jeff Atwood,基于 Ruby on Rails 开发的开源论坛。相较…

    2025年1月1日
  • CDN缓存是什么意思

    CDN是一项和加速网站访问速度和用户下载资源速度的服务,那么,CDN缓存是什么意思?有什么优点和缺点?对此,本文就来告诉大家CDN加速的那些事,有兴趣的伙伴们记得了解下。 CDN是…

    2025年1月1日
  • 高防CDN与高防服务器大对比

    用户在购买网站那些事的CDN服务之后,在使用过程中会比较关心是否有实际效果,首先大家要先确保是否已经开通成功,然后按照基本步骤添加加速域名、配置CNAME,这些都成功搞定之后,接下…

    CDN加速 2025年1月2日
  • 如何解决CDN等高并发的问题

    (一)集群与分布式       集群和分布式都是使用多台服务器进行处理的。集群中的每台服务器具有相同的功能,处理请求时调用哪台服务…

    CDN加速 2025年1月1日
  • 访问cdn获取基本信息有问题该怎么处理

    用户在购买网站那些事的CDN服务之后,在使用过程中会比较关心是否有实际效果,首先大家要先确保是否已经开通成功,然后按照基本步骤添加加速域名、配置CNAME,这些都成功搞定之后,接下…

    2025年1月1日
  • 用cdn加速的一些理由

    网站那些事内容分发网络(Content Delivery Network,简称CDN)是建立并覆盖在承载网之上,由分布在不同区域的边缘节点云服务器’ target=&#…

    2025年1月2日
  • CDN作用大不大

    用户在购买网站那些事的CDN服务之后,在使用过程中会比较关心是否有实际效果,首先大家要先确保是否已经开通成功,然后按照基本步骤添加加速域名、配置CNAME,这些都成功搞定之后,接下…

    2025年1月1日
  • 如何用CDN给网站加速

    随着互联网的发展以及视频直播行业的大火,国内的CDN行业逐渐得到了重视,迎来的整个行业发展的黄金期。 CDN技术是近年来在美国首先兴起的,并且得到了迅速发展的一种解决互联网性能不佳…

    CDN加速 2025年1月1日
  • 怎样分析CDN的由来与调度

    CDN是将源站内容分发至全国所有的节点,从而缩短用户查看对象的延迟,提高用户访问网站的响应速度与网站的可用性的技术。它能够有效解决网络带宽小、用户访问量大、网点分布不均等问题。 下…

    2025年1月1日
  • cdn许可证申请需要准备什么流程

    网站那些事内容分发网络(Content Delivery Network,简称CDN)是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。网站那些事CDN…

    2025年1月1日

发表回复

登录后才能评论